diff options
Diffstat (limited to 'test/Transforms/IndVarSimplify')
5 files changed, 73 insertions, 3 deletions
| diff --git a/test/Transforms/IndVarSimplify/2003-09-23-NotAtTop.ll b/test/Transforms/IndVarSimplify/2003-09-23-NotAtTop.ll index 150ae70a8262..e3de75e36fd8 100644 --- a/test/Transforms/IndVarSimplify/2003-09-23-NotAtTop.ll +++ b/test/Transforms/IndVarSimplify/2003-09-23-NotAtTop.ll @@ -1,4 +1,4 @@ -; RUN: opt -S -indvars %s | FileCheck %s +; RUN: opt -S -indvars < %s | FileCheck %s  ; The indvar simplification code should ensure that the first PHI in the block   ; is the canonical one! diff --git a/test/Transforms/IndVarSimplify/crash.ll b/test/Transforms/IndVarSimplify/crash.ll index 1b702a3b1a3c..aa6a2ee16521 100644 --- a/test/Transforms/IndVarSimplify/crash.ll +++ b/test/Transforms/IndVarSimplify/crash.ll @@ -1,4 +1,4 @@ -; RUN: opt -indvars %s -disable-output +; RUN: opt -indvars -disable-output < %s  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 i32 @putchar(i8) nounwind diff --git a/test/Transforms/IndVarSimplify/dont-recompute.ll b/test/Transforms/IndVarSimplify/dont-recompute.ll new file mode 100644 index 000000000000..d37b0e21f826 --- /dev/null +++ b/test/Transforms/IndVarSimplify/dont-recompute.ll @@ -0,0 +1,69 @@ +; RUN: opt < %s -indvars -S | FileCheck %s + +; This tests that the IV is not recomputed outside of the loop when it is known +; to be computed by the loop and used in the loop any way. In the example below +; although a's value can be computed outside of the loop, there is no benefit +; in doing so as it has to be computed by the loop anyway. +; +; extern void func(unsigned val); +; +; void test(unsigned m) +; { +;   unsigned a = 0; +; +;   for (int i=0; i<186; i++) { +;     a += m; +;     func(a); +;   } +; +;   func(a); +; } + +declare void @func(i32) + +; CHECK: @test +define void @test(i32 %m) nounwind uwtable { +entry: +  br label %for.body + +for.body:                                         ; preds = %for.body, %entry +  %i.06 = phi i32 [ 0, %entry ], [ %inc, %for.body ] +  %a.05 = phi i32 [ 0, %entry ], [ %add, %for.body ] +  %add = add i32 %a.05, %m +; CHECK: tail call void @func(i32 %add) +  tail call void @func(i32 %add) +  %inc = add nsw i32 %i.06, 1 +  %exitcond = icmp eq i32 %inc, 186 +  br i1 %exitcond, label %for.end, label %for.body + +for.end:                                          ; preds = %for.body +; CHECK: for.end: +; CHECK-NOT: mul i32 %m, 186 +; CHECK:%add.lcssa = phi i32 [ %add, %for.body ] +; CHECK-NEXT: tail call void @func(i32 %add.lcssa) +  tail call void @func(i32 %add) +  ret void +} + +; CHECK: @test2 +define i32 @test2(i32 %m) nounwind uwtable { +entry: +  br label %for.body + +for.body:                                         ; preds = %for.body, %entry +  %i.06 = phi i32 [ 0, %entry ], [ %inc, %for.body ] +  %a.05 = phi i32 [ 0, %entry ], [ %add, %for.body ] +  %add = add i32 %a.05, %m +; CHECK: tail call void @func(i32 %add) +  tail call void @func(i32 %add) +  %inc = add nsw i32 %i.06, 1 +  %exitcond = icmp eq i32 %inc, 186 +  br i1 %exitcond, label %for.end, label %for.body + +for.end:                                          ; preds = %for.body +; CHECK: for.end: +; CHECK-NOT: mul i32 %m, 186 +; CHECK:%add.lcssa = phi i32 [ %add, %for.body ] +; CHECK-NEXT: ret i32 %add.lcssa +  ret i32 %add +} diff --git a/test/Transforms/IndVarSimplify/iv-zext.ll b/test/Transforms/IndVarSimplify/iv-zext.ll index 2e0f70ce461a..ed0514b08e33 100644 --- a/test/Transforms/IndVarSimplify/iv-zext.ll +++ b/test/Transforms/IndVarSimplify/iv-zext.ll @@ -2,7 +2,7 @@  ; CHECK-NOT: and  ; CHECK-NOT: zext -target datalayout = "-p:64:64:64-n32:64" +target datalayout = "p:64:64:64-n32:64"  define void @foo(double* %d, i64 %n) nounwind {  entry: diff --git a/test/Transforms/IndVarSimplify/phi-uses-value-multiple-times.ll b/test/Transforms/IndVarSimplify/phi-uses-value-multiple-times.ll index 52c9e5c3ffc9..dc36b9948254 100644 --- a/test/Transforms/IndVarSimplify/phi-uses-value-multiple-times.ll +++ b/test/Transforms/IndVarSimplify/phi-uses-value-multiple-times.ll @@ -1,3 +1,4 @@ +; REQUIRES: asserts  ; RUN: opt < %s -indvars -disable-output -stats -info-output-file - | FileCheck %s  ; Check that IndVarSimplify is not creating unnecessary canonical IVs  ; that will never be used. | 
