diff options
author | James Y Knight <jyknight@google.com> | 2017-07-20 20:09:11 +0000 |
---|---|---|
committer | James Y Knight <jyknight@google.com> | 2017-07-20 20:09:11 +0000 |
commit | 4d6a372483589a561f3ecf4540fa310f3a4aafbd (patch) | |
tree | 0dfc693856beb908ec056a7b8bce4cd1f3f77446 /test/CodeGen/SPARC/disable-fsmuld-fmuls.ll | |
parent | cf138ec1422f764724650fbd9f36087d7ecf79e1 (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.ll | 38 |
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 +} |