124 lines
4.1 KiB
C
124 lines
4.1 KiB
C
// 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;
|
|
}
|