@@ -15,21 +15,23 @@ define void @f() personality i32 (...)* @_except_handler3 {
1515; CHECK-NEXT:  entry: 
1616; CHECK-NEXT:    br label [[THROW:%.*]] 
1717; CHECK:       throw: 
18+ ; CHECK-NEXT:    [[TMP96:%.*]] = getelementptr inbounds i8, i8* undef, i32 1 
1819; CHECK-NEXT:    invoke void @reserve() 
1920; CHECK-NEXT:    to label [[THROW]] unwind label [[PAD:%.*]] 
2021; CHECK:       pad: 
22+ ; CHECK-NEXT:    [[PHI2:%.*]] = phi i8* [ [[TMP96]], [[THROW]] ] 
2123; CHECK-NEXT:    [[CS:%.*]] = catchswitch within none [label %unreachable] unwind label [[BLAH2:%.*]] 
2224; CHECK:       unreachable: 
2325; CHECK-NEXT:    [[TMP0:%.*]] = catchpad within [[CS]] [] 
2426; CHECK-NEXT:    unreachable 
2527; CHECK:       blah2: 
2628; CHECK-NEXT:    [[CLEANUPPADI4_I_I_I:%.*]] = cleanuppad within none [] 
29+ ; CHECK-NEXT:    [[SCEVGEP:%.*]] = getelementptr i8, i8* [[PHI2]], i32 -1 
2730; CHECK-NEXT:    br label [[LOOP_BODY:%.*]] 
2831; CHECK:       loop_body: 
29- ; CHECK-NEXT:    [[LSR_IV:%.*]] = phi i32 [ [[LSR_IV_NEXT:%.*]], [[ITER:%.*]] ], [ 0, [[BLAH2]] ] 
30- ; CHECK-NEXT:    [[LSR_IV_NEXT]] = add nuw nsw i32 [[LSR_IV]], -1 
31- ; CHECK-NEXT:    [[LSR_IV_NEXT1:%.*]] = inttoptr i32 [[LSR_IV_NEXT]] to i8* 
32- ; CHECK-NEXT:    [[TMP100:%.*]] = icmp eq i8* [[LSR_IV_NEXT1]], null 
32+ ; CHECK-NEXT:    [[LSR_IV:%.*]] = phi i8* [ [[SCEVGEP1:%.*]], [[ITER:%.*]] ], [ [[SCEVGEP]], [[BLAH2]] ] 
33+ ; CHECK-NEXT:    [[SCEVGEP1]] = getelementptr i8, i8* [[LSR_IV]], i32 1 
34+ ; CHECK-NEXT:    [[TMP100:%.*]] = icmp eq i8* [[SCEVGEP1]], undef 
3335; CHECK-NEXT:    br i1 [[TMP100]], label [[UNWIND_OUT:%.*]], label [[ITER]] 
3436; CHECK:       iter: 
3537; CHECK-NEXT:    br i1 true, label [[UNWIND_OUT]], label [[LOOP_BODY]] 
@@ -74,25 +76,27 @@ define void @g() personality i32 (...)* @_except_handler3 {
7476; CHECK-NEXT:  entry: 
7577; CHECK-NEXT:    br label [[THROW:%.*]] 
7678; CHECK:       throw: 
79+ ; CHECK-NEXT:    [[TMP96:%.*]] = getelementptr inbounds i8, i8* undef, i32 1 
7780; CHECK-NEXT:    invoke void @reserve() 
7881; CHECK-NEXT:    to label [[THROW]] unwind label [[PAD:%.*]] 
7982; CHECK:       pad: 
83+ ; CHECK-NEXT:    [[PHI2:%.*]] = phi i8* [ [[TMP96]], [[THROW]] ] 
8084; CHECK-NEXT:    [[CS:%.*]] = catchswitch within none [label [[UNREACHABLE:%.*]], label %blah] unwind to caller 
8185; CHECK:       unreachable: 
8286; CHECK-NEXT:    [[TMP0:%.*]] = catchpad within [[CS]] [] 
8387; CHECK-NEXT:    unreachable 
8488; CHECK:       blah: 
8589; CHECK-NEXT:    [[CATCHPAD:%.*]] = catchpad within [[CS]] [] 
90+ ; CHECK-NEXT:    [[SCEVGEP:%.*]] = getelementptr i8, i8* [[PHI2]], i32 -1 
8691; CHECK-NEXT:    br label [[LOOP_BODY:%.*]] 
8792; CHECK:       unwind_out: 
8893; CHECK-NEXT:    catchret from [[CATCHPAD]] to label [[LEAVE:%.*]] 
8994; CHECK:       leave: 
9095; CHECK-NEXT:    ret void 
9196; CHECK:       loop_body: 
92- ; CHECK-NEXT:    [[LSR_IV:%.*]] = phi i32 [ [[LSR_IV_NEXT:%.*]], [[ITER:%.*]] ], [ 0, [[BLAH:%.*]] ] 
93- ; CHECK-NEXT:    [[LSR_IV_NEXT]] = add nuw nsw i32 [[LSR_IV]], -1 
94- ; CHECK-NEXT:    [[LSR_IV_NEXT1:%.*]] = inttoptr i32 [[LSR_IV_NEXT]] to i8* 
95- ; CHECK-NEXT:    [[TMP100:%.*]] = icmp eq i8* [[LSR_IV_NEXT1]], null 
97+ ; CHECK-NEXT:    [[LSR_IV:%.*]] = phi i8* [ [[SCEVGEP1:%.*]], [[ITER:%.*]] ], [ [[SCEVGEP]], [[BLAH:%.*]] ] 
98+ ; CHECK-NEXT:    [[SCEVGEP1]] = getelementptr i8, i8* [[LSR_IV]], i32 1 
99+ ; CHECK-NEXT:    [[TMP100:%.*]] = icmp eq i8* [[SCEVGEP1]], undef 
96100; CHECK-NEXT:    br i1 [[TMP100]], label [[UNWIND_OUT:%.*]], label [[ITER]] 
97101; CHECK:       iter: 
98102; CHECK-NEXT:    br i1 true, label [[UNWIND_OUT]], label [[LOOP_BODY]] 
@@ -138,6 +142,7 @@ define void @h() personality i32 (...)* @_except_handler3 {
138142; CHECK-NEXT:  entry: 
139143; CHECK-NEXT:    br label [[THROW:%.*]] 
140144; CHECK:       throw: 
145+ ; CHECK-NEXT:    [[TMP96:%.*]] = getelementptr inbounds i8, i8* undef, i32 1 
141146; CHECK-NEXT:    invoke void @reserve() 
142147; CHECK-NEXT:    to label [[THROW]] unwind label [[PAD:%.*]] 
143148; CHECK:       pad: 
@@ -146,17 +151,18 @@ define void @h() personality i32 (...)* @_except_handler3 {
146151; CHECK-NEXT:    [[TMP0:%.*]] = catchpad within [[CS]] [] 
147152; CHECK-NEXT:    unreachable 
148153; CHECK:       blug: 
154+ ; CHECK-NEXT:    [[PHI2:%.*]] = phi i8* [ [[TMP96]], [[PAD]] ] 
149155; CHECK-NEXT:    [[CATCHPAD:%.*]] = catchpad within [[CS]] [] 
156+ ; CHECK-NEXT:    [[SCEVGEP:%.*]] = getelementptr i8, i8* [[PHI2]], i32 -1 
150157; CHECK-NEXT:    br label [[LOOP_BODY:%.*]] 
151158; CHECK:       unwind_out: 
152159; CHECK-NEXT:    catchret from [[CATCHPAD]] to label [[LEAVE:%.*]] 
153160; CHECK:       leave: 
154161; CHECK-NEXT:    ret void 
155162; CHECK:       loop_body: 
156- ; CHECK-NEXT:    [[LSR_IV:%.*]] = phi i32 [ [[LSR_IV_NEXT:%.*]], [[ITER:%.*]] ], [ 0, [[BLUG:%.*]] ] 
157- ; CHECK-NEXT:    [[LSR_IV_NEXT]] = add nuw nsw i32 [[LSR_IV]], -1 
158- ; CHECK-NEXT:    [[LSR_IV_NEXT1:%.*]] = inttoptr i32 [[LSR_IV_NEXT]] to i8* 
159- ; CHECK-NEXT:    [[TMP100:%.*]] = icmp eq i8* [[LSR_IV_NEXT1]], null 
163+ ; CHECK-NEXT:    [[LSR_IV:%.*]] = phi i8* [ [[SCEVGEP1:%.*]], [[ITER:%.*]] ], [ [[SCEVGEP]], [[BLUG:%.*]] ] 
164+ ; CHECK-NEXT:    [[SCEVGEP1]] = getelementptr i8, i8* [[LSR_IV]], i32 1 
165+ ; CHECK-NEXT:    [[TMP100:%.*]] = icmp eq i8* [[SCEVGEP1]], undef 
160166; CHECK-NEXT:    br i1 [[TMP100]], label [[UNWIND_OUT:%.*]], label [[ITER]] 
161167; CHECK:       iter: 
162168; CHECK-NEXT:    br i1 true, label [[UNWIND_OUT]], label [[LOOP_BODY]] 
@@ -202,9 +208,11 @@ define void @i() personality i32 (...)* @_except_handler3 {
202208; CHECK-NEXT:  entry: 
203209; CHECK-NEXT:    br label [[THROW:%.*]] 
204210; CHECK:       throw: 
211+ ; CHECK-NEXT:    [[TMP96:%.*]] = getelementptr inbounds i8, i8* undef, i32 1 
205212; CHECK-NEXT:    invoke void @reserve() 
206213; CHECK-NEXT:    to label [[THROW]] unwind label [[CATCHPAD:%.*]] 
207214; CHECK:       catchpad: 
215+ ; CHECK-NEXT:    [[PHI2:%.*]] = phi i8* [ [[TMP96]], [[THROW]] ] 
208216; CHECK-NEXT:    [[CS:%.*]] = catchswitch within none [label %cp_body] unwind label [[CLEANUPPAD:%.*]] 
209217; CHECK:       cp_body: 
210218; CHECK-NEXT:    [[TMP0:%.*]] = catchpad within [[CS]] [] 
@@ -213,12 +221,12 @@ define void @i() personality i32 (...)* @_except_handler3 {
213221; CHECK-NEXT:    [[TMP1:%.*]] = cleanuppad within none [] 
214222; CHECK-NEXT:    br label [[LOOP_HEAD]] 
215223; CHECK:       loop_head: 
224+ ; CHECK-NEXT:    [[SCEVGEP:%.*]] = getelementptr i8, i8* [[PHI2]], i32 -1 
216225; CHECK-NEXT:    br label [[LOOP_BODY:%.*]] 
217226; CHECK:       loop_body: 
218- ; CHECK-NEXT:    [[LSR_IV:%.*]] = phi i32 [ [[LSR_IV_NEXT:%.*]], [[ITER:%.*]] ], [ 0, [[LOOP_HEAD]] ] 
219- ; CHECK-NEXT:    [[LSR_IV_NEXT]] = add nuw nsw i32 [[LSR_IV]], -1 
220- ; CHECK-NEXT:    [[LSR_IV_NEXT1:%.*]] = inttoptr i32 [[LSR_IV_NEXT]] to i8* 
221- ; CHECK-NEXT:    [[TMP100:%.*]] = icmp eq i8* [[LSR_IV_NEXT1]], null 
227+ ; CHECK-NEXT:    [[LSR_IV:%.*]] = phi i8* [ [[SCEVGEP1:%.*]], [[ITER:%.*]] ], [ [[SCEVGEP]], [[LOOP_HEAD]] ] 
228+ ; CHECK-NEXT:    [[SCEVGEP1]] = getelementptr i8, i8* [[LSR_IV]], i32 1 
229+ ; CHECK-NEXT:    [[TMP100:%.*]] = icmp eq i8* [[SCEVGEP1]], undef 
222230; CHECK-NEXT:    br i1 [[TMP100]], label [[UNWIND_OUT:%.*]], label [[ITER]] 
223231; CHECK:       iter: 
224232; CHECK-NEXT:    br i1 true, label [[UNWIND_OUT]], label [[LOOP_BODY]] 
0 commit comments