@@ -254,8 +254,24 @@ entry:
254
254
255
255
declare void @llvm.assume (i1 )
256
256
257
- define void @insert_store_nonconst_index_known_valid_by_and (<16 x i8 >* %q , i8 zeroext %s , i32 %idx ) {
258
- ; CHECK-LABEL: @insert_store_nonconst_index_known_valid_by_and(
257
+ define void @insert_store_nonconst_index_known_noundef_and_valid_by_and (<16 x i8 >* %q , i8 zeroext %s , i32 noundef %idx ) {
258
+ ; CHECK-LABEL: @insert_store_nonconst_index_known_noundef_and_valid_by_and(
259
+ ; CHECK-NEXT: entry:
260
+ ; CHECK-NEXT: [[IDX_CLAMPED:%.*]] = and i32 [[IDX:%.*]], 7
261
+ ; CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds <16 x i8>, <16 x i8>* [[Q:%.*]], i32 0, i32 [[IDX_CLAMPED]]
262
+ ; CHECK-NEXT: store i8 [[S:%.*]], i8* [[TMP0]], align 1
263
+ ; CHECK-NEXT: ret void
264
+ ;
265
+ entry:
266
+ %0 = load <16 x i8 >, <16 x i8 >* %q
267
+ %idx.clamped = and i32 %idx , 7
268
+ %vecins = insertelement <16 x i8 > %0 , i8 %s , i32 %idx.clamped
269
+ store <16 x i8 > %vecins , <16 x i8 >* %q
270
+ ret void
271
+ }
272
+
273
+ define void @insert_store_nonconst_index_known_valid_by_and_but_may_be_poison (<16 x i8 >* %q , i8 zeroext %s , i32 %idx ) {
274
+ ; CHECK-LABEL: @insert_store_nonconst_index_known_valid_by_and_but_may_be_poison(
259
275
; CHECK-NEXT: entry:
260
276
; CHECK-NEXT: [[IDX_CLAMPED:%.*]] = and i32 [[IDX:%.*]], 7
261
277
; CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds <16 x i8>, <16 x i8>* [[Q:%.*]], i32 0, i32 [[IDX_CLAMPED]]
@@ -287,8 +303,24 @@ entry:
287
303
ret void
288
304
}
289
305
290
- define void @insert_store_nonconst_index_known_valid_by_urem (<16 x i8 >* %q , i8 zeroext %s , i32 %idx ) {
291
- ; CHECK-LABEL: @insert_store_nonconst_index_known_valid_by_urem(
306
+ define void @insert_store_nonconst_index_known_noundef_and_valid_by_urem (<16 x i8 >* %q , i8 zeroext %s , i32 noundef %idx ) {
307
+ ; CHECK-LABEL: @insert_store_nonconst_index_known_noundef_and_valid_by_urem(
308
+ ; CHECK-NEXT: entry:
309
+ ; CHECK-NEXT: [[IDX_CLAMPED:%.*]] = urem i32 [[IDX:%.*]], 16
310
+ ; CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds <16 x i8>, <16 x i8>* [[Q:%.*]], i32 0, i32 [[IDX_CLAMPED]]
311
+ ; CHECK-NEXT: store i8 [[S:%.*]], i8* [[TMP0]], align 1
312
+ ; CHECK-NEXT: ret void
313
+ ;
314
+ entry:
315
+ %0 = load <16 x i8 >, <16 x i8 >* %q
316
+ %idx.clamped = urem i32 %idx , 16
317
+ %vecins = insertelement <16 x i8 > %0 , i8 %s , i32 %idx.clamped
318
+ store <16 x i8 > %vecins , <16 x i8 >* %q
319
+ ret void
320
+ }
321
+
322
+ define void @insert_store_nonconst_index_known_valid_by_urem_but_may_be_poison (<16 x i8 >* %q , i8 zeroext %s , i32 %idx ) {
323
+ ; CHECK-LABEL: @insert_store_nonconst_index_known_valid_by_urem_but_may_be_poison(
292
324
; CHECK-NEXT: entry:
293
325
; CHECK-NEXT: [[IDX_CLAMPED:%.*]] = urem i32 [[IDX:%.*]], 16
294
326
; CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds <16 x i8>, <16 x i8>* [[Q:%.*]], i32 0, i32 [[IDX_CLAMPED]]
0 commit comments