summaryrefslogtreecommitdiff
path: root/test/CodeGen/SPARC/disable-fsmuld-fmuls.ll
diff options
context:
space:
mode:
authorJames Y Knight <jyknight@google.com>2017-07-20 20:09:11 +0000
committerJames Y Knight <jyknight@google.com>2017-07-20 20:09:11 +0000
commit4d6a372483589a561f3ecf4540fa310f3a4aafbd (patch)
tree0dfc693856beb908ec056a7b8bce4cd1f3f77446 /test/CodeGen/SPARC/disable-fsmuld-fmuls.ll
parentcf138ec1422f764724650fbd9f36087d7ecf79e1 (diff)
[SPARC] Clean up the support for disabling fsmuld and fmuls instructions.
Summary: Also enable no-fsmuld for sparcv7 (which doesn't have the instruction). The previous code which used a post-processing pass to do this was unnecessary; disabling the instruction is entirely sufficient. Reviewers: jacob_hansen, ekedaigle Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D35576 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@308661 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGen/SPARC/disable-fsmuld-fmuls.ll')
-rw-r--r--test/CodeGen/SPARC/disable-fsmuld-fmuls.ll38
1 files changed, 38 insertions, 0 deletions
diff --git a/test/CodeGen/SPARC/disable-fsmuld-fmuls.ll b/test/CodeGen/SPARC/disable-fsmuld-fmuls.ll
new file mode 100644
index 00000000000..13207c56b24
--- /dev/null
+++ b/test/CodeGen/SPARC/disable-fsmuld-fmuls.ll
@@ -0,0 +1,38 @@
+; RUN: llc %s -march=sparc -o - | FileCheck --check-prefix=CHECK --check-prefix=DEFAULT %s
+; RUN: llc %s -march=sparc -mattr=no-fmuls -o - | FileCheck --check-prefix=CHECK --check-prefix=NO-FMULS %s
+; RUN: llc %s -march=sparc -mattr=no-fsmuld -o - | FileCheck --check-prefix=CHECK --check-prefix=NO-FSMULD %s
+; RUN: llc %s -march=sparc -mattr=no-fsmuld,no-fmuls -o - | FileCheck --check-prefix=CHECK --check-prefix=NO-BOTH %s
+
+;;; Test case ensures that the no-fsmuld and no-fmuls features disable
+;;; the relevant instruction, and alternative sequences get emitted
+;;; instead.
+
+; CHECK-LABEL: test_float_mul:
+; DEFAULT: fmuls
+; NO-FSMULD: fmuls
+; NO-FMULS: fsmuld
+; NO-FMULS: fdtos
+; NO-BOTH: fstod
+; NO-BOTH: fstod
+; NO-BOTH: fmuld
+; NO-BOTH: fdtos
+define float @test_float_mul(float %a, float %b) {
+entry:
+ %mul = fmul float %a, %b
+
+ ret float %mul
+}
+
+; CHECK-LABEL: test_float_mul_double:
+; DEFAULT: fsmuld
+; NO-FSMULD: fstod
+; NO-FSMULD: fstod
+; NO-FSMULD: fmuld
+define double @test_float_mul_double(float %a, float %b) {
+entry:
+ %a_double = fpext float %a to double
+ %b_double = fpext float %b to double
+ %mul = fmul double %a_double, %b_double
+
+ ret double %mul
+}