@@ -149,7 +149,7 @@ define void @test6a(i8* %foo) minsize {
149
149
; CHECK-NEXT: [[TOBOOL:%.*]] = icmp eq i8* [[FOO:%.*]], null
150
150
; CHECK-NEXT: br i1 [[TOBOOL]], label [[IF_END:%.*]], label [[IF_THEN:%.*]]
151
151
; CHECK: if.then:
152
- ; CHECK-NEXT: tail call void @_ZdlPv(i8* [[FOO]]) #[[ATTR8 :[0-9]+]]
152
+ ; CHECK-NEXT: tail call void @_ZdlPv(i8* [[FOO]]) #[[ATTR10 :[0-9]+]]
153
153
; CHECK-NEXT: br label [[IF_END]]
154
154
; CHECK: if.end:
155
155
; CHECK-NEXT: ret void
@@ -352,7 +352,7 @@ define void @test10() {
352
352
353
353
define void @test11 () {
354
354
; CHECK-LABEL: @test11(
355
- ; CHECK-NEXT: [[CALL:%.*]] = call dereferenceable(8) i8* @_Znwm(i64 8) #[[ATTR8 ]]
355
+ ; CHECK-NEXT: [[CALL:%.*]] = call dereferenceable(8) i8* @_Znwm(i64 8) #[[ATTR10 ]]
356
356
; CHECK-NEXT: call void @_ZdlPv(i8* nonnull [[CALL]])
357
357
; CHECK-NEXT: ret void
358
358
;
@@ -418,7 +418,7 @@ define void @test14(i8* %foo) nofree {
418
418
; TODO: free call marked no-free -> %foo must be null
419
419
define void @test15 (i8* %foo ) {
420
420
; CHECK-LABEL: @test15(
421
- ; CHECK-NEXT: call void @free(i8* [[FOO:%.*]]) #[[ATTR6 :[0-9]+]]
421
+ ; CHECK-NEXT: call void @free(i8* [[FOO:%.*]]) #[[ATTR7 :[0-9]+]]
422
422
; CHECK-NEXT: ret void
423
423
;
424
424
call void @free (i8* %foo ) nofree
@@ -434,3 +434,23 @@ define void @test16(i8* nonnull nofree %foo) {
434
434
call void @free (i8* %foo )
435
435
ret void
436
436
}
437
+
438
+ declare i8* @llvm.launder.invariant.group (i8* )
439
+ declare i8* @llvm.strip.invariant.group (i8* )
440
+
441
+ define void @test17 () {
442
+ ; CHECK-LABEL: @test17(
443
+ ; CHECK-NEXT: [[NW1:%.*]] = call dereferenceable(32) i8* @_Znwm(i64 32) #[[ATTR10]]
444
+ ; CHECK-NEXT: [[NW2:%.*]] = call i8* @llvm.launder.invariant.group.p0i8(i8* nonnull [[NW1]])
445
+ ; CHECK-NEXT: [[TMP1:%.*]] = call i8* @llvm.strip.invariant.group.p0i8(i8* nonnull [[NW1]])
446
+ ; CHECK-NEXT: store i8 1, i8* [[TMP1]], align 1
447
+ ; CHECK-NEXT: call void @_ZdlPv(i8* [[NW2]]) #[[ATTR10]]
448
+ ; CHECK-NEXT: ret void
449
+ ;
450
+ %nw1 = call i8* @_Znwm (i64 32 ) builtin
451
+ %nw2 = call i8* @llvm.launder.invariant.group (i8* %nw1 )
452
+ %nw3 = call i8* @llvm.strip.invariant.group (i8* %nw2 )
453
+ store i8 1 , i8* %nw3
454
+ call void @_ZdlPv (i8* %nw2 ) builtin
455
+ ret void
456
+ }
0 commit comments