@@ -472,15 +472,22 @@ define void @test_dse_after_load(ptr %p, i1 %cnd) {
472472; typed due to the user of a Value to represent the address. Note that other
473473; passes will canonicalize away the bitcasts in this example.
474474define i32 @test_false_negative_types (ptr %p ) {
475- ; CHECK-LABEL: define {{[^@]+}}@test_false_negative_types
476- ; CHECK-SAME: (ptr [[P:%.*]]) {
477- ; CHECK-NEXT: [[TMP1:%.*]] = call ptr @llvm.invariant.start.p0(i64 4, ptr [[P]])
478- ; CHECK-NEXT: [[V1:%.*]] = load i32, ptr [[P]], align 4
479- ; CHECK-NEXT: call void @clobber()
480- ; CHECK-NEXT: [[V2F:%.*]] = load float, ptr [[P]], align 4
481- ; CHECK-NEXT: [[V2:%.*]] = bitcast float [[V2F]] to i32
482- ; CHECK-NEXT: [[SUB:%.*]] = sub i32 [[V1]], [[V2]]
483- ; CHECK-NEXT: ret i32 [[SUB]]
475+ ; NO_ASSUME-LABEL: define {{[^@]+}}@test_false_negative_types
476+ ; NO_ASSUME-SAME: (ptr [[P:%.*]]) {
477+ ; NO_ASSUME-NEXT: [[TMP1:%.*]] = call ptr @llvm.invariant.start.p0(i64 4, ptr [[P]])
478+ ; NO_ASSUME-NEXT: [[V1:%.*]] = load i32, ptr [[P]], align 4
479+ ; NO_ASSUME-NEXT: [[TMP2:%.*]] = bitcast i32 [[V1]] to float
480+ ; NO_ASSUME-NEXT: call void @clobber()
481+ ; NO_ASSUME-NEXT: ret i32 0
482+ ;
483+ ; USE_ASSUME-LABEL: define {{[^@]+}}@test_false_negative_types
484+ ; USE_ASSUME-SAME: (ptr [[P:%.*]]) {
485+ ; USE_ASSUME-NEXT: [[TMP1:%.*]] = call ptr @llvm.invariant.start.p0(i64 4, ptr [[P]])
486+ ; USE_ASSUME-NEXT: [[V1:%.*]] = load i32, ptr [[P]], align 4
487+ ; USE_ASSUME-NEXT: [[TMP2:%.*]] = bitcast i32 [[V1]] to float
488+ ; USE_ASSUME-NEXT: call void @clobber()
489+ ; USE_ASSUME-NEXT: call void @llvm.assume(i1 true) [ "dereferenceable"(ptr [[P]], i64 4), "nonnull"(ptr [[P]]), "align"(ptr [[P]], i64 4) ]
490+ ; USE_ASSUME-NEXT: ret i32 0
484491;
485492 call ptr @llvm.invariant.start.p0 (i64 4 , ptr %p )
486493 %v1 = load i32 , ptr %p
@@ -571,13 +578,13 @@ define i32 @test_false_negative_scope(ptr %p) {
571578define i32 @test_invariant_load_scope (ptr %p ) {
572579; NO_ASSUME-LABEL: define {{[^@]+}}@test_invariant_load_scope
573580; NO_ASSUME-SAME: (ptr [[P:%.*]]) {
574- ; NO_ASSUME-NEXT: [[V1:%.*]] = load i32, ptr [[P]], align 4, !invariant.load !4
581+ ; NO_ASSUME-NEXT: [[V1:%.*]] = load i32, ptr [[P]], align 4, !invariant.load [[META4:![0-9]+]]
575582; NO_ASSUME-NEXT: call void @clobber()
576583; NO_ASSUME-NEXT: ret i32 0
577584;
578585; USE_ASSUME-LABEL: define {{[^@]+}}@test_invariant_load_scope
579586; USE_ASSUME-SAME: (ptr [[P:%.*]]) {
580- ; USE_ASSUME-NEXT: [[V1:%.*]] = load i32, ptr [[P]], align 4, !invariant.load !4
587+ ; USE_ASSUME-NEXT: [[V1:%.*]] = load i32, ptr [[P]], align 4, !invariant.load [[META4:![0-9]+]]
581588; USE_ASSUME-NEXT: call void @clobber()
582589; USE_ASSUME-NEXT: call void @llvm.assume(i1 true) [ "dereferenceable"(ptr [[P]], i64 4), "nonnull"(ptr [[P]]), "align"(ptr [[P]], i64 4) ]
583590; USE_ASSUME-NEXT: ret i32 0
@@ -589,7 +596,6 @@ define i32 @test_invariant_load_scope(ptr %p) {
589596 ret i32 %sub
590597}
591598
592- ; USE_ASSUME: declare void @llvm.assume(i1 noundef)
593599
594600!0 = !{!1 , !1 , i64 0 }
595601!1 = !{!"float" , !2 , i64 0 }
0 commit comments