| // REQUIRES: x86-registered-target |
| // RUN: %clang_cc1 -triple=x86_64 %s -emit-llvm -o - \ |
| // RUN:| FileCheck --check-prefixes CHECK,CHECK-DEFAULT %s |
| |
| // RUN: %clang_cc1 -triple=x86_64 -ffp-contract=off %s -emit-llvm -o - \ |
| // RUN:| FileCheck --check-prefixes CHECK,CHECK-DEFAULT %s |
| |
| // RUN: %clang_cc1 -triple=x86_64 -ffp-contract=on %s -emit-llvm -o - \ |
| // RUN:| FileCheck --check-prefixes CHECK,CHECK-ON %s |
| |
| // RUN: %clang_cc1 -triple=x86_64 -ffp-contract=fast %s -emit-llvm -o - \ |
| // RUN:| FileCheck --check-prefixes CHECK,CHECK-CONTRACTFAST %s |
| |
| // RUN: %clang_cc1 -triple=x86_64 -ffast-math %s -emit-llvm -o - \ |
| // RUN:| FileCheck --check-prefixes CHECK,CHECK-CONTRACTOFF %s |
| |
| // RUN: %clang_cc1 -triple=x86_64 -ffast-math -ffp-contract=off %s -emit-llvm \ |
| // RUN: -o - | FileCheck --check-prefixes CHECK,CHECK-CONTRACTOFF %s |
| |
| // RUN: %clang_cc1 -triple=x86_64 -ffast-math -ffp-contract=on %s -emit-llvm \ |
| // RUN: -o - | FileCheck --check-prefixes CHECK,CHECK-ONFAST %s |
| |
| // RUN: %clang_cc1 -triple=x86_64 -ffast-math -ffp-contract=fast %s -emit-llvm \ |
| // RUN: -o - | FileCheck --check-prefixes CHECK,CHECK-FASTFAST %s |
| |
| // RUN: %clang_cc1 -triple=x86_64 -ffp-contract=fast -ffast-math %s \ |
| // RUN: -emit-llvm \ |
| // RUN: -o - | FileCheck --check-prefixes CHECK,CHECK-FASTFAST %s |
| |
| // RUN: %clang_cc1 -triple=x86_64 -ffp-contract=off -fmath-errno \ |
| // RUN: -fno-rounding-math %s -emit-llvm -o - \ |
| // RUN: -o - | FileCheck --check-prefixes CHECK,CHECK-NOFAST %s |
| |
| // RUN: %clang -S -emit-llvm -fno-fast-math %s -o - \ |
| // RUN: | FileCheck %s --check-prefixes=CHECK,CHECK-FPC-ON |
| |
| // RUN: %clang -S -emit-llvm -ffp-contract=fast -fno-fast-math \ |
| // RUN: %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-FPC-ON |
| |
| // RUN: %clang -S -emit-llvm -ffp-contract=on -fno-fast-math \ |
| // RUN: %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-FPC-ON |
| |
| // RUN: %clang -S -emit-llvm -ffp-contract=off -fno-fast-math \ |
| // RUN: %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-FPC-OFF |
| |
| // RUN: %clang -S -emit-llvm -ffp-model=fast -fno-fast-math \ |
| // RUN: %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-FPC-ON |
| |
| // RUN: %clang -S -emit-llvm -ffp-model=precise -fno-fast-math \ |
| // RUN: %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-FPC-ON |
| |
| // RUN: %clang -S -emit-llvm -ffp-model=strict -fno-fast-math \ |
| // RUN: -target x86_64 %s -o - | FileCheck %s \ |
| // RUN: --check-prefixes=CHECK,CHECK-FPSC-OFF |
| |
| // RUN: %clang -S -emit-llvm -ffast-math -fno-fast-math \ |
| // RUN: %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-FPC-ON |
| |
| float mymuladd(float x, float y, float z) { |
| // CHECK: define{{.*}} float @mymuladd |
| return x * y + z; |
| // expected-warning{{overriding '-ffp-contract=fast' option with '-ffp-contract=on'}} |
| |
| // CHECK-DEFAULT: load float, float* |
| // CHECK-DEFAULT: fmul float |
| // CHECK-DEFAULT: load float, float* |
| // CHECK-DEFAULT: fadd float |
| |
| // CHECK-ON: load float, float* |
| // CHECK-ON: load float, float* |
| // CHECK-ON: load float, float* |
| // CHECK-ON: call float @llvm.fmuladd.f32(float {{.*}}, float {{.*}}, float {{.*}}) |
| |
| // CHECK-CONTRACTFAST: load float, float* |
| // CHECK-CONTRACTFAST: load float, float* |
| // CHECK-CONTRACTFAST: fmul contract float |
| // CHECK-CONTRACTFAST: load float, float* |
| // CHECK-CONTRACTFAST: fadd contract float |
| |
| // CHECK-CONTRACTOFF: load float, float* |
| // CHECK-CONTRACTOFF: load float, float* |
| // CHECK-CONTRACTOFF: fmul reassoc nnan ninf nsz arcp afn float |
| // CHECK-CONTRACTOFF: load float, float* |
| // CHECK-CONTRACTOFF: fadd reassoc nnan ninf nsz arcp afn float {{.*}}, {{.*}} |
| |
| // CHECK-ONFAST: load float, float* |
| // CHECK-ONFAST: load float, float* |
| // CHECK-ONFAST: load float, float* |
| // CHECK-ONFAST: call reassoc nnan ninf nsz arcp afn float @llvm.fmuladd.f32(float {{.*}}, float {{.*}}, float {{.*}}) |
| |
| // CHECK-FASTFAST: load float, float* |
| // CHECK-FASTFAST: load float, float* |
| // CHECK-FASTFAST: fmul fast float |
| // CHECK-FASTFAST: load float, float* |
| // CHECK-FASTFAST: fadd fast float {{.*}}, {{.*}} |
| |
| // CHECK-NOFAST: load float, float* |
| // CHECK-NOFAST: load float, float* |
| // CHECK-NOFAST: fmul float {{.*}}, {{.*}} |
| // CHECK-NOFAST: load float, float* |
| // CHECK-NOFAST: fadd float {{.*}}, {{.*}} |
| |
| // CHECK-FPC-ON: load float, float* |
| // CHECK-FPC-ON: load float, float* |
| // CHECK-FPC-ON: load float, float* |
| // CHECK-FPC-ON: call float @llvm.fmuladd.f32(float {{.*}}, float {{.*}}, float {{.*}}) |
| |
| // CHECK-FPC-OFF: load float, float* |
| // CHECK-FPC-OFF: load float, float* |
| // CHECK-FPC-OFF: fmul float |
| // CHECK-FPC-OFF: load float, float* |
| // CHECK-FPC-OFF: fadd float {{.*}}, {{.*}} |
| |
| // CHECK-FFPC-OFF: load float, float* |
| // CHECK-FFPC-OFF: load float, float* |
| // CHECK-FPSC-OFF: call float @llvm.experimental.constrained.fmul.f32(float {{.*}}, float {{.*}}, {{.*}}) |
| // CHECK-FPSC-OFF: load float, float* |
| // CHECK-FPSC-OFF: [[RES:%.*]] = call float @llvm.experimental.constrained.fadd.f32(float {{.*}}, float {{.*}}, {{.*}}) |
| |
| } |