Skip to content

Commit 35c2f45

Browse files
authored
[BoundsSafety][NFC] Fix CodeGen.range-check-optimizations-no-bringup-missing-checks.c (#11164)
rdar://158161122
1 parent 632273d commit 35c2f45

File tree

1 file changed

+37
-37
lines changed

1 file changed

+37
-37
lines changed

clang/test/BoundsSafety/CodeGen/range-check-optimizations-no-bringup-missing-checks.c

Lines changed: 37 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -312,27 +312,27 @@ void loop_accesses_out_of_bounds_eliminate_lower_check_len_ull(int* __counted_by
312312
// No checks can be eliminated, as dst + i + 2 may wrap and is out of bounds.
313313
// CHECK-LABEL: @loop_accesses_out_of_bounds_cannot_eliminate_wrap_check(
314314
// CHECK-NEXT: entry:
315-
// CHECK-NEXT: [[INVARIANT_GEP:%.*]] = getelementptr i8, ptr [[DST:%.*]], i64 8
316315
// CHECK-NEXT: [[CMP6_NOT:%.*]] = icmp eq i32 [[N:%.*]], 0
317316
// CHECK-NEXT: br i1 [[CMP6_NOT]], label [[FOR_COND_CLEANUP:%.*]], label [[FOR_BODY_LR_PH:%.*]]
318317
// CHECK: for.body.lr.ph:
319318
// CHECK-NEXT: [[IDX_EXT:%.*]] = zext i32 [[N]] to i64
320-
// CHECK-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds nuw i32, ptr [[DST]], i64 [[IDX_EXT]]
319+
// CHECK-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds nuw i32, ptr [[DST:%.*]], i64 [[IDX_EXT]]
321320
// CHECK-NEXT: br label [[FOR_BODY:%.*]]
322321
// CHECK: for.cond.cleanup:
323322
// CHECK-NEXT: ret void
324323
// CHECK: for.body:
325324
// CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ 0, [[FOR_BODY_LR_PH]] ], [ [[INDVARS_IV_NEXT:%.*]], [[CONT1:%.*]] ]
326-
// CHECK-NEXT: [[GEP:%.*]] = getelementptr i32, ptr [[INVARIANT_GEP]], i64 [[INDVARS_IV]]
327-
// CHECK-NEXT: [[TMP0:%.*]] = icmp ult ptr [[GEP]], [[ADD_PTR]], {{!annotation ![0-9]+}}
328-
// CHECK-NEXT: [[TMP1:%.*]] = icmp uge ptr [[GEP]], [[DST]], {{!annotation ![0-9]+}}
329-
// CHECK-NEXT: [[OR_COND:%.*]] = and i1 [[TMP0]], [[TMP1]], {{!annotation ![0-9]+}}
325+
// CHECK-NEXT: [[TMP0:%.*]] = getelementptr i32, ptr [[DST]], i64 [[INDVARS_IV]]
326+
// CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr i8, ptr [[TMP0]], i64 8
327+
// CHECK-NEXT: [[TMP1:%.*]] = icmp ult ptr [[ARRAYIDX]], [[ADD_PTR]], {{!annotation ![0-9]+}}
328+
// CHECK-NEXT: [[TMP2:%.*]] = icmp uge ptr [[ARRAYIDX]], [[DST]], {{!annotation ![0-9]+}}
329+
// CHECK-NEXT: [[OR_COND:%.*]] = and i1 [[TMP1]], [[TMP2]], {{!annotation ![0-9]+}}
330330
// CHECK-NEXT: br i1 [[OR_COND]], label [[CONT1]], label [[TRAP:%.*]], !prof [[PROF10]], {{!annotation ![0-9]+}}
331331
// CHECK: trap:
332332
// CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) {{#[0-9]+}}, {{!annotation ![0-9]+}}
333333
// CHECK-NEXT: unreachable, {{!annotation ![0-9]+}}
334334
// CHECK: cont1:
335-
// CHECK-NEXT: store i32 0, ptr [[GEP]], align 4, {{!tbaa ![0-9]+}}
335+
// CHECK-NEXT: store i32 0, ptr [[ARRAYIDX]], align 4, {{!tbaa ![0-9]+}}
336336
// CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nuw nsw i64 [[INDVARS_IV]], 1
337337
// CHECK-NEXT: [[EXITCOND_NOT:%.*]] = icmp eq i64 [[INDVARS_IV_NEXT]], [[IDX_EXT]]
338338
// CHECK-NEXT: br i1 [[EXITCOND_NOT]], label [[FOR_COND_CLEANUP]], label [[FOR_BODY]], {{!llvm.loop ![0-9]+}}
@@ -344,27 +344,27 @@ void loop_accesses_out_of_bounds_cannot_eliminate_wrap_check(int* __counted_by(n
344344

345345
// CHECK-LABEL: @loop_accesses_out_of_bounds_cannot_eliminate_wrap_check_signed_len(
346346
// CHECK-NEXT: entry:
347-
// CHECK-NEXT: [[INVARIANT_GEP:%.*]] = getelementptr i8, ptr [[DST:%.*]], i64 8
348347
// CHECK-NEXT: [[CMP6:%.*]] = icmp sgt i32 [[N:%.*]], 0
349348
// CHECK-NEXT: br i1 [[CMP6]], label [[FOR_BODY_LR_PH:%.*]], label [[FOR_COND_CLEANUP:%.*]]
350349
// CHECK: for.body.lr.ph:
351350
// CHECK-NEXT: [[IDX_EXT:%.*]] = zext nneg i32 [[N]] to i64
352-
// CHECK-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds nuw i32, ptr [[DST]], i64 [[IDX_EXT]]
351+
// CHECK-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds nuw i32, ptr [[DST:%.*]], i64 [[IDX_EXT]]
353352
// CHECK-NEXT: br label [[FOR_BODY:%.*]]
354353
// CHECK: for.cond.cleanup:
355354
// CHECK-NEXT: ret void
356355
// CHECK: for.body:
357356
// CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ 0, [[FOR_BODY_LR_PH]] ], [ [[INDVARS_IV_NEXT:%.*]], [[CONT1:%.*]] ]
358-
// CHECK-NEXT: [[GEP:%.*]] = getelementptr i32, ptr [[INVARIANT_GEP]], i64 [[INDVARS_IV]]
359-
// CHECK-NEXT: [[TMP0:%.*]] = icmp ult ptr [[GEP]], [[ADD_PTR]], {{!annotation ![0-9]+}}
360-
// CHECK-NEXT: [[TMP1:%.*]] = icmp uge ptr [[GEP]], [[DST]], {{!annotation ![0-9]+}}
361-
// CHECK-NEXT: [[OR_COND:%.*]] = and i1 [[TMP0]], [[TMP1]], {{!annotation ![0-9]+}}
357+
// CHECK-NEXT: [[TMP0:%.*]] = getelementptr i32, ptr [[DST]], i64 [[INDVARS_IV]]
358+
// CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr i8, ptr [[TMP0]], i64 8
359+
// CHECK-NEXT: [[TMP1:%.*]] = icmp ult ptr [[ARRAYIDX]], [[ADD_PTR]], {{!annotation ![0-9]+}}
360+
// CHECK-NEXT: [[TMP2:%.*]] = icmp uge ptr [[ARRAYIDX]], [[DST]], {{!annotation ![0-9]+}}
361+
// CHECK-NEXT: [[OR_COND:%.*]] = and i1 [[TMP1]], [[TMP2]], {{!annotation ![0-9]+}}
362362
// CHECK-NEXT: br i1 [[OR_COND]], label [[CONT1]], label [[TRAP:%.*]], !prof [[PROF10]], {{!annotation ![0-9]+}}
363363
// CHECK: trap:
364364
// CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) {{#[0-9]+}}, {{!annotation ![0-9]+}}
365365
// CHECK-NEXT: unreachable, {{!annotation ![0-9]+}}
366366
// CHECK: cont1:
367-
// CHECK-NEXT: store i32 0, ptr [[GEP]], align 4, {{!tbaa ![0-9]+}}
367+
// CHECK-NEXT: store i32 0, ptr [[ARRAYIDX]], align 4, {{!tbaa ![0-9]+}}
368368
// CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nuw nsw i64 [[INDVARS_IV]], 1
369369
// CHECK-NEXT: [[EXITCOND_NOT:%.*]] = icmp eq i64 [[INDVARS_IV_NEXT]], [[IDX_EXT]]
370370
// CHECK-NEXT: br i1 [[EXITCOND_NOT]], label [[FOR_COND_CLEANUP]], label [[FOR_BODY]], {{!llvm.loop ![0-9]+}}
@@ -376,28 +376,28 @@ void loop_accesses_out_of_bounds_cannot_eliminate_wrap_check_signed_len(int* __c
376376

377377
// CHECK-LABEL: @loop_accesses_out_of_bounds_cannot_eliminate_wrap_check_ull_len(
378378
// CHECK-NEXT: entry:
379-
// CHECK-NEXT: [[INVARIANT_GEP:%.*]] = getelementptr i8, ptr [[DST:%.*]], i64 8
380379
// CHECK-NEXT: [[CMP7_NOT:%.*]] = icmp eq i64 [[N:%.*]], 0
381380
// CHECK-NEXT: br i1 [[CMP7_NOT]], label [[FOR_COND_CLEANUP:%.*]], label [[FOR_BODY_LR_PH:%.*]]
382381
// CHECK: for.body.lr.ph:
383382
// CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i64 [[N]], -1
384383
// CHECK-NEXT: tail call void @llvm.assume(i1 [[CMP1]])
385-
// CHECK-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds nuw i32, ptr [[DST]], i64 [[N]]
384+
// CHECK-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds nuw i32, ptr [[DST:%.*]], i64 [[N]]
386385
// CHECK-NEXT: br label [[FOR_BODY:%.*]]
387386
// CHECK: for.cond.cleanup:
388387
// CHECK-NEXT: ret void
389388
// CHECK: for.body:
390389
// CHECK-NEXT: [[I_08:%.*]] = phi i64 [ 0, [[FOR_BODY_LR_PH]] ], [ [[ADD3:%.*]], [[CONT2:%.*]] ]
391-
// CHECK-NEXT: [[GEP:%.*]] = getelementptr i32, ptr [[INVARIANT_GEP]], i64 [[I_08]]
392-
// CHECK-NEXT: [[TMP0:%.*]] = icmp ult ptr [[GEP]], [[ADD_PTR]], {{!annotation ![0-9]+}}
393-
// CHECK-NEXT: [[TMP1:%.*]] = icmp uge ptr [[GEP]], [[DST]], {{!annotation ![0-9]+}}
394-
// CHECK-NEXT: [[OR_COND:%.*]] = and i1 [[TMP0]], [[TMP1]], {{!annotation ![0-9]+}}
390+
// CHECK-NEXT: [[TMP0:%.*]] = getelementptr i32, ptr [[DST]], i64 [[I_08]]
391+
// CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr i8, ptr [[TMP0]], i64 8
392+
// CHECK-NEXT: [[TMP1:%.*]] = icmp ult ptr [[ARRAYIDX]], [[ADD_PTR]], {{!annotation ![0-9]+}}
393+
// CHECK-NEXT: [[TMP2:%.*]] = icmp uge ptr [[ARRAYIDX]], [[DST]], {{!annotation ![0-9]+}}
394+
// CHECK-NEXT: [[OR_COND:%.*]] = and i1 [[TMP1]], [[TMP2]], {{!annotation ![0-9]+}}
395395
// CHECK-NEXT: br i1 [[OR_COND]], label [[CONT2]], label [[TRAP:%.*]], !prof [[PROF10]], {{!annotation ![0-9]+}}
396396
// CHECK: trap:
397397
// CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) {{#[0-9]+}}, {{!annotation ![0-9]+}}
398398
// CHECK-NEXT: unreachable, {{!annotation ![0-9]+}}
399399
// CHECK: cont2:
400-
// CHECK-NEXT: store i32 0, ptr [[GEP]], align 4, {{!tbaa ![0-9]+}}
400+
// CHECK-NEXT: store i32 0, ptr [[ARRAYIDX]], align 4, {{!tbaa ![0-9]+}}
401401
// CHECK-NEXT: [[ADD3]] = add nuw i64 [[I_08]], 1
402402
// CHECK-NEXT: [[EXITCOND_NOT:%.*]] = icmp eq i64 [[ADD3]], [[N]]
403403
// CHECK-NEXT: br i1 [[EXITCOND_NOT]], label [[FOR_COND_CLEANUP]], label [[FOR_BODY]], {{!llvm.loop ![0-9]+}}
@@ -420,12 +420,11 @@ void loop_accesses_out_of_bounds_cannot_eliminate_wrap_check_ull_len(int* __coun
420420
// FIXME: Regressed at the moment, rdar://120485098.
421421
// CHECK-LABEL: @loop_accesses_eliminate_second_lower_check(
422422
// CHECK-NEXT: entry:
423-
// CHECK-NEXT: [[INVARIANT_GEP:%.*]] = getelementptr i8, ptr [[DST:%.*]], i64 8
424423
// CHECK-NEXT: [[CMP24_NOT:%.*]] = icmp eq i32 [[N:%.*]], 0
425424
// CHECK-NEXT: br i1 [[CMP24_NOT]], label [[FOR_COND_CLEANUP:%.*]], label [[FOR_BODY_LR_PH:%.*]]
426425
// CHECK: for.body.lr.ph:
427426
// CHECK-NEXT: [[IDX_EXT:%.*]] = zext i32 [[N]] to i64
428-
// CHECK-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds nuw i32, ptr [[DST]], i64 [[IDX_EXT]]
427+
// CHECK-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds nuw i32, ptr [[DST:%.*]], i64 [[IDX_EXT]]
429428
// CHECK-NEXT: br label [[FOR_BODY:%.*]]
430429
// CHECK: for.cond.cleanup:
431430
// CHECK-NEXT: ret void
@@ -440,13 +439,14 @@ void loop_accesses_out_of_bounds_cannot_eliminate_wrap_check_ull_len(int* __coun
440439
// CHECK-NEXT: unreachable, {{!annotation ![0-9]+}}
441440
// CHECK: cont1:
442441
// CHECK-NEXT: store i32 0, ptr [[ARRAYIDX]], align 4, {{!tbaa ![0-9]+}}
443-
// CHECK-NEXT: [[GEP:%.*]] = getelementptr i32, ptr [[INVARIANT_GEP]], i64 [[INDVARS_IV]]
444-
// CHECK-NEXT: [[TMP1:%.*]] = icmp ult ptr [[GEP]], [[ADD_PTR]], {{!annotation ![0-9]+}}
445-
// CHECK-NEXT: [[TMP2:%.*]] = icmp uge ptr [[GEP]], [[DST]], {{!annotation ![0-9]+}}
446-
// CHECK-NEXT: [[OR_COND17:%.*]] = and i1 [[TMP1]], [[TMP2]], {{!annotation ![0-9]+}}
442+
// CHECK-NEXT: [[TMP1:%.*]] = getelementptr i32, ptr [[DST]], i64 [[INDVARS_IV]]
443+
// CHECK-NEXT: [[ARRAYIDX9:%.*]] = getelementptr i8, ptr [[TMP1]], i64 8
444+
// CHECK-NEXT: [[TMP2:%.*]] = icmp ult ptr [[ARRAYIDX9]], [[ADD_PTR]], {{!annotation ![0-9]+}}
445+
// CHECK-NEXT: [[TMP3:%.*]] = icmp uge ptr [[ARRAYIDX9]], [[DST]], {{!annotation ![0-9]+}}
446+
// CHECK-NEXT: [[OR_COND17:%.*]] = and i1 [[TMP2]], [[TMP3]], {{!annotation ![0-9]+}}
447447
// CHECK-NEXT: br i1 [[OR_COND17]], label [[CONT15]], label [[TRAP]], !prof [[PROF10]], {{!annotation ![0-9]+}}
448448
// CHECK: cont15:
449-
// CHECK-NEXT: store i32 0, ptr [[GEP]], align 4, {{!tbaa ![0-9]+}}
449+
// CHECK-NEXT: store i32 0, ptr [[ARRAYIDX9]], align 4, {{!tbaa ![0-9]+}}
450450
// CHECK-NEXT: [[EXITCOND_NOT:%.*]] = icmp eq i64 [[INDVARS_IV_NEXT]], [[IDX_EXT]]
451451
// CHECK-NEXT: br i1 [[EXITCOND_NOT]], label [[FOR_COND_CLEANUP]], label [[FOR_BODY]], {{!llvm.loop ![0-9]+}}
452452
//
@@ -463,27 +463,27 @@ void loop_accesses_eliminate_second_lower_check(int* __counted_by(n) dst, unsign
463463
// CHECK-NEXT: entry:
464464
// CHECK-NEXT: [[IDX_EXT:%.*]] = zext i32 [[N:%.*]] to i64
465465
// CHECK-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds nuw i32, ptr [[DST:%.*]], i64 [[IDX_EXT]]
466-
// CHECK-NEXT: [[INVARIANT_GEP:%.*]] = getelementptr i8, ptr [[DST]], i64 8
467466
// CHECK-NEXT: br label [[FOR_BODY:%.*]]
468467
// CHECK: for.cond.cleanup:
469468
// CHECK-NEXT: ret void
470469
// CHECK: for.body:
471470
// CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[INDVARS_IV_NEXT:%.*]], [[CONT15:%.*]] ]
472-
// CHECK-NEXT: [[GEP:%.*]] = getelementptr i32, ptr [[INVARIANT_GEP]], i64 [[INDVARS_IV]]
473-
// CHECK-NEXT: [[TMP0:%.*]] = icmp ult ptr [[GEP]], [[ADD_PTR]], {{!annotation ![0-9]+}}
474-
// CHECK-NEXT: [[TMP1:%.*]] = icmp uge ptr [[GEP]], [[DST]], {{!annotation ![0-9]+}}
475-
// CHECK-NEXT: [[OR_COND:%.*]] = and i1 [[TMP0]], [[TMP1]], {{!annotation ![0-9]+}}
471+
// CHECK-NEXT: [[TMP0:%.*]] = getelementptr i32, ptr [[DST]], i64 [[INDVARS_IV]]
472+
// CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr i8, ptr [[TMP0]], i64 8
473+
// CHECK-NEXT: [[TMP1:%.*]] = icmp ult ptr [[ARRAYIDX]], [[ADD_PTR]], {{!annotation ![0-9]+}}
474+
// CHECK-NEXT: [[TMP2:%.*]] = icmp uge ptr [[ARRAYIDX]], [[DST]], {{!annotation ![0-9]+}}
475+
// CHECK-NEXT: [[OR_COND:%.*]] = and i1 [[TMP1]], [[TMP2]], {{!annotation ![0-9]+}}
476476
// CHECK-NEXT: br i1 [[OR_COND]], label [[CONT1:%.*]], label [[TRAP:%.*]], !prof [[PROF10]], {{!annotation ![0-9]+}}
477477
// CHECK: trap:
478478
// CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) {{#[0-9]+}}, {{!annotation ![0-9]+}}
479479
// CHECK-NEXT: unreachable, {{!annotation ![0-9]+}}
480480
// CHECK: cont1:
481-
// CHECK-NEXT: store i32 0, ptr [[GEP]], align 4, {{!tbaa ![0-9]+}}
481+
// CHECK-NEXT: store i32 0, ptr [[ARRAYIDX]], align 4, {{!tbaa ![0-9]+}}
482482
// CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nuw nsw i64 [[INDVARS_IV]], 1
483483
// CHECK-NEXT: [[ARRAYIDX9:%.*]] = getelementptr i32, ptr [[DST]], i64 [[INDVARS_IV_NEXT]]
484-
// CHECK-NEXT: [[TMP2:%.*]] = icmp ult ptr [[ARRAYIDX9]], [[ADD_PTR]], {{!annotation ![0-9]+}}
485-
// CHECK-NEXT: [[TMP3:%.*]] = icmp uge ptr [[ARRAYIDX9]], [[DST]], {{!annotation ![0-9]+}}
486-
// CHECK-NEXT: [[OR_COND17:%.*]] = and i1 [[TMP2]], [[TMP3]], {{!annotation ![0-9]+}}
484+
// CHECK-NEXT: [[TMP3:%.*]] = icmp ult ptr [[ARRAYIDX9]], [[ADD_PTR]], {{!annotation ![0-9]+}}
485+
// CHECK-NEXT: [[TMP4:%.*]] = icmp uge ptr [[ARRAYIDX9]], [[DST]], {{!annotation ![0-9]+}}
486+
// CHECK-NEXT: [[OR_COND17:%.*]] = and i1 [[TMP3]], [[TMP4]], {{!annotation ![0-9]+}}
487487
// CHECK-NEXT: br i1 [[OR_COND17]], label [[CONT15]], label [[TRAP]], !prof [[PROF10]], {{!annotation ![0-9]+}}
488488
// CHECK: cont15:
489489
// CHECK-NEXT: store i32 0, ptr [[ARRAYIDX9]], align 4, {{!tbaa ![0-9]+}}

0 commit comments

Comments
 (0)