| // Test this without pch. |
| // RUN: %clang_cc1 -fexperimental-strict-floating-point %s -include %s -verify -fsyntax-only -DSET |
| // RUN: %clang_cc1 -fexperimental-strict-floating-point %s -include %s -verify -fsyntax-only -DPUSH |
| // RUN: %clang_cc1 -fexperimental-strict-floating-point %s -include %s -verify -fsyntax-only -DPUSH_POP |
| |
| // Test with pch. |
| // RUN: %clang_cc1 -fexperimental-strict-floating-point %s -DSET -emit-pch -o %t |
| // RUN: %clang_cc1 -fexperimental-strict-floating-point %s -DSET -include-pch %t -emit-llvm -o - | FileCheck --check-prefix=CHECK-EBSTRICT %s |
| // RUN: %clang_cc1 -fexperimental-strict-floating-point %s -ffp-contract=on -DSET -emit-pch -o %t |
| // RUN: %clang_cc1 -fexperimental-strict-floating-point %s -DSET -include-pch %t -emit-llvm -o - | FileCheck --check-prefix=CHECK-EBSTRICT %s |
| // RUN: %clang_cc1 -fexperimental-strict-floating-point %s -menable-no-nans -DSET -emit-pch -o %t |
| // RUN: %clang_cc1 -fexperimental-strict-floating-point %s -DSET -include-pch %t -emit-llvm -o - | FileCheck --check-prefix=CHECK-EBSTRICT %s |
| // RUN: %clang_cc1 -fexperimental-strict-floating-point %s -frounding-math -DSET -emit-pch -o %t |
| // RUN: %clang_cc1 -fexperimental-strict-floating-point %s -DSET -include-pch %t -emit-llvm -o - | FileCheck --check-prefix=CHECK-EBSTRICT %s |
| // RUN: %clang_cc1 -fexperimental-strict-floating-point %s -ffp-exception-behavior=maytrap -DSET -emit-pch -o %t |
| // RUN: %clang_cc1 -fexperimental-strict-floating-point %s -DSET -include-pch %t -emit-llvm -o - | FileCheck --check-prefix=CHECK-EBSTRICT %s |
| // RUN: %clang_cc1 -fexperimental-strict-floating-point %s -ffp-contract=fast -DSET -emit-pch -o %t |
| // RUN: %clang_cc1 -fexperimental-strict-floating-point %s -DSET -include-pch %t -emit-llvm -o - | FileCheck --check-prefix=CHECK-EBSTRICT %s |
| // RUN: %clang_cc1 -fexperimental-strict-floating-point %s -DSET -emit-pch -o %t |
| // RUN: %clang_cc1 -fexperimental-strict-floating-point %s -ffp-contract=on -DSET -include-pch %t -emit-llvm -o - | FileCheck --check-prefix=CHECK-CONTRACT %s |
| // RUN: %clang_cc1 -fexperimental-strict-floating-point %s -DPUSH -emit-pch -o %t |
| // RUN: %clang_cc1 -fexperimental-strict-floating-point %s -DPUSH -verify -include-pch %t |
| // RUN: %clang_cc1 -fexperimental-strict-floating-point %s -DPUSH_POP -emit-pch -o %t |
| // RUN: %clang_cc1 -fexperimental-strict-floating-point %s -DPUSH_POP -verify -include-pch %t |
| |
| #ifndef HEADER |
| #define HEADER |
| |
| #ifdef SET |
| #pragma float_control(except, on) |
| #endif |
| |
| #ifdef PUSH |
| #pragma float_control(precise, on) |
| #pragma float_control(push) |
| #pragma float_control(precise, off) |
| #endif |
| |
| #ifdef PUSH_POP |
| #pragma float_control(precise, on, push) |
| #pragma float_control(push) |
| #pragma float_control(pop) |
| #endif |
| #else |
| |
| #ifdef SET |
| float fun(float a, float b) { |
| // CHECK-LABEL: define float @fun{{.*}} |
| //CHECK-EBSTRICT: llvm.experimental.constrained.fmul{{.*}}tonearest{{.*}}strict |
| //CHECK-EBSTRICT: llvm.experimental.constrained.fadd{{.*}}tonearest{{.*}}strict |
| //CHECK-CONTRACT: llvm.experimental.constrained.fmuladd{{.*}}tonearest{{.*}}strict |
| return a * b + 2; |
| } |
| #pragma float_control(pop) // expected-warning {{#pragma float_control(pop, ...) failed: stack empty}} |
| #pragma float_control(pop) // expected-warning {{#pragma float_control(pop, ...) failed: stack empty}} |
| #endif |
| |
| #ifdef PUSH |
| #pragma float_control(pop) |
| #pragma float_control(pop) // expected-warning {{#pragma float_control(pop, ...) failed: stack empty}} |
| #endif |
| |
| #ifdef PUSH_POP |
| #pragma float_control(pop) |
| #pragma float_control(pop) // expected-warning {{#pragma float_control(pop, ...) failed: stack empty}} |
| #endif |
| |
| #endif //ifndef HEADER |