summaryrefslogtreecommitdiffstats
path: root/llvm/test/Transforms
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/test/Transforms')
-rw-r--r--llvm/test/Transforms/IndVarSimplify/2011-09-10-widen-nsw.ll6
-rw-r--r--llvm/test/Transforms/IndVarSimplify/iv-widen.ll35
-rw-r--r--llvm/test/Transforms/IndVarSimplify/lftr-reuse.ll5
-rw-r--r--llvm/test/Transforms/IndVarSimplify/loop-invariant-conditions.ll3
-rw-r--r--llvm/test/Transforms/IndVarSimplify/no-iv-rewrite.ll5
-rw-r--r--llvm/test/Transforms/IndVarSimplify/pr25578.ll3
6 files changed, 55 insertions, 2 deletions
diff --git a/llvm/test/Transforms/IndVarSimplify/2011-09-10-widen-nsw.ll b/llvm/test/Transforms/IndVarSimplify/2011-09-10-widen-nsw.ll
index ad63277db55..09082c61eec 100644
--- a/llvm/test/Transforms/IndVarSimplify/2011-09-10-widen-nsw.ll
+++ b/llvm/test/Transforms/IndVarSimplify/2011-09-10-widen-nsw.ll
@@ -5,6 +5,8 @@
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
+declare void @use(i64 %x)
+
define void @test() nounwind {
entry:
br i1 undef, label %for.body11, label %for.end285
@@ -26,15 +28,19 @@ for.body170: ; preds = %for.body170, %for.b
%add = add nsw i32 %i2.19, 1
%add.idxprom = sext i32 %add to i64
+ call void @use(i64 %add.idxprom)
%sub = sub nsw i32 %i2.19, 2
%sub.idxprom = sext i32 %sub to i64
+ call void @use(i64 %sub.idxprom)
%sub.neg = sub nsw i32 4, %i2.19
%sub.neg.idxprom = sext i32 %sub.neg to i64
+ call void @use(i64 %sub.neg.idxprom)
%mul = mul nsw i32 %i2.19, 8
%mul.idxprom = sext i32 %mul to i64
+ call void @use(i64 %mul.idxprom)
%add249 = add nsw i32 %i2.19, %shl132
br label %for.body170
diff --git a/llvm/test/Transforms/IndVarSimplify/iv-widen.ll b/llvm/test/Transforms/IndVarSimplify/iv-widen.ll
index aa69da4b505..558869aac92 100644
--- a/llvm/test/Transforms/IndVarSimplify/iv-widen.ll
+++ b/llvm/test/Transforms/IndVarSimplify/iv-widen.ll
@@ -7,10 +7,12 @@ target datalayout = "n8:16:32:64"
target triple = "x86_64-apple-darwin"
+declare void @use(i64 %x)
+
; CHECK-LABEL: @loop_0
; CHECK-LABEL: B18:
; Only one phi now.
-; CHECK: phi
+; CHECK: phi i64
; CHECK-NOT: phi
; One trunc for the gep.
; CHECK: trunc i64 %indvars.iv to i32
@@ -24,6 +26,37 @@ Prologue:
B18: ; preds = %B24, %Prologue
%.02 = phi i32 [ 0, %Prologue ], [ %tmp33, %B24 ]
%tmp23 = zext i32 %.02 to i64
+ call void @use(i64 %tmp23)
+ %tmp33 = add i32 %.02, 1
+ %o = getelementptr i32, i32* %a, i32 %.02
+ %v = load i32, 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
+}
+
+; Make sure that dead zext is removed and no widening happens.
+; CHECK-LABEL: @loop_0.dead
+; CHECK: phi i32
+; CHECK-NOT: zext
+; CHECK-NOT: trunc
+define void @loop_0.dead(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, i32* %a, i32 %.02
%v = load i32, i32* %o
diff --git a/llvm/test/Transforms/IndVarSimplify/lftr-reuse.ll b/llvm/test/Transforms/IndVarSimplify/lftr-reuse.ll
index b4e1fdef488..dd09f162d79 100644
--- a/llvm/test/Transforms/IndVarSimplify/lftr-reuse.ll
+++ b/llvm/test/Transforms/IndVarSimplify/lftr-reuse.ll
@@ -6,6 +6,8 @@ target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f3
; Perform LFTR using the original pointer-type IV.
+declare void @use(double %x)
+
; for(char* p = base; p < base + n; ++p) {
; *p = p-base;
; }
@@ -102,9 +104,11 @@ loop:
%diagidxw = sext i32 %diagidx to i64
%matrixp = getelementptr inbounds [0 x double], [0 x double]* %matrix, i32 0, i64 %diagidxw
%v1 = load double, double* %matrixp
+ call void @use(double %v1)
%iw = sext i32 %i to i64
%vectorp = getelementptr inbounds [0 x double], [0 x double]* %vector, i32 0, i64 %iw
%v2 = load double, double* %vectorp
+ call void @use(double %v2)
%row.inc = add nsw i32 %rowidx, %ilead
%i.inc = add nsw i32 %i, 1
%cmp196 = icmp slt i32 %i.inc, %irow
@@ -125,7 +129,6 @@ entry:
; CHECK-NOT: add
; CHECK: loop:
; CHECK: phi i64
-; CHECK: phi i64
; CHECK-NOT: phi
; CHECK: icmp slt
; CHECK: br i1
diff --git a/llvm/test/Transforms/IndVarSimplify/loop-invariant-conditions.ll b/llvm/test/Transforms/IndVarSimplify/loop-invariant-conditions.ll
index 1a63c795548..320f0b30cb9 100644
--- a/llvm/test/Transforms/IndVarSimplify/loop-invariant-conditions.ll
+++ b/llvm/test/Transforms/IndVarSimplify/loop-invariant-conditions.ll
@@ -293,6 +293,8 @@ for.end: ; preds = %if.end, %entry
ret void
}
+declare void @use(i1 %x)
+
; check that we handle conditions with loop invariant operands which
; *aren't* in the header - this is a very rare and fragile case where
; we have a "loop" which is known to run exactly one iteration but
@@ -320,6 +322,7 @@ latch:
br i1 true, label %exit, label %loop
exit:
+ call void @use(i1 %cmp)
ret void
}
diff --git a/llvm/test/Transforms/IndVarSimplify/no-iv-rewrite.ll b/llvm/test/Transforms/IndVarSimplify/no-iv-rewrite.ll
index ca7b8991166..ff344cb79e4 100644
--- a/llvm/test/Transforms/IndVarSimplify/no-iv-rewrite.ll
+++ b/llvm/test/Transforms/IndVarSimplify/no-iv-rewrite.ll
@@ -357,6 +357,9 @@ exit:
ret void
}
+declare void @use32(i32 %x)
+declare void @use64(i64 %x)
+
; Test a widened IV that is used by a phi on different paths within the loop.
;
; CHECK: for.body:
@@ -385,10 +388,12 @@ if.else:
if.then97:
%idxprom100 = sext i32 %iv to i64
+ call void @use64(i64 %idxprom100)
br label %for.inc
for.inc:
%kmin.1 = phi i32 [ %iv, %if.then33 ], [ 0, %if.then ], [ %iv, %if.then97 ], [ 0, %if.else ]
+ call void @use32(i32 %kmin.1)
%inc = add nsw i32 %iv, 1
br i1 undef, label %for.body, label %for.end
diff --git a/llvm/test/Transforms/IndVarSimplify/pr25578.ll b/llvm/test/Transforms/IndVarSimplify/pr25578.ll
index bc648b517bb..b9d374a4c77 100644
--- a/llvm/test/Transforms/IndVarSimplify/pr25578.ll
+++ b/llvm/test/Transforms/IndVarSimplify/pr25578.ll
@@ -1,6 +1,8 @@
; RUN: opt < %s -indvars -S | FileCheck %s
target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
+declare void @use(i64 %x)
+
; CHECK-LABEL: @foo
define void @foo() {
entry:
@@ -15,6 +17,7 @@ L1_header:
L2_header:
%i = phi i32 [ 0, %L1_header ], [ %i_next, %L2_latch ]
%i_prom = sext i32 %i to i64
+ call void @use(i64 %i_prom)
br label %L3_header
L3_header:
OpenPOWER on IntegriCloud