Changeset View
Changeset View
Standalone View
Standalone View
llvm/trunk/test/Transforms/LoopUnroll/peel-loop.ll
Show All 12 Lines | |||||
; CHECK: %[[INC1:.*]] = getelementptr inbounds i32, i32* %p, i64 1 | ; CHECK: %[[INC1:.*]] = getelementptr inbounds i32, i32* %p, i64 1 | ||||
; CHECK: store i32 1, i32* %[[INC1]], align 4 | ; CHECK: store i32 1, i32* %[[INC1]], align 4 | ||||
; CHECK: %[[CMP2:.*]] = icmp sgt i32 %k, 2 | ; CHECK: %[[CMP2:.*]] = icmp sgt i32 %k, 2 | ||||
; CHECK: br i1 %[[CMP2]], label %[[NEXT2:.*]], label %for.end | ; CHECK: br i1 %[[CMP2]], label %[[NEXT2:.*]], label %for.end | ||||
; CHECK: [[NEXT2]]: | ; CHECK: [[NEXT2]]: | ||||
; CHECK: %[[INC2:.*]] = getelementptr inbounds i32, i32* %p, i64 2 | ; CHECK: %[[INC2:.*]] = getelementptr inbounds i32, i32* %p, i64 2 | ||||
; CHECK: store i32 2, i32* %[[INC2]], align 4 | ; CHECK: store i32 2, i32* %[[INC2]], align 4 | ||||
; CHECK: %[[CMP3:.*]] = icmp eq i32 %k, 3 | ; CHECK: %[[CMP3:.*]] = icmp eq i32 %k, 3 | ||||
; CHECK: br i1 %[[CMP3]], label %for.end, label %[[LOOP:.*]] | ; CHECK: br i1 %[[CMP3]], label %for.end, label %[[LOOP_PH:.*]] | ||||
; CHECK: [[LOOP_PH]]: | |||||
; CHECK: br label %[[LOOP:.*]] | |||||
; CHECK: [[LOOP]]: | ; CHECK: [[LOOP]]: | ||||
; CHECK: %[[IV:.*]] = phi i32 [ {{.*}}, %[[LOOP]] ], [ 3, %[[NEXT2]] ] | ; CHECK: %[[IV:.*]] = phi i32 [ 3, %[[LOOP_PH]] ], [ {{.*}}, %[[LOOP]] ] | ||||
define void @basic(i32* %p, i32 %k) #0 { | define void @basic(i32* %p, i32 %k) #0 { | ||||
entry: | entry: | ||||
%cmp3 = icmp slt i32 0, %k | %cmp3 = icmp slt i32 0, %k | ||||
br i1 %cmp3, label %for.body.lr.ph, label %for.end | br i1 %cmp3, label %for.body.lr.ph, label %for.end | ||||
for.body.lr.ph: ; preds = %entry | for.body.lr.ph: ; preds = %entry | ||||
br label %for.body | br label %for.body | ||||
Show All 28 Lines | |||||
; CHECK: %[[INC1:.*]] = getelementptr inbounds i32, i32* %p, i64 1 | ; CHECK: %[[INC1:.*]] = getelementptr inbounds i32, i32* %p, i64 1 | ||||
; CHECK: store i32 1, i32* %[[INC1]], align 4 | ; CHECK: store i32 1, i32* %[[INC1]], align 4 | ||||
; CHECK: %[[CMP2:.*]] = icmp sgt i32 %k, 2 | ; CHECK: %[[CMP2:.*]] = icmp sgt i32 %k, 2 | ||||
; CHECK: br i1 %[[CMP2]], label %[[NEXT2:.*]], label %for.end | ; CHECK: br i1 %[[CMP2]], label %[[NEXT2:.*]], label %for.end | ||||
; CHECK: [[NEXT2]]: | ; CHECK: [[NEXT2]]: | ||||
; CHECK: %[[INC2:.*]] = getelementptr inbounds i32, i32* %p, i64 2 | ; CHECK: %[[INC2:.*]] = getelementptr inbounds i32, i32* %p, i64 2 | ||||
; CHECK: store i32 2, i32* %[[INC2]], align 4 | ; CHECK: store i32 2, i32* %[[INC2]], align 4 | ||||
; CHECK: %[[CMP3:.*]] = icmp eq i32 %k, 3 | ; CHECK: %[[CMP3:.*]] = icmp eq i32 %k, 3 | ||||
; CHECK: br i1 %[[CMP3]], label %for.end, label %[[LOOP:.*]] | ; CHECK: br i1 %[[CMP3]], label %for.end, label %[[LOOP_PH:.*]] | ||||
; CHECK: [[LOOP_PH]]: | |||||
; CHECK: br label %[[LOOP:.*]] | |||||
; CHECK: [[LOOP]]: | ; CHECK: [[LOOP]]: | ||||
; CHECK: %[[IV:.*]] = phi i32 [ %[[IV:.*]], %[[LOOP]] ], [ 3, %[[NEXT2]] ] | ; CHECK: %[[IV:.*]] = phi i32 [ 3, %[[LOOP_PH]] ], [ %[[IV:.*]], %[[LOOP]] ] | ||||
; CHECK: %ret = phi i32 [ 0, %entry ], [ 1, %[[NEXT0]] ], [ 2, %[[NEXT1]] ], [ 3, %[[NEXT2]] ], [ %[[IV]], %[[LOOP]] ] | ; CHECK: %ret = phi i32 [ 0, %entry ], [ 1, %[[NEXT0]] ], [ 2, %[[NEXT1]] ], [ 3, %[[NEXT2]] ], [ %[[IV]], %[[LOOP]] ] | ||||
; CHECK: ret i32 %ret | ; CHECK: ret i32 %ret | ||||
define i32 @output(i32* %p, i32 %k) #0 { | define i32 @output(i32* %p, i32 %k) #0 { | ||||
entry: | entry: | ||||
%cmp3 = icmp slt i32 0, %k | %cmp3 = icmp slt i32 0, %k | ||||
br i1 %cmp3, label %for.body.lr.ph, label %for.end | br i1 %cmp3, label %for.body.lr.ph, label %for.end | ||||
for.body.lr.ph: ; preds = %entry | for.body.lr.ph: ; preds = %entry | ||||
Show All 18 Lines |