summaryrefslogtreecommitdiff
path: root/test/CodeGen/PowerPC
diff options
context:
space:
mode:
authorHal Finkel <hfinkel@anl.gov>2013-08-19 23:35:24 +0000
committerHal Finkel <hfinkel@anl.gov>2013-08-19 23:35:24 +0000
commit30cbccb029b01738202bd04341b1cbf68a7814c9 (patch)
treeab75a4420b789d4acb234ac64e049193e5cf6753 /test/CodeGen/PowerPC
parentff9fa05905be716435460b5f6d32689041bf895b (diff)
downloadllvm-30cbccb029b01738202bd04341b1cbf68a7814c9.tar.gz
llvm-30cbccb029b01738202bd04341b1cbf68a7814c9.tar.bz2
llvm-30cbccb029b01738202bd04341b1cbf68a7814c9.tar.xz
Don't form PPC CTR-based loops around a copysignl call
copysign/copysignf never become function calls (because the SDAG expansion code does not lower to the corresponding function call, but rather directly implements the associated logic), but copysignl almost always is lowered into a call to the requested libm functon (and, thus, might clobber CTR). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@188727 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGen/PowerPC')
-rw-r--r--test/CodeGen/PowerPC/ctrloop-cpsgn.ll28
1 files changed, 28 insertions, 0 deletions
diff --git a/test/CodeGen/PowerPC/ctrloop-cpsgn.ll b/test/CodeGen/PowerPC/ctrloop-cpsgn.ll
new file mode 100644
index 0000000000..2f0440912c
--- /dev/null
+++ b/test/CodeGen/PowerPC/ctrloop-cpsgn.ll
@@ -0,0 +1,28 @@
+; RUN: llc < %s -mcpu=ppc | FileCheck %s
+
+target datalayout = "E-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v128:128:128-n32"
+target triple = "powerpc-unknown-linux-gnu"
+
+define ppc_fp128 @foo(ppc_fp128* nocapture %n, ppc_fp128 %d) nounwind readonly {
+entry:
+ br label %for.body
+
+for.body: ; preds = %for.body, %entry
+ %i.06 = phi i32 [ 0, %entry ], [ %inc, %for.body ]
+ %x.05 = phi ppc_fp128 [ %d, %entry ], [ %conv, %for.body ]
+ %arrayidx = getelementptr inbounds ppc_fp128* %n, i32 %i.06
+ %0 = load ppc_fp128* %arrayidx, align 8
+ %conv = tail call ppc_fp128 @copysignl(ppc_fp128 %x.05, ppc_fp128 %d) nounwind readonly
+ %inc = add nsw i32 %i.06, 1
+ %exitcond = icmp eq i32 %inc, 2048
+ br i1 %exitcond, label %for.end, label %for.body
+
+for.end: ; preds = %for.body
+ ret ppc_fp128 %conv
+}
+
+declare ppc_fp128 @copysignl(ppc_fp128, ppc_fp128) #0
+
+; CHECK: @foo
+; CHECK-NOT: mtctr
+