@@ -15,25 +15,21 @@ define void @f() personality i32 (...)* @_except_handler3 {
15
15
; CHECK-NEXT: entry:
16
16
; CHECK-NEXT: br label [[THROW:%.*]]
17
17
; CHECK: throw:
18
- ; CHECK-NEXT: [[TMP96:%.*]] = getelementptr inbounds i8, i8* undef, i32 1
19
18
; CHECK-NEXT: invoke void @reserve()
20
19
; CHECK-NEXT: to label [[THROW]] unwind label [[PAD:%.*]]
21
20
; CHECK: pad:
22
- ; CHECK-NEXT: [[PHI2:%.*]] = phi i8* [ [[TMP96]], [[THROW]] ]
23
21
; CHECK-NEXT: [[CS:%.*]] = catchswitch within none [label %unreachable] unwind label [[BLAH2:%.*]]
24
22
; CHECK: unreachable:
25
23
; CHECK-NEXT: [[TMP0:%.*]] = catchpad within [[CS]] []
26
24
; CHECK-NEXT: unreachable
27
25
; CHECK: blah2:
28
26
; CHECK-NEXT: [[CLEANUPPADI4_I_I_I:%.*]] = cleanuppad within none []
29
- ; CHECK-NEXT: [[PHI21:%.*]] = ptrtoint i8* [[PHI2]] to i32
30
- ; CHECK-NEXT: [[TMP1:%.*]] = sub i32 1, [[PHI21]]
31
- ; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, i8* undef, i32 [[TMP1]]
32
27
; CHECK-NEXT: br label [[LOOP_BODY:%.*]]
33
28
; CHECK: loop_body:
34
- ; CHECK-NEXT: [[LSR_IV:%.*]] = phi i8* [ [[SCEVGEP2:%.*]], [[ITER:%.*]] ], [ [[SCEVGEP]], [[BLAH2]] ]
35
- ; CHECK-NEXT: [[SCEVGEP2]] = getelementptr i8, i8* [[LSR_IV]], i32 -1
36
- ; CHECK-NEXT: [[TMP100:%.*]] = icmp eq i8* [[SCEVGEP2]], null
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
37
33
; CHECK-NEXT: br i1 [[TMP100]], label [[UNWIND_OUT:%.*]], label [[ITER]]
38
34
; CHECK: iter:
39
35
; CHECK-NEXT: br i1 true, label [[UNWIND_OUT]], label [[LOOP_BODY]]
@@ -78,29 +74,25 @@ define void @g() personality i32 (...)* @_except_handler3 {
78
74
; CHECK-NEXT: entry:
79
75
; CHECK-NEXT: br label [[THROW:%.*]]
80
76
; CHECK: throw:
81
- ; CHECK-NEXT: [[TMP96:%.*]] = getelementptr inbounds i8, i8* undef, i32 1
82
77
; CHECK-NEXT: invoke void @reserve()
83
78
; CHECK-NEXT: to label [[THROW]] unwind label [[PAD:%.*]]
84
79
; CHECK: pad:
85
- ; CHECK-NEXT: [[PHI2:%.*]] = phi i8* [ [[TMP96]], [[THROW]] ]
86
80
; CHECK-NEXT: [[CS:%.*]] = catchswitch within none [label [[UNREACHABLE:%.*]], label %blah] unwind to caller
87
81
; CHECK: unreachable:
88
82
; CHECK-NEXT: [[TMP0:%.*]] = catchpad within [[CS]] []
89
83
; CHECK-NEXT: unreachable
90
84
; CHECK: blah:
91
85
; CHECK-NEXT: [[CATCHPAD:%.*]] = catchpad within [[CS]] []
92
- ; CHECK-NEXT: [[PHI21:%.*]] = ptrtoint i8* [[PHI2]] to i32
93
- ; CHECK-NEXT: [[TMP1:%.*]] = sub i32 1, [[PHI21]]
94
- ; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, i8* undef, i32 [[TMP1]]
95
86
; CHECK-NEXT: br label [[LOOP_BODY:%.*]]
96
87
; CHECK: unwind_out:
97
88
; CHECK-NEXT: catchret from [[CATCHPAD]] to label [[LEAVE:%.*]]
98
89
; CHECK: leave:
99
90
; CHECK-NEXT: ret void
100
91
; CHECK: loop_body:
101
- ; CHECK-NEXT: [[LSR_IV:%.*]] = phi i8* [ [[SCEVGEP2:%.*]], [[ITER:%.*]] ], [ [[SCEVGEP]], [[BLAH:%.*]] ]
102
- ; CHECK-NEXT: [[SCEVGEP2]] = getelementptr i8, i8* [[LSR_IV]], i32 -1
103
- ; CHECK-NEXT: [[TMP100:%.*]] = icmp eq i8* [[SCEVGEP2]], null
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
104
96
; CHECK-NEXT: br i1 [[TMP100]], label [[UNWIND_OUT:%.*]], label [[ITER]]
105
97
; CHECK: iter:
106
98
; CHECK-NEXT: br i1 true, label [[UNWIND_OUT]], label [[LOOP_BODY]]
@@ -146,7 +138,6 @@ define void @h() personality i32 (...)* @_except_handler3 {
146
138
; CHECK-NEXT: entry:
147
139
; CHECK-NEXT: br label [[THROW:%.*]]
148
140
; CHECK: throw:
149
- ; CHECK-NEXT: [[TMP96:%.*]] = getelementptr inbounds i8, i8* undef, i32 1
150
141
; CHECK-NEXT: invoke void @reserve()
151
142
; CHECK-NEXT: to label [[THROW]] unwind label [[PAD:%.*]]
152
143
; CHECK: pad:
@@ -155,20 +146,17 @@ define void @h() personality i32 (...)* @_except_handler3 {
155
146
; CHECK-NEXT: [[TMP0:%.*]] = catchpad within [[CS]] []
156
147
; CHECK-NEXT: unreachable
157
148
; CHECK: blug:
158
- ; CHECK-NEXT: [[PHI2:%.*]] = phi i8* [ [[TMP96]], [[PAD]] ]
159
149
; CHECK-NEXT: [[CATCHPAD:%.*]] = catchpad within [[CS]] []
160
- ; CHECK-NEXT: [[PHI21:%.*]] = ptrtoint i8* [[PHI2]] to i32
161
- ; CHECK-NEXT: [[TMP1:%.*]] = sub i32 1, [[PHI21]]
162
- ; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, i8* undef, i32 [[TMP1]]
163
150
; CHECK-NEXT: br label [[LOOP_BODY:%.*]]
164
151
; CHECK: unwind_out:
165
152
; CHECK-NEXT: catchret from [[CATCHPAD]] to label [[LEAVE:%.*]]
166
153
; CHECK: leave:
167
154
; CHECK-NEXT: ret void
168
155
; CHECK: loop_body:
169
- ; CHECK-NEXT: [[LSR_IV:%.*]] = phi i8* [ [[SCEVGEP2:%.*]], [[ITER:%.*]] ], [ [[SCEVGEP]], [[BLUG:%.*]] ]
170
- ; CHECK-NEXT: [[SCEVGEP2]] = getelementptr i8, i8* [[LSR_IV]], i32 -1
171
- ; CHECK-NEXT: [[TMP100:%.*]] = icmp eq i8* [[SCEVGEP2]], null
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
172
160
; CHECK-NEXT: br i1 [[TMP100]], label [[UNWIND_OUT:%.*]], label [[ITER]]
173
161
; CHECK: iter:
174
162
; CHECK-NEXT: br i1 true, label [[UNWIND_OUT]], label [[LOOP_BODY]]
@@ -214,11 +202,9 @@ define void @i() personality i32 (...)* @_except_handler3 {
214
202
; CHECK-NEXT: entry:
215
203
; CHECK-NEXT: br label [[THROW:%.*]]
216
204
; CHECK: throw:
217
- ; CHECK-NEXT: [[TMP96:%.*]] = getelementptr inbounds i8, i8* undef, i32 1
218
205
; CHECK-NEXT: invoke void @reserve()
219
206
; CHECK-NEXT: to label [[THROW]] unwind label [[CATCHPAD:%.*]]
220
207
; CHECK: catchpad:
221
- ; CHECK-NEXT: [[PHI2:%.*]] = phi i8* [ [[TMP96]], [[THROW]] ]
222
208
; CHECK-NEXT: [[CS:%.*]] = catchswitch within none [label %cp_body] unwind label [[CLEANUPPAD:%.*]]
223
209
; CHECK: cp_body:
224
210
; CHECK-NEXT: [[TMP0:%.*]] = catchpad within [[CS]] []
@@ -227,14 +213,12 @@ define void @i() personality i32 (...)* @_except_handler3 {
227
213
; CHECK-NEXT: [[TMP1:%.*]] = cleanuppad within none []
228
214
; CHECK-NEXT: br label [[LOOP_HEAD]]
229
215
; CHECK: loop_head:
230
- ; CHECK-NEXT: [[PHI21:%.*]] = ptrtoint i8* [[PHI2]] to i32
231
- ; CHECK-NEXT: [[TMP2:%.*]] = sub i32 1, [[PHI21]]
232
- ; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, i8* undef, i32 [[TMP2]]
233
216
; CHECK-NEXT: br label [[LOOP_BODY:%.*]]
234
217
; CHECK: loop_body:
235
- ; CHECK-NEXT: [[LSR_IV:%.*]] = phi i8* [ [[SCEVGEP2:%.*]], [[ITER:%.*]] ], [ [[SCEVGEP]], [[LOOP_HEAD]] ]
236
- ; CHECK-NEXT: [[SCEVGEP2]] = getelementptr i8, i8* [[LSR_IV]], i32 -1
237
- ; CHECK-NEXT: [[TMP100:%.*]] = icmp eq i8* [[SCEVGEP2]], null
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
238
222
; CHECK-NEXT: br i1 [[TMP100]], label [[UNWIND_OUT:%.*]], label [[ITER]]
239
223
; CHECK: iter:
240
224
; CHECK-NEXT: br i1 true, label [[UNWIND_OUT]], label [[LOOP_BODY]]
0 commit comments