]> granicus.if.org Git - clang/commitdiff
Revert "set the underlying value of “#pragma STDC FP_CONTRACT” on by default"
authorRenato Golin <renato.golin@linaro.org>
Fri, 23 Sep 2016 20:32:52 +0000 (20:32 +0000)
committerRenato Golin <renato.golin@linaro.org>
Fri, 23 Sep 2016 20:32:52 +0000 (20:32 +0000)
This reverts commit r282259, as it broke the AArch64 test-suite bots.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@282289 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Frontend/CompilerInvocation.cpp
test/CodeGen/aarch64-neon-fma.c
test/CodeGen/aarch64-scalar-fma.c [deleted file]
test/CodeGen/fp-contract-pragma.cpp
test/CodeGen/fp-contract-pragma___on-by-default.c [deleted file]
test/Driver/clang_f_opts.c

index 52282e94f4d090a9664522b2624bc38edc3ebdda..c3fbda114eff73df40be87fb70ed8f7ad20424fe 100644 (file)
@@ -2445,12 +2445,6 @@ bool CompilerInvocation::CreateFromArgs(CompilerInvocation &Res,
   if (Arch == llvm::Triple::spir || Arch == llvm::Triple::spir64) {
     Res.getDiagnosticOpts().Warnings.push_back("spir-compat");
   }
-
-  if ((LangOpts.C11 || LangOpts.C99 || LangOpts.CPlusPlus) &&
-      (CodeGenOptions::FPC_On == Res.getCodeGenOpts().getFPContractMode()) &&
-      !LangOpts.CUDA)
-    LangOpts.DefaultFPContract = 1;
-
   return Success;
 }
 
index be7ed95f393954f75f053f59a1f3252ce8921ff2..6ada533c66ee40c74f703a59fab912c397784f6f 100644 (file)
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -triple arm64-none-linux-gnu -target-feature +neon -ffp-contract=off -S -emit-llvm -o - %s | opt -S -mem2reg | FileCheck %s
+// RUN: %clang_cc1 -triple arm64-none-linux-gnu -target-feature +neon -S -emit-llvm -o - %s | opt -S -mem2reg | FileCheck %s
 
 // Test new aarch64 intrinsics and types
 
diff --git a/test/CodeGen/aarch64-scalar-fma.c b/test/CodeGen/aarch64-scalar-fma.c
deleted file mode 100644 (file)
index ee4bd50..0000000
+++ /dev/null
@@ -1,177 +0,0 @@
-// RUN: %clang_cc1 -triple=aarch64-unknown -Os -ffp-contract=fast -S -o - %s | FileCheck -check-prefix=CHECK-FAST -check-prefix=CHECK-ALL %s
-// RUN: %clang_cc1 -triple=aarch64-unknown -Os -ffp-contract=on -S -o - %s | FileCheck -check-prefix=CHECK-ON -check-prefix=CHECK-ALL %s
-// RUN: %clang_cc1 -triple=aarch64-unknown -Os -ffp-contract=off -S -o - %s | FileCheck -check-prefix=CHECK-OFF -check-prefix=CHECK-ALL %s
-// RUN: %clang_cc1 -triple=aarch64-unknown -Os -S -o - %s | FileCheck -check-prefix=CHECK-ON -check-prefix=CHECK-ALL %s
-// REQUIRES: aarch64-registered-target
-
-float test1(float x, float y, float z) {
-  return x*y + z;
-  // CHECK-ALL-LABEL: test1:
-  // CHECK-FAST: fmadd
-  // CHECK-ON: fmadd
-  // CHECK-OFF: fmul
-  // CHECK-OFF-NEXT: fadd
-}
-
-double test2(double x, double y, double z) {
-  z -= x*y;
-  return z;
-  // CHECK-ALL-LABEL: test2:
-  // CHECK-FAST: fmsub
-  // CHECK-ON: fmsub
-  // CHECK-OFF: fmul
-  // CHECK-OFF-NEXT: fsub
-}
-
-float test3(float x, float y, float z) {
-  float tmp = x*y;
-  return tmp + z;
-  // CHECK-ALL-LABEL: test3:
-  // CHECK-FAST: fmadd
-  // CHECK-ON: fmul
-  // CHECK-ON-NEXT: fadd
-  // CHECK-OFF: fmul
-  // CHECK-OFF-NEXT: fadd
-}
-
-double test4(double x, double y, double z) {
-  double tmp = x*y;
-  return tmp - z;
-  // CHECK-ALL-LABEL: test4:
-  // CHECK-FAST: fnmsub
-  // CHECK-ON: fmul
-  // CHECK-ON-NEXT: fsub
-  // CHECK-OFF: fmul
-  // CHECK-OFF-NEXT: fsub
-}
-
-#pragma STDC FP_CONTRACT ON
-
-float test5(float x, float y, float z) {
-  return x*y + z;
-  // CHECK-ALL-LABEL: test5:
-  // CHECK-FAST: fmadd
-  // CHECK-ON: fmadd
-  // CHECK-OFF: fmul
-  // CHECK-OFF-NEXT: fadd
-}
-
-double test6(double x, double y, double z) {
-  z -= x*y;
-  return z;
-  // CHECK-ALL-LABEL: test6:
-  // CHECK-FAST: fmsub
-  // CHECK-ON: fmsub
-  // CHECK-OFF: fmul
-  // CHECK-OFF-NEXT: fsub
-}
-
-float test7(float x, float y, float z) {
-  float tmp = x*y;
-  return tmp + z;
-  // CHECK-ALL-LABEL: test7:
-  // CHECK-FAST: fmadd
-  // CHECK-ON: fmul
-  // CHECK-ON-NEXT: fadd
-  // CHECK-OFF: fmul
-  // CHECK-OFF-NEXT: fadd
-}
-
-double test8(double x, double y, double z) {
-  double tmp = x*y;
-  return tmp - z;
-  // CHECK-ALL-LABEL: test8:
-  // CHECK-FAST: fnmsub
-  // CHECK-ON: fmul
-  // CHECK-ON-NEXT: fsub
-  // CHECK-OFF: fmul
-  // CHECK-OFF-NEXT: fsub
-}
-
-#pragma STDC FP_CONTRACT OFF
-
-float test9(float x, float y, float z) {
-  return x*y + z;
-  // CHECK-ALL-LABEL: test9:
-  // CHECK-FAST: fmadd
-  // CHECK-ON: fmul
-  // CHECK-ON-NEXT: fadd
-  // CHECK-OFF: fmul
-  // CHECK-OFF-NEXT: fadd
-}
-
-double test10(double x, double y, double z) {
-  z -= x*y;
-  return z;
-  // CHECK-ALL-LABEL: test10:
-  // CHECK-FAST: fmsub
-  // CHECK-ON: fmul
-  // CHECK-ON-NEXT: fsub
-  // CHECK-OFF: fmul
-  // CHECK-OFF-NEXT: fsub
-}
-
-float test11(float x, float y, float z) {
-  float tmp = x*y;
-  return tmp + z;
-  // CHECK-ALL-LABEL: test11:
-  // CHECK-FAST: fmadd
-  // CHECK-ON: fmul
-  // CHECK-ON-NEXT: fadd
-  // CHECK-OFF: fmul
-  // CHECK-OFF-NEXT: fadd
-}
-
-double test12(double x, double y, double z) {
-  double tmp = x*y;
-  return tmp - z;
-  // CHECK-ALL-LABEL: test12:
-  // CHECK-FAST: fnmsub
-  // CHECK-ON: fmul
-  // CHECK-ON-NEXT: fsub
-  // CHECK-OFF: fmul
-  // CHECK-OFF-NEXT: fsub
-}
-
-#pragma STDC FP_CONTRACT DEFAULT
-
-float test17(float x, float y, float z) {
-  return x*y + z;
-  // CHECK-ALL-LABEL: test17:
-  // CHECK-FAST: fmadd
-  // CHECK-ON: fmadd
-  // CHECK-OFF: fmul
-  // CHECK-OFF-NEXT: fadd
-}
-
-double test18(double x, double y, double z) {
-  z -= x*y;
-  return z;
-  // CHECK-ALL-LABEL: test18:
-  // CHECK-FAST: fmsub
-  // CHECK-ON: fmsub
-  // CHECK-OFF: fmul
-  // CHECK-OFF-NEXT: fsub
-}
-
-float test19(float x, float y, float z) {
-  float tmp = x*y;
-  return tmp + z;
-  // CHECK-ALL-LABEL: test19:
-  // CHECK-FAST: fmadd
-  // CHECK-ON: fmul
-  // CHECK-ON-NEXT: fadd
-  // CHECK-OFF: fmul
-  // CHECK-OFF-NEXT: fadd
-}
-
-double test20(double x, double y, double z) {
-  double tmp = x*y;
-  return tmp - z;
-  // CHECK-ALL-LABEL: test20:
-  // CHECK-FAST: fnmsub
-  // CHECK-ON: fmul
-  // CHECK-ON-NEXT: fsub
-  // CHECK-OFF: fmul
-  // CHECK-OFF-NEXT: fsub
-}
index ceedfd25e485b284d58ca5053ab47ca36b3657af..1c5921a53f97b06eb856b0b4f4fb8dd9b7dc66b2 100644 (file)
@@ -1,9 +1,10 @@
 // RUN: %clang_cc1 -O3 -triple %itanium_abi_triple -emit-llvm -o - %s | FileCheck %s
 
-// Is FP_CONTRACT on by default, at least at -O3?
-float fp_contract_8(float a, float b, float c) {
-// CHECK: _Z13fp_contract_8fff
+// Is FP_CONTRACT honored in a simple case?
+float fp_contract_1(float a, float b, float c) {
+// CHECK: _Z13fp_contract_1fff
 // CHECK: tail call float @llvm.fmuladd
+  #pragma STDC FP_CONTRACT ON
   return a * b + c;
 }
 
@@ -12,7 +13,6 @@ float fp_contract_2(float a, float b, float c) {
 // CHECK: _Z13fp_contract_2fff
 // CHECK: %[[M:.+]] = fmul float %a, %b
 // CHECK-NEXT: fadd float %[[M]], %c
-  #pragma STDC FP_CONTRACT OFF
   {
     #pragma STDC FP_CONTRACT ON
   }
@@ -20,6 +20,8 @@ float fp_contract_2(float a, float b, float c) {
 }
 
 // Does FP_CONTRACT survive template instantiation?
+class Foo {};
+Foo operator+(Foo, Foo);
 
 template <typename T>
 T template_muladd(T a, T b, T c) {
@@ -60,23 +62,15 @@ float fp_contract_6(float a, float b, float c) {
   return a * b + c;
 }
 
-// Does FP_CONTRACT inside a function override the same in the file scope?
-float fp_contract_1(float a, float b, float c) {
-// CHECK: _Z13fp_contract_1fff
-// CHECK: tail call float @llvm.fmuladd
-  #pragma STDC FP_CONTRACT ON
-  return a * b + c;
-}
-
-
 // If the multiply has multiple uses, don't produce fmuladd.
 // This used to assert (PR25719):
 // https://llvm.org/bugs/show_bug.cgi?id=25719
 
-float fp_contract_7(float a, float b, float c, float& d_passed_by_ref) {
+float fp_contract_7(float a, float b, float c) {
 // CHECK: _Z13fp_contract_7fff
 // CHECK:  %[[M:.+]] = fmul float %b, 2.000000e+00
+// CHECK-NEXT: fsub float %[[M]], %c
   #pragma STDC FP_CONTRACT ON
-  return (d_passed_by_ref = 2 * b) - c;
+  return (a = 2 * b) - c;
 }
 
diff --git a/test/CodeGen/fp-contract-pragma___on-by-default.c b/test/CodeGen/fp-contract-pragma___on-by-default.c
deleted file mode 100644 (file)
index 549f984..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-// RUN: %clang_cc1 -triple aarch64 -O0 -S -o - %s | FileCheck %s --check-prefix   ALL_BUILDS
-// RUN: %clang_cc1 -triple aarch64 -O1 -S -o - %s | FileCheck %s --check-prefixes ALL_BUILDS,NON_O0
-// RUN: %clang_cc1 -triple aarch64 -O2 -S -o - %s | FileCheck %s --check-prefixes ALL_BUILDS,NON_O0
-// RUN: %clang_cc1 -triple aarch64 -O3 -S -o - %s | FileCheck %s --check-prefixes ALL_BUILDS,NON_O0
-
-// REQUIRES: aarch64-registered-target
-
-// ALL_BUILDS-LABEL: fmadd_double:
-// ALL_BUILDS: fmadd d0, d{{[0-7]}}, d{{[0-7]}}, d{{[0-7]}}
-// NON_O0-NEXT: ret
-double fmadd_double(double a, double b, double c) {
-  return a*b+c;
-}
-
-// ALL_BUILDS: fmadd_single:
-// ALL_BUILDS: fmadd s0, s{{[0-7]}}, s{{[0-7]}}, s{{[0-7]}}
-// NON_O0-NEXT: ret
-float  fmadd_single(float  a, float  b, float  c) {
-  return a*b+c;
-}
-
index 1f6c2bae72f7fd418b61a7db74a3af61b0e55f64..2952d0e111751eabf62880d3b91fa580914a5eee 100644 (file)
 // DEPRECATED-OFF-CHECK-NOT: -fdeprecated-macro
 
 // RUN: %clang -### -S -ffp-contract=fast %s 2>&1 | FileCheck -check-prefix=FP-CONTRACT-FAST-CHECK %s
-// RUN: %clang -### -S -ffast-math        %s 2>&1 | FileCheck -check-prefix=FP-CONTRACT-FAST-CHECK %s
-// RUN: %clang -### -S -ffp-contract=off  %s 2>&1 | FileCheck -check-prefix=FP-CONTRACT-OFF-CHECK  %s
-// RUN: %clang -### -S -ffp-contract=on   %s 2>&1 | FileCheck -check-prefix=FP-CONTRACT-ON-CHECK   %s
-
+// RUN: %clang -### -S -ffast-math %s 2>&1 | FileCheck -check-prefix=FP-CONTRACT-FAST-CHECK %s
+// RUN: %clang -### -S -ffp-contract=off %s 2>&1 | FileCheck -check-prefix=FP-CONTRACT-OFF-CHECK %s
 // FP-CONTRACT-FAST-CHECK: -ffp-contract=fast
-// FP-CONTRACT-OFF-CHECK:  -ffp-contract=off
-// FP-CONTRACT-ON-CHECK:   -ffp-contract=on
+// FP-CONTRACT-OFF-CHECK: -ffp-contract=off
 
 // RUN: %clang -### -S -funroll-loops %s 2>&1 | FileCheck -check-prefix=CHECK-UNROLL-LOOPS %s
 // RUN: %clang -### -S -fno-unroll-loops %s 2>&1 | FileCheck -check-prefix=CHECK-NO-UNROLL-LOOPS %s