summaryrefslogtreecommitdiff
path: root/test/Transforms/IndVarSimplify
diff options
context:
space:
mode:
authorAndrew Trick <atrick@apple.com>2014-01-02 19:29:38 +0000
committerAndrew Trick <atrick@apple.com>2014-01-02 19:29:38 +0000
commitfcbe3d950148f01ed8ed47afda78a13f81a8010b (patch)
treef1518cc3948d6712f7b3291e8dac61c74714c3e4 /test/Transforms/IndVarSimplify
parentd573aba8e13c2afc5ad7c3c3c442a3a84f8bd94d (diff)
downloadllvm-fcbe3d950148f01ed8ed47afda78a13f81a8010b.tar.gz
llvm-fcbe3d950148f01ed8ed47afda78a13f81a8010b.tar.bz2
llvm-fcbe3d950148f01ed8ed47afda78a13f81a8010b.tar.xz
indvars: insert truncate at loop boundary to avoid redundant IVs.
When widening an IV to remove s/zext, we generally try to eliminate the original narrow IV. However, LCSSA phi nodes outside the loop were still using the original IV. Clean this up more aggressively to avoid redundancy in generated code. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@198338 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Transforms/IndVarSimplify')
-rw-r--r--test/Transforms/IndVarSimplify/iv-widen.ll39
1 files changed, 39 insertions, 0 deletions
diff --git a/test/Transforms/IndVarSimplify/iv-widen.ll b/test/Transforms/IndVarSimplify/iv-widen.ll
new file mode 100644
index 0000000000..12067ab6fe
--- /dev/null
+++ b/test/Transforms/IndVarSimplify/iv-widen.ll
@@ -0,0 +1,39 @@
+; RUN: opt < %s -indvars -S | FileCheck %s
+
+target triple = "x86_64-apple-darwin"
+
+; CHECK-LABEL: @sloop
+; CHECK-LABEL: B18:
+; Only one phi now.
+; CHECK: phi
+; CHECK-NOT: phi
+; We now get 2 trunc, one for the gep and one for the lcssa phi.
+; CHECK: trunc i64 %indvars.iv to i32
+; CHECK: trunc i64 %indvars.iv to i32
+; CHECK-LABEL: B24:
+define void @sloop(i32* %a) {
+Prologue:
+ br i1 undef, label %B18, label %B6
+
+B18: ; preds = %B24, %Prologue
+ %.02 = phi i32 [ 0, %Prologue ], [ %tmp33, %B24 ]
+ %tmp23 = zext i32 %.02 to i64
+ %tmp33 = add i32 %.02, 1
+ %o = getelementptr i32* %a, i32 %.02
+ %v = load i32* %o
+ %t = icmp eq i32 %v, 0
+ br i1 %t, label %exit24, label %B24
+
+B24: ; preds = %B18
+ %t2 = icmp eq i32 %tmp33, 20
+ br i1 %t2, label %B6, label %B18
+
+B6: ; preds = %Prologue
+ ret void
+
+exit24: ; preds = %B18
+ call void @dummy(i32 %.02)
+ unreachable
+}
+
+declare void @dummy(i32)