@@ -18,23 +18,24 @@ define i32 @foo(ptr %A, i32 %t) {
18
18
; CHECK-NEXT: entry:
19
19
; CHECK-NEXT: br label [[LOOP_32:%.*]]
20
20
; CHECK: loop.exit.loopexitsplitsplitsplit:
21
- ; CHECK-NEXT: [[TMP0:%.*]] = add i64 [[LSR_IV:%.*]], -1
21
+ ; CHECK-NEXT: [[LSR_IV:%.*]] = phi i64 [ [[LSR_IV1:%.*]], [[IFMERGE_34:%.*]] ]
22
+ ; CHECK-NEXT: [[TMP0:%.*]] = add i64 [[LSR_IV]], -1
22
23
; CHECK-NEXT: br label [[LOOP_EXIT_LOOPEXITSPLITSPLIT:%.*]]
23
24
; CHECK: ifmerge.38.loop.exit.loopexitsplitsplit_crit_edge:
24
- ; CHECK-NEXT: [[LSR_IV_LCSSA10:%.*]] = phi i64 [ [[LSR_IV ]], [[IFMERGE_38:%.*]] ]
25
+ ; CHECK-NEXT: [[LSR_IV_LCSSA10:%.*]] = phi i64 [ [[LSR_IV1 ]], [[IFMERGE_38:%.*]] ]
25
26
; CHECK-NEXT: br label [[LOOP_EXIT_LOOPEXITSPLITSPLIT]]
26
27
; CHECK: loop.exit.loopexitsplitsplit:
27
28
; CHECK-NEXT: [[INDVARS_IV_LCSSA_PH_PH_PH:%.*]] = phi i64 [ [[LSR_IV_LCSSA10]], [[IFMERGE_38_LOOP_EXIT_LOOPEXITSPLITSPLIT_CRIT_EDGE:%.*]] ], [ [[TMP0]], [[LOOP_EXIT_LOOPEXITSPLITSPLITSPLIT:%.*]] ]
28
29
; CHECK-NEXT: br label [[LOOP_EXIT_LOOPEXITSPLIT:%.*]]
29
30
; CHECK: ifmerge.42.loop.exit.loopexitsplit_crit_edge:
30
- ; CHECK-NEXT: [[LSR_IV_LCSSA11:%.*]] = phi i64 [ [[LSR_IV ]], [[IFMERGE_42:%.*]] ]
31
+ ; CHECK-NEXT: [[LSR_IV_LCSSA11:%.*]] = phi i64 [ [[LSR_IV1 ]], [[IFMERGE_42:%.*]] ]
31
32
; CHECK-NEXT: [[TMP1:%.*]] = add i64 [[LSR_IV_LCSSA11]], 1
32
33
; CHECK-NEXT: br label [[LOOP_EXIT_LOOPEXITSPLIT]]
33
34
; CHECK: loop.exit.loopexitsplit:
34
35
; CHECK-NEXT: [[INDVARS_IV_LCSSA_PH_PH:%.*]] = phi i64 [ [[TMP1]], [[IFMERGE_42_LOOP_EXIT_LOOPEXITSPLIT_CRIT_EDGE:%.*]] ], [ [[INDVARS_IV_LCSSA_PH_PH_PH]], [[LOOP_EXIT_LOOPEXITSPLITSPLIT]] ]
35
36
; CHECK-NEXT: br label [[LOOP_EXIT_LOOPEXIT:%.*]]
36
37
; CHECK: then.34.loop.exit.loopexit_crit_edge:
37
- ; CHECK-NEXT: [[LSR_IV_LCSSA:%.*]] = phi i64 [ [[LSR_IV ]], [[THEN_34:%.*]] ]
38
+ ; CHECK-NEXT: [[LSR_IV_LCSSA:%.*]] = phi i64 [ [[LSR_IV1 ]], [[THEN_34:%.*]] ]
38
39
; CHECK-NEXT: [[TMP2:%.*]] = add i64 [[LSR_IV_LCSSA]], -2
39
40
; CHECK-NEXT: br label [[LOOP_EXIT_LOOPEXIT]]
40
41
; CHECK: loop.exit.loopexit:
@@ -48,31 +49,31 @@ define i32 @foo(ptr %A, i32 %t) {
48
49
; CHECK-NEXT: [[I_0_LCSSA:%.*]] = phi i32 [ [[TMP]], [[LOOP_EXIT]] ], [ 50, [[THEN_8_1]] ], [ 50, [[IFMERGE_8:%.*]] ]
49
50
; CHECK-NEXT: ret i32 [[I_0_LCSSA]]
50
51
; CHECK: loop.32:
51
- ; CHECK-NEXT: [[LSR_IV ]] = phi i64 [ [[LSR_IV_NEXT:%.*]], [[IFMERGE_46:%.*]] ], [ 2, [[ENTRY:%.*]] ]
52
+ ; CHECK-NEXT: [[LSR_IV1 ]] = phi i64 [ [[LSR_IV_NEXT:%.*]], [[IFMERGE_46:%.*]] ], [ 2, [[ENTRY:%.*]] ]
52
53
; CHECK-NEXT: [[I1_I64_0:%.*]] = phi i64 [ 0, [[ENTRY]] ], [ [[NEXTIVLOOP_32:%.*]], [[IFMERGE_46]] ]
53
- ; CHECK-NEXT: [[TMP3:%.*]] = shl nuw nsw i64 [[LSR_IV ]], 2
54
+ ; CHECK-NEXT: [[TMP3:%.*]] = shl nuw nsw i64 [[LSR_IV1 ]], 2
54
55
; CHECK-NEXT: [[SCEVGEP7:%.*]] = getelementptr i8, ptr [[A]], i64 [[TMP3]]
55
56
; CHECK-NEXT: [[SCEVGEP8:%.*]] = getelementptr i8, ptr [[SCEVGEP7]], i64 -4
56
57
; CHECK-NEXT: [[GEPLOAD:%.*]] = load i32, ptr [[SCEVGEP8]], align 4
57
58
; CHECK-NEXT: [[CMP_34:%.*]] = icmp sgt i32 [[GEPLOAD]], [[T]]
58
- ; CHECK-NEXT: br i1 [[CMP_34]], label [[THEN_34]], label [[IFMERGE_34:%.* ]]
59
+ ; CHECK-NEXT: br i1 [[CMP_34]], label [[THEN_34]], label [[IFMERGE_34]]
59
60
; CHECK: then.34:
60
- ; CHECK-NEXT: [[TMP4:%.*]] = shl nuw nsw i64 [[LSR_IV ]], 2
61
+ ; CHECK-NEXT: [[TMP4:%.*]] = shl nuw nsw i64 [[LSR_IV1 ]], 2
61
62
; CHECK-NEXT: [[SCEVGEP5:%.*]] = getelementptr i8, ptr [[A]], i64 [[TMP4]]
62
63
; CHECK-NEXT: [[SCEVGEP6:%.*]] = getelementptr i8, ptr [[SCEVGEP5]], i64 -8
63
64
; CHECK-NEXT: [[GEPLOAD18:%.*]] = load i32, ptr [[SCEVGEP6]], align 4
64
65
; CHECK-NEXT: [[CMP_35:%.*]] = icmp slt i32 [[GEPLOAD18]], [[T]]
65
66
; CHECK-NEXT: br i1 [[CMP_35]], label [[THEN_34_LOOP_EXIT_LOOPEXIT_CRIT_EDGE]], label [[IFMERGE_34]]
66
67
; CHECK: ifmerge.34:
67
- ; CHECK-NEXT: [[TMP5:%.*]] = shl nuw nsw i64 [[LSR_IV ]], 2
68
+ ; CHECK-NEXT: [[TMP5:%.*]] = shl nuw nsw i64 [[LSR_IV1 ]], 2
68
69
; CHECK-NEXT: [[SCEVGEP4:%.*]] = getelementptr i8, ptr [[A]], i64 [[TMP5]]
69
70
; CHECK-NEXT: [[GEPLOAD20:%.*]] = load i32, ptr [[SCEVGEP4]], align 4
70
71
; CHECK-NEXT: [[CMP_38:%.*]] = icmp sgt i32 [[GEPLOAD20]], [[T]]
71
72
; CHECK-NEXT: [[CMP_39:%.*]] = icmp slt i32 [[GEPLOAD]], [[T]]
72
73
; CHECK-NEXT: [[OR_COND:%.*]] = and i1 [[CMP_38]], [[CMP_39]]
73
74
; CHECK-NEXT: br i1 [[OR_COND]], label [[LOOP_EXIT_LOOPEXITSPLITSPLITSPLIT]], label [[IFMERGE_38]]
74
75
; CHECK: ifmerge.38:
75
- ; CHECK-NEXT: [[TMP6:%.*]] = shl nuw nsw i64 [[LSR_IV ]], 2
76
+ ; CHECK-NEXT: [[TMP6:%.*]] = shl nuw nsw i64 [[LSR_IV1 ]], 2
76
77
; CHECK-NEXT: [[SCEVGEP2:%.*]] = getelementptr i8, ptr [[A]], i64 [[TMP6]]
77
78
; CHECK-NEXT: [[SCEVGEP3:%.*]] = getelementptr i8, ptr [[SCEVGEP2]], i64 4
78
79
; CHECK-NEXT: [[GEPLOAD24:%.*]] = load i32, ptr [[SCEVGEP3]], align 4
@@ -81,7 +82,7 @@ define i32 @foo(ptr %A, i32 %t) {
81
82
; CHECK-NEXT: [[OR_COND55:%.*]] = and i1 [[CMP_42]], [[CMP_43]]
82
83
; CHECK-NEXT: br i1 [[OR_COND55]], label [[IFMERGE_38_LOOP_EXIT_LOOPEXITSPLITSPLIT_CRIT_EDGE]], label [[IFMERGE_42]]
83
84
; CHECK: ifmerge.42:
84
- ; CHECK-NEXT: [[TMP7:%.*]] = shl nuw nsw i64 [[LSR_IV ]], 2
85
+ ; CHECK-NEXT: [[TMP7:%.*]] = shl nuw nsw i64 [[LSR_IV1 ]], 2
85
86
; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, ptr [[A]], i64 [[TMP7]]
86
87
; CHECK-NEXT: [[SCEVGEP1:%.*]] = getelementptr i8, ptr [[SCEVGEP]], i64 8
87
88
; CHECK-NEXT: [[GEPLOAD28:%.*]] = load i32, ptr [[SCEVGEP1]], align 4
@@ -91,7 +92,7 @@ define i32 @foo(ptr %A, i32 %t) {
91
92
; CHECK-NEXT: br i1 [[OR_COND56]], label [[IFMERGE_42_LOOP_EXIT_LOOPEXITSPLIT_CRIT_EDGE]], label [[IFMERGE_46]]
92
93
; CHECK: ifmerge.46:
93
94
; CHECK-NEXT: [[NEXTIVLOOP_32]] = add nuw nsw i64 [[I1_I64_0]], 1
94
- ; CHECK-NEXT: [[LSR_IV_NEXT]] = add nuw nsw i64 [[LSR_IV ]], 4
95
+ ; CHECK-NEXT: [[LSR_IV_NEXT]] = add nuw nsw i64 [[LSR_IV1 ]], 4
95
96
; CHECK-NEXT: [[CONDLOOP_32:%.*]] = icmp ult i64 [[NEXTIVLOOP_32]], 12
96
97
; CHECK-NEXT: br i1 [[CONDLOOP_32]], label [[LOOP_32]], label [[LOOP_25:%.*]]
97
98
; CHECK: loop.25:
0 commit comments