summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/PowerPC/fdiv-combine.ll
diff options
context:
space:
mode:
authorHal Finkel <hfinkel@anl.gov>2014-11-24 23:45:21 +0000
committerHal Finkel <hfinkel@anl.gov>2014-11-24 23:45:21 +0000
commit360f213d039b519ce33c6b553f211e1cc826b976 (patch)
tree7c749c14b88fce502ee4c501037410d148536931 /llvm/test/CodeGen/PowerPC/fdiv-combine.ll
parent00d3b279cbdad40d27098754820b5951ff9328d8 (diff)
downloadbcm5719-llvm-360f213d039b519ce33c6b553f211e1cc826b976.tar.gz
bcm5719-llvm-360f213d039b519ce33c6b553f211e1cc826b976.zip
[PowerPC] Implement combineRepeatedFPDivisors
This does not matter on newer cores (where we can use reciprocal estimates in fast-math mode anyway), but for older cores this allows us to generate better fast-math code where we have multiple FDIVs with a common divisor. llvm-svn: 222710
Diffstat (limited to 'llvm/test/CodeGen/PowerPC/fdiv-combine.ll')
-rw-r--r--llvm/test/CodeGen/PowerPC/fdiv-combine.ll39
1 files changed, 39 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/PowerPC/fdiv-combine.ll b/llvm/test/CodeGen/PowerPC/fdiv-combine.ll
new file mode 100644
index 00000000000..d3dc3fe913f
--- /dev/null
+++ b/llvm/test/CodeGen/PowerPC/fdiv-combine.ll
@@ -0,0 +1,39 @@
+; RUN: llc -mcpu=ppc64 < %s | FileCheck %s
+target datalayout = "E-m:e-i64:64-n32:64"
+target triple = "powerpc64-unknown-linux-gnu"
+
+; Following test case checks:
+; a / D; b / D; c / D;
+; =>
+; recip = 1.0 / D; a * recip; b * recip; c * recip;
+
+define void @three_fdiv_double(double %D, double %a, double %b, double %c) #0 {
+; CHECK-LABEL: three_fdiv_double:
+; CHECK: fdiv
+; CHECK-NEXT-NOT: fdiv
+; CHECK: fmul
+; CHECK: fmul
+; CHECK: fmul
+ %div = fdiv double %a, %D
+ %div1 = fdiv double %b, %D
+ %div2 = fdiv double %c, %D
+ tail call void @foo_3d(double %div, double %div1, double %div2)
+ ret void
+}
+
+define void @two_fdiv_double(double %D, double %a, double %b) #0 {
+; CHECK-LABEL: two_fdiv_double:
+; CHECK: fdiv
+; CHECK: fdiv
+; CHECK-NEXT-NOT: fmul
+ %div = fdiv double %a, %D
+ %div1 = fdiv double %b, %D
+ tail call void @foo_2d(double %div, double %div1)
+ ret void
+}
+
+declare void @foo_3d(double, double, double)
+declare void @foo_3_2xd(<2 x double>, <2 x double>, <2 x double>)
+declare void @foo_2d(double, double)
+
+attributes #0 = { "unsafe-fp-math"="true" }
OpenPOWER on IntegriCloud