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