@@ -27,8 +27,11 @@ struct S {
27
27
// CHECK-O0-NEXT: [[AGG_TEMP33:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8
28
28
// CHECK-O0-NEXT: [[I:%.*]] = alloca i32, align 4
29
29
// CHECK-O0-NEXT: [[AGG_TEMP42:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8
30
+ // CHECK-O0-NEXT: [[AGG_TEMP43:%.*]] = alloca [[STRUCT_S]], align 8
30
31
// CHECK-O0-NEXT: [[AGG_TEMP56:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8
32
+ // CHECK-O0-NEXT: [[AGG_TEMP57:%.*]] = alloca [[STRUCT_S]], align 8
31
33
// CHECK-O0-NEXT: [[AGG_TEMP73:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8
34
+ // CHECK-O0-NEXT: [[AGG_TEMP74:%.*]] = alloca [[STRUCT_S]], align 8
32
35
// CHECK-O0-NEXT: [[ARRAYDECAY:%.*]] = getelementptr inbounds [10 x i32], ptr [[ARR]], i64 0, i64 0
33
36
// CHECK-O0-NEXT: [[UPPER:%.*]] = getelementptr inbounds i32, ptr [[ARRAYDECAY]], i64 10
34
37
// CHECK-O0-NEXT: [[TMP0:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[TMP]], i32 0, i32 0
@@ -146,9 +149,10 @@ struct S {
146
149
// CHECK-O0-NEXT: br i1 [[CMP]], label [[FOR_BODY:%.*]], label [[FOR_END:%.*]]
147
150
// CHECK-O0: for.body:
148
151
// CHECK-O0-NEXT: [[TMP24:%.*]] = load i32, ptr [[I]], align 4
149
- // CHECK-O0-NEXT: [[L44:%.*]] = getelementptr inbounds nuw [[STRUCT_S]], ptr [[S]], i32 0, i32 2
152
+ // CHECK-O0-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP43]], ptr align 8 [[S]], i64 24, i1 false)
153
+ // CHECK-O0-NEXT: [[L44:%.*]] = getelementptr inbounds nuw [[STRUCT_S]], ptr [[AGG_TEMP43]], i32 0, i32 2
150
154
// CHECK-O0-NEXT: [[TMP25:%.*]] = load i32, ptr [[L44]], align 8
151
- // CHECK-O0-NEXT: [[BP45:%.*]] = getelementptr inbounds nuw [[STRUCT_S]], ptr [[S ]], i32 0, i32 0
155
+ // CHECK-O0-NEXT: [[BP45:%.*]] = getelementptr inbounds nuw [[STRUCT_S]], ptr [[AGG_TEMP43 ]], i32 0, i32 0
152
156
// CHECK-O0-NEXT: [[TMP26:%.*]] = load ptr, ptr [[BP45]], align 8
153
157
// CHECK-O0-NEXT: [[IDX_EXT:%.*]] = sext i32 [[TMP25]] to i64
154
158
// CHECK-O0-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds i32, ptr [[TMP26]], i64 [[IDX_EXT]]
@@ -168,17 +172,17 @@ struct S {
168
172
// CHECK-O0-NEXT: [[WIDE_PTR_LB_ADDR50:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP42]], i32 0, i32 2
169
173
// CHECK-O0-NEXT: [[WIDE_PTR_LB51:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR50]], align 8
170
174
// CHECK-O0-NEXT: [[TMP31:%.*]] = icmp ult ptr [[ARRAYIDX]], [[WIDE_PTR_UB49]], {{!annotation ![0-9]+}}
171
- // CHECK-O0-NEXT: br i1 [[TMP31]], label % [[CONT53:.*]], label % [[TRAP52:.*]], {{!prof ![0-9]+}} , {{!annotation ![0-9]+}}
172
- // CHECK-O0: [[TRAP52]] :
175
+ // CHECK-O0-NEXT: br i1 [[TMP31]], label [[CONT53:% .*]], label [[TRAP52:% .*]], {{!annotation ![0-9]+}}
176
+ // CHECK-O0: trap52 :
173
177
// CHECK-O0-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], {{!annotation ![0-9]+}}
174
178
// CHECK-O0-NEXT: unreachable, {{!annotation ![0-9]+}}
175
- // CHECK-O0: [[CONT53]] :
179
+ // CHECK-O0: cont53 :
176
180
// CHECK-O0-NEXT: [[TMP32:%.*]] = icmp uge ptr [[ARRAYIDX]], [[WIDE_PTR_LB51]], {{!annotation ![0-9]+}}
177
- // CHECK-O0-NEXT: br i1 [[TMP32]], label % [[CONT55:.*]], label % [[TRAP54:.*]], {{!prof ![0-9]+}} , {{!annotation ![0-9]+}}
178
- // CHECK-O0: [[TRAP54]] :
181
+ // CHECK-O0-NEXT: br i1 [[TMP32]], label [[CONT55:% .*]], label [[TRAP54:% .*]], {{!annotation ![0-9]+}}
182
+ // CHECK-O0: trap54 :
179
183
// CHECK-O0-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], {{!annotation ![0-9]+}}
180
184
// CHECK-O0-NEXT: unreachable, {{!annotation ![0-9]+}}
181
- // CHECK-O0: [[CONT55]] :
185
+ // CHECK-O0: cont55 :
182
186
// CHECK-O0-NEXT: store i32 [[TMP24]], ptr [[ARRAYIDX]], align 4
183
187
// CHECK-O0-NEXT: br label [[FOR_INC:%.*]]
184
188
// CHECK-O0: for.inc:
@@ -187,9 +191,10 @@ struct S {
187
191
// CHECK-O0-NEXT: store i32 [[INC]], ptr [[I]], align 4
188
192
// CHECK-O0-NEXT: br label [[FOR_COND]], !llvm.loop [[LOOP5:![0-9]+]]
189
193
// CHECK-O0: for.end:
190
- // CHECK-O0-NEXT: [[L58:%.*]] = getelementptr inbounds nuw [[STRUCT_S]], ptr [[S]], i32 0, i32 2
194
+ // CHECK-O0-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP57]], ptr align 8 [[S]], i64 24, i1 false)
195
+ // CHECK-O0-NEXT: [[L58:%.*]] = getelementptr inbounds nuw [[STRUCT_S]], ptr [[AGG_TEMP57]], i32 0, i32 2
191
196
// CHECK-O0-NEXT: [[TMP34:%.*]] = load i32, ptr [[L58]], align 8
192
- // CHECK-O0-NEXT: [[BP259:%.*]] = getelementptr inbounds nuw [[STRUCT_S]], ptr [[S ]], i32 0, i32 1
197
+ // CHECK-O0-NEXT: [[BP259:%.*]] = getelementptr inbounds nuw [[STRUCT_S]], ptr [[AGG_TEMP57 ]], i32 0, i32 1
193
198
// CHECK-O0-NEXT: [[TMP35:%.*]] = load ptr, ptr [[BP259]], align 8
194
199
// CHECK-O0-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP34]], 1
195
200
// CHECK-O0-NEXT: [[IDX_EXT60:%.*]] = sext i32 [[ADD]] to i64
@@ -208,21 +213,22 @@ struct S {
208
213
// CHECK-O0-NEXT: [[WIDE_PTR_LB_ADDR67:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP56]], i32 0, i32 2
209
214
// CHECK-O0-NEXT: [[WIDE_PTR_LB68:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR67]], align 8
210
215
// CHECK-O0-NEXT: [[TMP39:%.*]] = icmp ult ptr [[ARRAYIDX64]], [[WIDE_PTR_UB66]], {{!annotation ![0-9]+}}
211
- // CHECK-O0-NEXT: br i1 [[TMP39]], label % [[CONT70:.*]], label % [[TRAP69:.*]], {{!prof ![0-9]+}} , {{!annotation ![0-9]+}}
212
- // CHECK-O0: [[TRAP69]] :
216
+ // CHECK-O0-NEXT: br i1 [[TMP39]], label [[CONT70:% .*]], label [[TRAP69:% .*]], {{!annotation ![0-9]+}}
217
+ // CHECK-O0: trap69 :
213
218
// CHECK-O0-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], {{!annotation ![0-9]+}}
214
219
// CHECK-O0-NEXT: unreachable, {{!annotation ![0-9]+}}
215
- // CHECK-O0: [[CONT70]] :
220
+ // CHECK-O0: cont70 :
216
221
// CHECK-O0-NEXT: [[TMP40:%.*]] = icmp uge ptr [[ARRAYIDX64]], [[WIDE_PTR_LB68]], {{!annotation ![0-9]+}}
217
- // CHECK-O0-NEXT: br i1 [[TMP40]], label % [[CONT72:.*]], label % [[TRAP71:.*]], {{!prof ![0-9]+}} , {{!annotation ![0-9]+}}
218
- // CHECK-O0: [[TRAP71]] :
222
+ // CHECK-O0-NEXT: br i1 [[TMP40]], label [[CONT72:% .*]], label [[TRAP71:% .*]], {{!annotation ![0-9]+}}
223
+ // CHECK-O0: trap71 :
219
224
// CHECK-O0-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], {{!annotation ![0-9]+}}
220
225
// CHECK-O0-NEXT: unreachable, {{!annotation ![0-9]+}}
221
- // CHECK-O0: [[CONT72]] :
226
+ // CHECK-O0: cont72 :
222
227
// CHECK-O0-NEXT: [[TMP41:%.*]] = load i32, ptr [[ARRAYIDX64]], align 4
223
- // CHECK-O0-NEXT: [[L75:%.*]] = getelementptr inbounds nuw [[STRUCT_S]], ptr [[S]], i32 0, i32 2
228
+ // CHECK-O0-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP74]], ptr align 8 [[S]], i64 24, i1 false)
229
+ // CHECK-O0-NEXT: [[L75:%.*]] = getelementptr inbounds nuw [[STRUCT_S]], ptr [[AGG_TEMP74]], i32 0, i32 2
224
230
// CHECK-O0-NEXT: [[TMP42:%.*]] = load i32, ptr [[L75]], align 8
225
- // CHECK-O0-NEXT: [[BP76:%.*]] = getelementptr inbounds nuw [[STRUCT_S]], ptr [[S ]], i32 0, i32 0
231
+ // CHECK-O0-NEXT: [[BP76:%.*]] = getelementptr inbounds nuw [[STRUCT_S]], ptr [[AGG_TEMP74 ]], i32 0, i32 0
226
232
// CHECK-O0-NEXT: [[TMP43:%.*]] = load ptr, ptr [[BP76]], align 8
227
233
// CHECK-O0-NEXT: [[IDX_EXT77:%.*]] = sext i32 [[TMP42]] to i64
228
234
// CHECK-O0-NEXT: [[ADD_PTR78:%.*]] = getelementptr inbounds i32, ptr [[TMP43]], i64 [[IDX_EXT77]]
@@ -240,17 +246,17 @@ struct S {
240
246
// CHECK-O0-NEXT: [[WIDE_PTR_LB_ADDR84:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP73]], i32 0, i32 2
241
247
// CHECK-O0-NEXT: [[WIDE_PTR_LB85:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR84]], align 8
242
248
// CHECK-O0-NEXT: [[TMP47:%.*]] = icmp ult ptr [[ARRAYIDX81]], [[WIDE_PTR_UB83]], {{!annotation ![0-9]+}}
243
- // CHECK-O0-NEXT: br i1 [[TMP47]], label % [[CONT87:.*]], label % [[TRAP86:.*]], {{!prof ![0-9]+}} , {{!annotation ![0-9]+}}
244
- // CHECK-O0: [[TRAP86]] :
249
+ // CHECK-O0-NEXT: br i1 [[TMP47]], label [[CONT87:% .*]], label [[TRAP86:% .*]], {{!annotation ![0-9]+}}
250
+ // CHECK-O0: trap86 :
245
251
// CHECK-O0-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], {{!annotation ![0-9]+}}
246
252
// CHECK-O0-NEXT: unreachable, {{!annotation ![0-9]+}}
247
- // CHECK-O0: [[CONT87]] :
253
+ // CHECK-O0: cont87 :
248
254
// CHECK-O0-NEXT: [[TMP48:%.*]] = icmp uge ptr [[ARRAYIDX81]], [[WIDE_PTR_LB85]], {{!annotation ![0-9]+}}
249
- // CHECK-O0-NEXT: br i1 [[TMP48]], label % [[CONT89:.*]], label % [[TRAP88:.*]], {{!prof ![0-9]+}} , {{!annotation ![0-9]+}}
250
- // CHECK-O0: [[TRAP88]] :
255
+ // CHECK-O0-NEXT: br i1 [[TMP48]], label [[CONT89:% .*]], label [[TRAP88:% .*]], {{!annotation ![0-9]+}}
256
+ // CHECK-O0: trap88 :
251
257
// CHECK-O0-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], {{!annotation ![0-9]+}}
252
258
// CHECK-O0-NEXT: unreachable, {{!annotation ![0-9]+}}
253
- // CHECK-O0: [[CONT89]] :
259
+ // CHECK-O0: cont89 :
254
260
// CHECK-O0-NEXT: [[TMP49:%.*]] = load i32, ptr [[ARRAYIDX81]], align 4
255
261
// CHECK-O0-NEXT: [[ADD90:%.*]] = add nsw i32 [[TMP41]], [[TMP49]]
256
262
// CHECK-O0-NEXT: ret i32 [[ADD90]]
0 commit comments