@@ -312,27 +312,27 @@ void loop_accesses_out_of_bounds_eliminate_lower_check_len_ull(int* __counted_by
312
312
// No checks can be eliminated, as dst + i + 2 may wrap and is out of bounds.
313
313
// CHECK-LABEL: @loop_accesses_out_of_bounds_cannot_eliminate_wrap_check(
314
314
// CHECK-NEXT: entry:
315
- // CHECK-NEXT: [[INVARIANT_GEP:%.*]] = getelementptr i8, ptr [[DST:%.*]], i64 8
316
315
// CHECK-NEXT: [[CMP6_NOT:%.*]] = icmp eq i32 [[N:%.*]], 0
317
316
// CHECK-NEXT: br i1 [[CMP6_NOT]], label [[FOR_COND_CLEANUP:%.*]], label [[FOR_BODY_LR_PH:%.*]]
318
317
// CHECK: for.body.lr.ph:
319
318
// 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]]
321
320
// CHECK-NEXT: br label [[FOR_BODY:%.*]]
322
321
// CHECK: for.cond.cleanup:
323
322
// CHECK-NEXT: ret void
324
323
// CHECK: for.body:
325
324
// 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]+}}
330
330
// CHECK-NEXT: br i1 [[OR_COND]], label [[CONT1]], label [[TRAP:%.*]], !prof [[PROF10]], {{!annotation ![0-9]+}}
331
331
// CHECK: trap:
332
332
// CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) {{#[0-9]+}}, {{!annotation ![0-9]+}}
333
333
// CHECK-NEXT: unreachable, {{!annotation ![0-9]+}}
334
334
// 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]+}}
336
336
// CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nuw nsw i64 [[INDVARS_IV]], 1
337
337
// CHECK-NEXT: [[EXITCOND_NOT:%.*]] = icmp eq i64 [[INDVARS_IV_NEXT]], [[IDX_EXT]]
338
338
// 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
344
344
345
345
// CHECK-LABEL: @loop_accesses_out_of_bounds_cannot_eliminate_wrap_check_signed_len(
346
346
// CHECK-NEXT: entry:
347
- // CHECK-NEXT: [[INVARIANT_GEP:%.*]] = getelementptr i8, ptr [[DST:%.*]], i64 8
348
347
// CHECK-NEXT: [[CMP6:%.*]] = icmp sgt i32 [[N:%.*]], 0
349
348
// CHECK-NEXT: br i1 [[CMP6]], label [[FOR_BODY_LR_PH:%.*]], label [[FOR_COND_CLEANUP:%.*]]
350
349
// CHECK: for.body.lr.ph:
351
350
// 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]]
353
352
// CHECK-NEXT: br label [[FOR_BODY:%.*]]
354
353
// CHECK: for.cond.cleanup:
355
354
// CHECK-NEXT: ret void
356
355
// CHECK: for.body:
357
356
// 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]+}}
362
362
// CHECK-NEXT: br i1 [[OR_COND]], label [[CONT1]], label [[TRAP:%.*]], !prof [[PROF10]], {{!annotation ![0-9]+}}
363
363
// CHECK: trap:
364
364
// CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) {{#[0-9]+}}, {{!annotation ![0-9]+}}
365
365
// CHECK-NEXT: unreachable, {{!annotation ![0-9]+}}
366
366
// 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]+}}
368
368
// CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nuw nsw i64 [[INDVARS_IV]], 1
369
369
// CHECK-NEXT: [[EXITCOND_NOT:%.*]] = icmp eq i64 [[INDVARS_IV_NEXT]], [[IDX_EXT]]
370
370
// 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
376
376
377
377
// CHECK-LABEL: @loop_accesses_out_of_bounds_cannot_eliminate_wrap_check_ull_len(
378
378
// CHECK-NEXT: entry:
379
- // CHECK-NEXT: [[INVARIANT_GEP:%.*]] = getelementptr i8, ptr [[DST:%.*]], i64 8
380
379
// CHECK-NEXT: [[CMP7_NOT:%.*]] = icmp eq i64 [[N:%.*]], 0
381
380
// CHECK-NEXT: br i1 [[CMP7_NOT]], label [[FOR_COND_CLEANUP:%.*]], label [[FOR_BODY_LR_PH:%.*]]
382
381
// CHECK: for.body.lr.ph:
383
382
// CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i64 [[N]], -1
384
383
// 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]]
386
385
// CHECK-NEXT: br label [[FOR_BODY:%.*]]
387
386
// CHECK: for.cond.cleanup:
388
387
// CHECK-NEXT: ret void
389
388
// CHECK: for.body:
390
389
// 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]+}}
395
395
// CHECK-NEXT: br i1 [[OR_COND]], label [[CONT2]], label [[TRAP:%.*]], !prof [[PROF10]], {{!annotation ![0-9]+}}
396
396
// CHECK: trap:
397
397
// CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) {{#[0-9]+}}, {{!annotation ![0-9]+}}
398
398
// CHECK-NEXT: unreachable, {{!annotation ![0-9]+}}
399
399
// 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]+}}
401
401
// CHECK-NEXT: [[ADD3]] = add nuw i64 [[I_08]], 1
402
402
// CHECK-NEXT: [[EXITCOND_NOT:%.*]] = icmp eq i64 [[ADD3]], [[N]]
403
403
// 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
420
420
// FIXME: Regressed at the moment, rdar://120485098.
421
421
// CHECK-LABEL: @loop_accesses_eliminate_second_lower_check(
422
422
// CHECK-NEXT: entry:
423
- // CHECK-NEXT: [[INVARIANT_GEP:%.*]] = getelementptr i8, ptr [[DST:%.*]], i64 8
424
423
// CHECK-NEXT: [[CMP24_NOT:%.*]] = icmp eq i32 [[N:%.*]], 0
425
424
// CHECK-NEXT: br i1 [[CMP24_NOT]], label [[FOR_COND_CLEANUP:%.*]], label [[FOR_BODY_LR_PH:%.*]]
426
425
// CHECK: for.body.lr.ph:
427
426
// 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]]
429
428
// CHECK-NEXT: br label [[FOR_BODY:%.*]]
430
429
// CHECK: for.cond.cleanup:
431
430
// CHECK-NEXT: ret void
@@ -440,13 +439,14 @@ void loop_accesses_out_of_bounds_cannot_eliminate_wrap_check_ull_len(int* __coun
440
439
// CHECK-NEXT: unreachable, {{!annotation ![0-9]+}}
441
440
// CHECK: cont1:
442
441
// 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]+}}
447
447
// CHECK-NEXT: br i1 [[OR_COND17]], label [[CONT15]], label [[TRAP]], !prof [[PROF10]], {{!annotation ![0-9]+}}
448
448
// 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]+}}
450
450
// CHECK-NEXT: [[EXITCOND_NOT:%.*]] = icmp eq i64 [[INDVARS_IV_NEXT]], [[IDX_EXT]]
451
451
// CHECK-NEXT: br i1 [[EXITCOND_NOT]], label [[FOR_COND_CLEANUP]], label [[FOR_BODY]], {{!llvm.loop ![0-9]+}}
452
452
//
@@ -463,27 +463,27 @@ void loop_accesses_eliminate_second_lower_check(int* __counted_by(n) dst, unsign
463
463
// CHECK-NEXT: entry:
464
464
// CHECK-NEXT: [[IDX_EXT:%.*]] = zext i32 [[N:%.*]] to i64
465
465
// CHECK-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds nuw i32, ptr [[DST:%.*]], i64 [[IDX_EXT]]
466
- // CHECK-NEXT: [[INVARIANT_GEP:%.*]] = getelementptr i8, ptr [[DST]], i64 8
467
466
// CHECK-NEXT: br label [[FOR_BODY:%.*]]
468
467
// CHECK: for.cond.cleanup:
469
468
// CHECK-NEXT: ret void
470
469
// CHECK: for.body:
471
470
// 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]+}}
476
476
// CHECK-NEXT: br i1 [[OR_COND]], label [[CONT1:%.*]], label [[TRAP:%.*]], !prof [[PROF10]], {{!annotation ![0-9]+}}
477
477
// CHECK: trap:
478
478
// CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) {{#[0-9]+}}, {{!annotation ![0-9]+}}
479
479
// CHECK-NEXT: unreachable, {{!annotation ![0-9]+}}
480
480
// 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]+}}
482
482
// CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nuw nsw i64 [[INDVARS_IV]], 1
483
483
// 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]+}}
487
487
// CHECK-NEXT: br i1 [[OR_COND17]], label [[CONT15]], label [[TRAP]], !prof [[PROF10]], {{!annotation ![0-9]+}}
488
488
// CHECK: cont15:
489
489
// CHECK-NEXT: store i32 0, ptr [[ARRAYIDX9]], align 4, {{!tbaa ![0-9]+}}
0 commit comments