1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
|
// RUN: %clang_cc1 %s -O0 -emit-llvm -triple x86_64-unknown-unknown \
// RUN: -o - | FileCheck %s --check-prefix=FULL
// RUN: %clang_cc1 %s -O0 -emit-llvm -triple x86_64-unknown-unknown \
// RUN: -complex-range=limited -o - | FileCheck %s --check-prefix=LMTD
// RUN: %clang_cc1 %s -O0 -emit-llvm -triple x86_64-unknown-unknown \
// RUN: -fno-cx-limited-range -o - | FileCheck %s --check-prefix=FULL
// RUN: %clang_cc1 %s -O0 -emit-llvm -triple x86_64-unknown-unknown \
// RUN: -complex-range=fortran -o - | FileCheck %s --check-prefix=FRTRN
// Fast math
// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu \
// RUN: -ffast-math -complex-range=limited -emit-llvm -o - %s \
// RUN: | FileCheck %s --check-prefix=LMTD-FAST
// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu \
// RUN: -ffast-math -complex-range=full -emit-llvm -o - %s \
// RUN: | FileCheck %s --check-prefix=FULL
// RUN: %clang_cc1 %s -O0 -emit-llvm -triple x86_64-unknown-unknown \
// RUN: -fno-cx-fortran-rules -o - | FileCheck %s --check-prefix=FULL
// RUN: %clang_cc1 %s -O0 -emit-llvm -triple x86_64-unknown-unknown \
// RUN: -fcx-limited-range -fno-cx-limited-range -o - \
// RUN: | FileCheck %s --check-prefix=FULL
// RUN: %clang_cc1 %s -O0 -emit-llvm -triple x86_64-unknown-unknown \
// RUN: -fno-cx-limited-range -fcx-limited-range -o - \
// RUN: | FileCheck %s --check-prefix=FULL
// RUN: %clang_cc1 %s -O0 -emit-llvm -triple x86_64-unknown-unknown \
// RUN: -fno-cx-fortran-rules -fcx-fortran-rules -o - \
// RUN: | FileCheck %s --check-prefix=FULL
_Complex float div(_Complex float a, _Complex float b) {
// LABEL: define {{.*}} @div(
// FULL: call {{.*}} @__divsc3
// LMTD: fmul float
// LMTD-NEXT: fmul float
// LMTD-NEXT: fadd float
// LMTD-NEXT: fmul float
// LMTD-NEXT: fmul float
// LMTD-NEXT: fadd float
// LMTD-NEXT: fmul float
// LMTD-NEXT: fmul float
// LMTD-NEXT: fsub float
// LMTD-NEXT: fdiv float
// LMTD-NEXT: fdiv float
// FRTRN: call {{.*}}float @llvm.fabs.f32(float {{.*}})
// FRTRN-NEXT: call {{.*}}float @llvm.fabs.f32(float {{.*}})
// FRTRN-NEXT: fcmp {{.*}}ugt float
// FRTRN-NEXT: br i1 {{.*}}, label
// FRTRN: abs_rhsr_greater_or_equal_abs_rhsi:
// FRTRN-NEXT: fdiv {{.*}}float
// FRTRN-NEXT: fmul {{.*}}float
// FRTRN-NEXT: fadd {{.*}}float
// FRTRN-NEXT: fmul {{.*}}float
// FRTRN-NEXT: fadd {{.*}}float
// FRTRN-NEXT: fdiv {{.*}}float
// FRTRN-NEXT: fmul {{.*}}float
// FRTRN-NEXT: fsub {{.*}}float
// FRTRN-NEXT: fdiv {{.*}}float
// FRTRN-NEXT: br label
// FRTRN: abs_rhsr_less_than_abs_rhsi:
// FRTRN-NEXT: fdiv {{.*}}float
// FRTRN-NEXT: fmul {{.*}}float
// FRTRN-NEXT: fadd {{.*}}float
// FRTRN-NEXT: fmul {{.*}}float
// FRTRN-NEXT: fadd {{.*}}float
// FRTRN-NEXT: fdiv {{.*}}float
// FRTRN-NEXT: fmul {{.*}}float
// FRTRN-NEXT: fsub {{.*}}float
// FRTRN-NEXT: fdiv {{.*}}float
// FRTRN-NEXT: br label
// FRTRN: complex_div:
// FRTRN-NEXT: phi {{.*}}float
// FRTRN-NEXT: phi {{.*}}float
// LMTD-FAST: fmul {{.*}} float
// LMTD-FAST-NEXT: fmul {{.*}} float
// LMTD-FAST-NEXT: fadd {{.*}} float
// LMTD-FAST-NEXT: fmul {{.*}} float
// LMTD-FAST-NEXT: fmul {{.*}} float
// LMTD-FAST-NEXT: fadd {{.*}} float
// LMTD-FAST-NEXT: fmul {{.*}} float
// LMTD-FAST-NEXT: fmul {{.*}} float
// LMTD-FAST-NEXT: fsub {{.*}} float
// LMTD-FAST-NEXT: fdiv {{.*}} float
// LMTD-FAST-NEXT: fdiv {{.*}} float
return a / b;
}
_Complex float mul(_Complex float a, _Complex float b) {
// LABEL: define {{.*}} @mul(
// FULL: call {{.*}} @__mulsc3
// LMTD: fmul float
// LMTD-NEXT: fmul float
// LMTD-NEXT: fmul float
// LMTD-NEXT: fmul float
// LMTD-NEXT: fsub float
// LMTD-NEXT: fadd float
// FRTRN: fmul {{.*}}float
// FRTRN-NEXT: fmul {{.*}}float
// FRTRN-NEXT: fmul {{.*}}float
// FRTRN-NEXT: fmul {{.*}}float
// FRTRN-NEXT: fsub {{.*}}float
// FRTRN-NEXT: fadd {{.*}}float
// LMTD-FAST: fmul {{.*}} float
// LMTD-FAST-NEXT: fmul {{.*}} float
// LMTD-FAST-NEXT: fmul {{.*}} float
// LMTD-FAST-NEXT: fmul {{.*}} float
// LMTD-FAST-NEXT: fsub {{.*}} float
// LMTD-FAST-NEXT: fadd {{.*}} float
return a * b;
}
|