@@ -444,6 +444,28 @@ else:
444
444
define void @test9_gep_inbounds_nonzero (i1 %X , ptr %Y ) {
445
445
; CHECK-LABEL: @test9_gep_inbounds_nonzero(
446
446
; CHECK-NEXT: entry:
447
+ ; CHECK-NEXT: [[TMP0:%.*]] = xor i1 [[X:%.*]], true
448
+ ; CHECK-NEXT: call void @llvm.assume(i1 [[TMP0]])
449
+ ; CHECK-NEXT: [[GEP:%.*]] = getelementptr inbounds i8, ptr [[Y:%.*]], i64 12
450
+ ; CHECK-NEXT: [[TMP1:%.*]] = call ptr @fn_nonnull_noundef_arg(ptr [[GEP]])
451
+ ; CHECK-NEXT: ret void
452
+ ;
453
+ entry:
454
+ br i1 %X , label %if , label %else
455
+
456
+ if:
457
+ br label %else
458
+
459
+ else:
460
+ %phi = phi ptr [ %Y , %entry ], [ null , %if ]
461
+ %gep = getelementptr inbounds i8 , ptr %phi , i64 12
462
+ call ptr @fn_nonnull_noundef_arg (ptr %gep )
463
+ ret void
464
+ }
465
+
466
+ define void @test9_gep_inbounds_nonzero_null_defined (i1 %X , ptr %Y ) #0 {
467
+ ; CHECK-LABEL: @test9_gep_inbounds_nonzero_null_defined(
468
+ ; CHECK-NEXT: entry:
447
469
; CHECK-NEXT: [[SPEC_SELECT:%.*]] = select i1 [[X:%.*]], ptr null, ptr [[Y:%.*]]
448
470
; CHECK-NEXT: [[GEP:%.*]] = getelementptr inbounds i8, ptr [[SPEC_SELECT]], i64 12
449
471
; CHECK-NEXT: [[TMP0:%.*]] = call ptr @fn_nonnull_noundef_arg(ptr [[GEP]])
@@ -462,9 +484,30 @@ else:
462
484
ret void
463
485
}
464
486
487
+ define void @test9_gep_inbounds_unknown_null (i1 %X , ptr %Y , i64 %I ) {
488
+ ; CHECK-LABEL: @test9_gep_inbounds_unknown_null(
489
+ ; CHECK-NEXT: entry:
490
+ ; CHECK-NEXT: [[TMP0:%.*]] = xor i1 [[X:%.*]], true
491
+ ; CHECK-NEXT: call void @llvm.assume(i1 [[TMP0]])
492
+ ; CHECK-NEXT: [[GEP:%.*]] = getelementptr inbounds i8, ptr [[Y:%.*]], i64 [[I:%.*]]
493
+ ; CHECK-NEXT: [[TMP1:%.*]] = call ptr @fn_nonnull_noundef_arg(ptr [[GEP]])
494
+ ; CHECK-NEXT: ret void
495
+ ;
496
+ entry:
497
+ br i1 %X , label %if , label %else
498
+
499
+ if:
500
+ br label %else
501
+
502
+ else:
503
+ %phi = phi ptr [ %Y , %entry ], [ null , %if ]
504
+ %gep = getelementptr inbounds i8 , ptr %phi , i64 %I
505
+ call ptr @fn_nonnull_noundef_arg (ptr %gep )
506
+ ret void
507
+ }
465
508
466
- define void @test9_gep_inbouds_unknown_null (i1 %X , ptr %Y , i64 %I ) {
467
- ; CHECK-LABEL: @test9_gep_inbouds_unknown_null (
509
+ define void @test9_gep_inbounds_unknown_null_defined (i1 %X , ptr %Y , i64 %I ) # 0 {
510
+ ; CHECK-LABEL: @test9_gep_inbounds_unknown_null_defined (
468
511
; CHECK-NEXT: entry:
469
512
; CHECK-NEXT: [[SPEC_SELECT:%.*]] = select i1 [[X:%.*]], ptr null, ptr [[Y:%.*]]
470
513
; CHECK-NEXT: [[GEP:%.*]] = getelementptr inbounds i8, ptr [[SPEC_SELECT]], i64 [[I:%.*]]
@@ -484,6 +527,27 @@ else:
484
527
ret void
485
528
}
486
529
530
+ define void @test9_gep_inbounds_unknown_null_call_noundef (i1 %X , ptr %Y , i64 %I ) {
531
+ ; CHECK-LABEL: @test9_gep_inbounds_unknown_null_call_noundef(
532
+ ; CHECK-NEXT: entry:
533
+ ; CHECK-NEXT: [[SPEC_SELECT:%.*]] = select i1 [[X:%.*]], ptr null, ptr [[Y:%.*]]
534
+ ; CHECK-NEXT: [[GEP:%.*]] = getelementptr inbounds i8, ptr [[SPEC_SELECT]], i64 [[I:%.*]]
535
+ ; CHECK-NEXT: [[TMP0:%.*]] = call ptr @fn_noundef_arg(ptr [[GEP]])
536
+ ; CHECK-NEXT: ret void
537
+ ;
538
+ entry:
539
+ br i1 %X , label %if , label %else
540
+
541
+ if:
542
+ br label %else
543
+
544
+ else:
545
+ %phi = phi ptr [ %Y , %entry ], [ null , %if ]
546
+ %gep = getelementptr inbounds i8 , ptr %phi , i64 %I
547
+ call ptr @fn_noundef_arg (ptr %gep )
548
+ ret void
549
+ }
550
+
487
551
define void @test9_gep_unknown_null (i1 %X , ptr %Y , i64 %I ) {
488
552
; CHECK-LABEL: @test9_gep_unknown_null(
489
553
; CHECK-NEXT: entry:
0 commit comments