@@ -15,23 +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: [[SCEVGEP:%.*]] = getelementptr i8, i8* [[PHI2]], i32 -1
30
27
; CHECK-NEXT: br label [[LOOP_BODY:%.*]]
31
28
; CHECK: loop_body:
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
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
35
33
; CHECK-NEXT: br i1 [[TMP100]], label [[UNWIND_OUT:%.*]], label [[ITER]]
36
34
; CHECK: iter:
37
35
; CHECK-NEXT: br i1 true, label [[UNWIND_OUT]], label [[LOOP_BODY]]
@@ -76,27 +74,25 @@ define void @g() personality i32 (...)* @_except_handler3 {
76
74
; CHECK-NEXT: entry:
77
75
; CHECK-NEXT: br label [[THROW:%.*]]
78
76
; CHECK: throw:
79
- ; CHECK-NEXT: [[TMP96:%.*]] = getelementptr inbounds i8, i8* undef, i32 1
80
77
; CHECK-NEXT: invoke void @reserve()
81
78
; CHECK-NEXT: to label [[THROW]] unwind label [[PAD:%.*]]
82
79
; CHECK: pad:
83
- ; CHECK-NEXT: [[PHI2:%.*]] = phi i8* [ [[TMP96]], [[THROW]] ]
84
80
; CHECK-NEXT: [[CS:%.*]] = catchswitch within none [label [[UNREACHABLE:%.*]], label %blah] unwind to caller
85
81
; CHECK: unreachable:
86
82
; CHECK-NEXT: [[TMP0:%.*]] = catchpad within [[CS]] []
87
83
; CHECK-NEXT: unreachable
88
84
; CHECK: blah:
89
85
; CHECK-NEXT: [[CATCHPAD:%.*]] = catchpad within [[CS]] []
90
- ; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, i8* [[PHI2]], i32 -1
91
86
; CHECK-NEXT: br label [[LOOP_BODY:%.*]]
92
87
; CHECK: unwind_out:
93
88
; CHECK-NEXT: catchret from [[CATCHPAD]] to label [[LEAVE:%.*]]
94
89
; CHECK: leave:
95
90
; CHECK-NEXT: ret void
96
91
; CHECK: loop_body:
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
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
100
96
; CHECK-NEXT: br i1 [[TMP100]], label [[UNWIND_OUT:%.*]], label [[ITER]]
101
97
; CHECK: iter:
102
98
; CHECK-NEXT: br i1 true, label [[UNWIND_OUT]], label [[LOOP_BODY]]
@@ -142,7 +138,6 @@ define void @h() personality i32 (...)* @_except_handler3 {
142
138
; CHECK-NEXT: entry:
143
139
; CHECK-NEXT: br label [[THROW:%.*]]
144
140
; CHECK: throw:
145
- ; CHECK-NEXT: [[TMP96:%.*]] = getelementptr inbounds i8, i8* undef, i32 1
146
141
; CHECK-NEXT: invoke void @reserve()
147
142
; CHECK-NEXT: to label [[THROW]] unwind label [[PAD:%.*]]
148
143
; CHECK: pad:
@@ -151,18 +146,17 @@ define void @h() personality i32 (...)* @_except_handler3 {
151
146
; CHECK-NEXT: [[TMP0:%.*]] = catchpad within [[CS]] []
152
147
; CHECK-NEXT: unreachable
153
148
; CHECK: blug:
154
- ; CHECK-NEXT: [[PHI2:%.*]] = phi i8* [ [[TMP96]], [[PAD]] ]
155
149
; CHECK-NEXT: [[CATCHPAD:%.*]] = catchpad within [[CS]] []
156
- ; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, i8* [[PHI2]], i32 -1
157
150
; CHECK-NEXT: br label [[LOOP_BODY:%.*]]
158
151
; CHECK: unwind_out:
159
152
; CHECK-NEXT: catchret from [[CATCHPAD]] to label [[LEAVE:%.*]]
160
153
; CHECK: leave:
161
154
; CHECK-NEXT: ret void
162
155
; CHECK: loop_body:
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
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
166
160
; CHECK-NEXT: br i1 [[TMP100]], label [[UNWIND_OUT:%.*]], label [[ITER]]
167
161
; CHECK: iter:
168
162
; CHECK-NEXT: br i1 true, label [[UNWIND_OUT]], label [[LOOP_BODY]]
@@ -208,11 +202,9 @@ define void @i() personality i32 (...)* @_except_handler3 {
208
202
; CHECK-NEXT: entry:
209
203
; CHECK-NEXT: br label [[THROW:%.*]]
210
204
; CHECK: throw:
211
- ; CHECK-NEXT: [[TMP96:%.*]] = getelementptr inbounds i8, i8* undef, i32 1
212
205
; CHECK-NEXT: invoke void @reserve()
213
206
; CHECK-NEXT: to label [[THROW]] unwind label [[CATCHPAD:%.*]]
214
207
; CHECK: catchpad:
215
- ; CHECK-NEXT: [[PHI2:%.*]] = phi i8* [ [[TMP96]], [[THROW]] ]
216
208
; CHECK-NEXT: [[CS:%.*]] = catchswitch within none [label %cp_body] unwind label [[CLEANUPPAD:%.*]]
217
209
; CHECK: cp_body:
218
210
; CHECK-NEXT: [[TMP0:%.*]] = catchpad within [[CS]] []
@@ -221,12 +213,12 @@ define void @i() personality i32 (...)* @_except_handler3 {
221
213
; CHECK-NEXT: [[TMP1:%.*]] = cleanuppad within none []
222
214
; CHECK-NEXT: br label [[LOOP_HEAD]]
223
215
; CHECK: loop_head:
224
- ; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, i8* [[PHI2]], i32 -1
225
216
; CHECK-NEXT: br label [[LOOP_BODY:%.*]]
226
217
; CHECK: loop_body:
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
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
230
222
; CHECK-NEXT: br i1 [[TMP100]], label [[UNWIND_OUT:%.*]], label [[ITER]]
231
223
; CHECK: iter:
232
224
; CHECK-NEXT: br i1 true, label [[UNWIND_OUT]], label [[LOOP_BODY]]
0 commit comments