Home | History | Annotate | Download | only in LoopRotate
      1 ; RUN: opt -S -loop-rotate %s | FileCheck %s
      2 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"
      3 target triple = "x86_64-apple-darwin10.0.0"
      4 
      5 ; PR5319 - The "arrayidx" gep should be hoisted, not duplicated.  We should
      6 ; end up with one phi node.
      7 define void @test1() nounwind ssp {
      8 ; CHECK: @test1
      9 entry:
     10   %array = alloca [20 x i32], align 16
     11   br label %for.cond
     12 
     13 for.cond:                                         ; preds = %for.body, %entry
     14   %i.0 = phi i32 [ 0, %entry ], [ %inc, %for.body ]
     15   %cmp = icmp slt i32 %i.0, 100
     16   %arrayidx = getelementptr inbounds [20 x i32]* %array, i64 0, i64 0
     17   br i1 %cmp, label %for.body, label %for.end
     18 
     19 ; CHECK: for.body:
     20 ; CHECK-NEXT: phi i32 [ 0
     21 ; CHECK-NEXT: store i32 0
     22 
     23 for.body:                                         ; preds = %for.cond
     24   store i32 0, i32* %arrayidx, align 16
     25   %inc = add nsw i32 %i.0, 1
     26   br label %for.cond
     27 
     28 for.end:                                          ; preds = %for.cond
     29   %arrayidx.lcssa = phi i32* [ %arrayidx, %for.cond ]
     30   call void @g(i32* %arrayidx.lcssa) nounwind
     31   ret void
     32 }
     33 
     34 declare void @g(i32*)
     35 
     36