Reapply "Add support for #pragma float_control" with buildbot fixes
Add support for #pragma float_control
Reviewers: rjmccall, erichkeane, sepavloff
Differential Revision: https://reviews.llvm.org/D72841
This reverts commit fce82c0ed310174fe48e2402ac731b6340098389.
diff --git a/clang/test/CodeGen/fp-floatcontrol-class.cpp b/clang/test/CodeGen/fp-floatcontrol-class.cpp
new file mode 100644
index 0000000..ce4e0eb
--- /dev/null
+++ b/clang/test/CodeGen/fp-floatcontrol-class.cpp
@@ -0,0 +1,21 @@
+// RUN: %clang_cc1 -ffp-contract=on -triple %itanium_abi_triple -emit-llvm -o - %s | FileCheck %s
+// RUN: %clang_cc1 -ffp-contract=on -triple x86_64-linux-gnu -emit-llvm -o - %s | FileCheck %s
+// RUN: %clang_cc1 -ffp-contract=on -triple x86_64-unknown-unknown -emit-llvm -o - %s | FileCheck %s
+// Verify that float_control does not pertain to initializer expressions
+
+float y();
+float z();
+#pragma float_control(except, on)
+class ON {
+ float w = 2 + y() * z();
+ // CHECK-LABEL: define {{.*}} void @_ZN2ONC2Ev{{.*}}
+ //CHECK: call contract float {{.*}}llvm.fmuladd
+};
+ON on;
+#pragma float_control(except, off)
+class OFF {
+ float w = 2 + y() * z();
+ // CHECK-LABEL: define {{.*}} void @_ZN3OFFC2Ev{{.*}}
+ //CHECK: call contract float {{.*}}llvm.fmuladd
+};
+OFF off;