summaryrefslogtreecommitdiffstats
path: root/clang/test
diff options
context:
space:
mode:
authorStephen Canon <scanon@apple.com>2015-11-16 23:09:11 +0000
committerStephen Canon <scanon@apple.com>2015-11-16 23:09:11 +0000
commit916be929554de6e47111189902afe46677339ac9 (patch)
tree5798518363a66ef8a550e2efcb0268138adcbe5e /clang/test
parent13d3a20ad75605d1782d4d0ef4c9bbe912db7ae4 (diff)
downloadbcm5719-llvm-916be929554de6e47111189902afe46677339ac9.tar.gz
bcm5719-llvm-916be929554de6e47111189902afe46677339ac9.zip
Make FP_CONTRACT ON the default.
Differential Revision: D14200 llvm-svn: 253269
Diffstat (limited to 'clang/test')
-rw-r--r--clang/test/CodeGen/aarch64-neon-fma.c23
-rw-r--r--clang/test/CodeGen/aarch64-scalar-fma.c177
-rw-r--r--clang/test/CodeGen/fp-contract-pragma.cpp2
-rw-r--r--clang/test/Driver/clang_f_opts.c2
4 files changed, 191 insertions, 13 deletions
diff --git a/clang/test/CodeGen/aarch64-neon-fma.c b/clang/test/CodeGen/aarch64-neon-fma.c
index ac808333365..8126fb21da7 100644
--- a/clang/test/CodeGen/aarch64-neon-fma.c
+++ b/clang/test/CodeGen/aarch64-neon-fma.c
@@ -1,5 +1,8 @@
// REQUIRES: aarch64-registered-target
-// RUN: %clang_cc1 -triple arm64-none-linux-gnu -target-feature +neon -S -O3 -o - %s | FileCheck %s
+// RUN: %clang_cc1 -triple arm64-none-linux-gnu -target-feature +neon -S -O3 \
+// RUN: -ffp-contract=off -o - %s | FileCheck %s
+// RUN: %clang_cc1 -triple arm64-none-linux-gnu -target-feature +neon -S -O3 \
+// RUN: -o - %s | FileCheck -check-prefix=CHECK-FMA %s
// Test new aarch64 intrinsics and types
@@ -10,8 +13,7 @@ float32x2_t test_vmla_n_f32(float32x2_t a, float32x2_t b, float32_t c) {
return vmla_n_f32(a, b, c);
// CHECK: fmul {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[0]
// CHECK: fadd {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
- // CHECK-FMA: dup {{v[0-9]+}}.2s, {{v[0-9]+}}.s[0]
- // CHECK-FMA: fmla {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
+ // CHECK-FMA: fmla {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[0]
}
float32x4_t test_vmlaq_n_f32(float32x4_t a, float32x4_t b, float32_t c) {
@@ -19,8 +21,7 @@ float32x4_t test_vmlaq_n_f32(float32x4_t a, float32x4_t b, float32_t c) {
return vmlaq_n_f32(a, b, c);
// CHECK: fmul {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[0]
// CHECK: fadd {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
- // CHECK-FMA: dup {{v[0-9]+}}.4s, {{v[0-9]+}}.s[0]
- // CHECK-FMA: fmla {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
+ // CHECK-FMA: fmla {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[0]
}
float64x2_t test_vmlaq_n_f64(float64x2_t a, float64x2_t b, float64_t c) {
@@ -28,8 +29,7 @@ float64x2_t test_vmlaq_n_f64(float64x2_t a, float64x2_t b, float64_t c) {
return vmlaq_n_f64(a, b, c);
// CHECK: fmul {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.d[0]
// CHECK: fadd {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
- // CHECK-FMA: dup {{v[0-9]+}}.2d, {{v[0-9]+}}.d[0]
- // CHECK-FMA: fmla {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
+ // CHECK-FMA: fmla {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.d[0]
}
float32x4_t test_vmlsq_n_f32(float32x4_t a, float32x4_t b, float32_t c) {
@@ -37,8 +37,7 @@ float32x4_t test_vmlsq_n_f32(float32x4_t a, float32x4_t b, float32_t c) {
return vmlsq_n_f32(a, b, c);
// CHECK: fmul {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[0]
// CHECK: fsub {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
- // CHECK-FMA: dup {{v[0-9]+}}.4s, {{v[0-9]+}}.s[0]
- // CHECK-FMA: fmls {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
+ // CHECK-FMA: fmls {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[0]
}
float32x2_t test_vmls_n_f32(float32x2_t a, float32x2_t b, float32_t c) {
@@ -46,8 +45,7 @@ float32x2_t test_vmls_n_f32(float32x2_t a, float32x2_t b, float32_t c) {
return vmls_n_f32(a, b, c);
// CHECK: fmul {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[0]
// CHECK: fsub {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
- // CHECK-FMA: dup {{v[0-9]+}}.2s, {{v[0-9]+}}.s[0]
- // CHECK-FMA: fmls {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
+ // CHECK-FMA: fmls {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[0]
}
float64x2_t test_vmlsq_n_f64(float64x2_t a, float64x2_t b, float64_t c) {
@@ -55,8 +53,7 @@ float64x2_t test_vmlsq_n_f64(float64x2_t a, float64x2_t b, float64_t c) {
return vmlsq_n_f64(a, b, c);
// CHECK: fmul {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.d[0]
// CHECK: fsub {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
- // CHECK-FMA: dup {{v[0-9]+}}.2d, {{v[0-9]+}}.d[0]
- // CHECK-FMA: fmls {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
+ // CHECK-FMA: fmls {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.d[0]
}
float32x2_t test_vmla_lane_f32_0(float32x2_t a, float32x2_t b, float32x2_t v) {
diff --git a/clang/test/CodeGen/aarch64-scalar-fma.c b/clang/test/CodeGen/aarch64-scalar-fma.c
new file mode 100644
index 00000000000..ee4bd5065fc
--- /dev/null
+++ b/clang/test/CodeGen/aarch64-scalar-fma.c
@@ -0,0 +1,177 @@
+// 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
+}
diff --git a/clang/test/CodeGen/fp-contract-pragma.cpp b/clang/test/CodeGen/fp-contract-pragma.cpp
index b4e24b9e682..b47bce08869 100644
--- a/clang/test/CodeGen/fp-contract-pragma.cpp
+++ b/clang/test/CodeGen/fp-contract-pragma.cpp
@@ -1,5 +1,7 @@
// RUN: %clang_cc1 -O3 -triple %itanium_abi_triple -emit-llvm -o - %s | FileCheck %s
+#pragma STDC FP_CONTRACT OFF
+
// Is FP_CONTRACT is honored in a simple case?
float fp_contract_1(float a, float b, float c) {
// CHECK: _Z13fp_contract_1fff
diff --git a/clang/test/Driver/clang_f_opts.c b/clang/test/Driver/clang_f_opts.c
index 25a1930bdd6..48e7e0cafed 100644
--- a/clang/test/Driver/clang_f_opts.c
+++ b/clang/test/Driver/clang_f_opts.c
@@ -36,8 +36,10 @@
// 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
// FP-CONTRACT-FAST-CHECK: -ffp-contract=fast
// FP-CONTRACT-OFF-CHECK: -ffp-contract=off
+// FP-CONTRACT-ON-CHECK: -ffp-contract=on
// 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
OpenPOWER on IntegriCloud