@@ -9,6 +9,9 @@ declare nonnull ptr @ret_nonnull()
9
9
declare void @llvm.assume (i1 )
10
10
11
11
; Return a pointer trivially nonnull (call return attribute)
12
+ ;.
13
+ ; CHECK: @G = internal global i64 1, align 8
14
+ ;.
12
15
define ptr @test1 () {
13
16
; CHECK-LABEL: define {{[^@]+}}@test1() {
14
17
; CHECK-NEXT: [[RET:%.*]] = call nonnull ptr @ret_nonnull()
@@ -34,10 +37,10 @@ define ptr @test2A(i1 %c, ptr %ret) {
34
37
; CHECK-SAME: (i1 noundef [[C:%.*]], ptr nofree nonnull readnone returned "no-capture-maybe-returned" [[RET:%.*]]) #[[ATTR2:[0-9]+]] {
35
38
; CHECK-NEXT: br i1 [[C]], label [[A:%.*]], label [[B:%.*]]
36
39
; CHECK: A:
37
- ; CHECK-NEXT: call void @llvm.assume(i1 noundef true) #[[ATTR15 :[0-9]+]] [ "nonnull"(ptr [[RET]]) ]
40
+ ; CHECK-NEXT: call void @llvm.assume(i1 noundef true) #[[ATTR16 :[0-9]+]] [ "nonnull"(ptr [[RET]]) ]
38
41
; CHECK-NEXT: ret ptr [[RET]]
39
42
; CHECK: B:
40
- ; CHECK-NEXT: call void @llvm.assume(i1 noundef true) #[[ATTR15 ]] [ "nonnull"(ptr [[RET]]) ]
43
+ ; CHECK-NEXT: call void @llvm.assume(i1 noundef true) #[[ATTR16 ]] [ "nonnull"(ptr [[RET]]) ]
41
44
; CHECK-NEXT: ret ptr [[RET]]
42
45
;
43
46
br i1 %c , label %A , label %B
@@ -55,10 +58,10 @@ define ptr @test2B(i1 %c, ptr %ret) {
55
58
; CHECK-SAME: (i1 noundef [[C:%.*]], ptr nofree nonnull readnone returned dereferenceable(4) "no-capture-maybe-returned" [[RET:%.*]]) #[[ATTR2]] {
56
59
; CHECK-NEXT: br i1 [[C]], label [[A:%.*]], label [[B:%.*]]
57
60
; CHECK: A:
58
- ; CHECK-NEXT: call void @llvm.assume(i1 noundef true) #[[ATTR15 ]] [ "dereferenceable"(ptr [[RET]], i32 4) ]
61
+ ; CHECK-NEXT: call void @llvm.assume(i1 noundef true) #[[ATTR16 ]] [ "dereferenceable"(ptr [[RET]], i32 4) ]
59
62
; CHECK-NEXT: ret ptr [[RET]]
60
63
; CHECK: B:
61
- ; CHECK-NEXT: call void @llvm.assume(i1 noundef true) #[[ATTR15 ]] [ "dereferenceable"(ptr [[RET]], i32 4) ]
64
+ ; CHECK-NEXT: call void @llvm.assume(i1 noundef true) #[[ATTR16 ]] [ "dereferenceable"(ptr [[RET]], i32 4) ]
62
65
; CHECK-NEXT: ret ptr [[RET]]
63
66
;
64
67
br i1 %c , label %A , label %B
@@ -274,7 +277,7 @@ define ptr @test10(ptr %a, i64 %n) {
274
277
; CHECK-LABEL: define {{[^@]+}}@test10
275
278
; CHECK-SAME: (ptr nofree readnone "no-capture-maybe-returned" [[A:%.*]], i64 [[N:%.*]]) #[[ATTR2]] {
276
279
; CHECK-NEXT: [[CMP:%.*]] = icmp ne i64 [[N]], 0
277
- ; CHECK-NEXT: call void @llvm.assume(i1 noundef [[CMP]]) #[[ATTR15 ]]
280
+ ; CHECK-NEXT: call void @llvm.assume(i1 noundef [[CMP]]) #[[ATTR16 ]]
278
281
; CHECK-NEXT: [[B:%.*]] = getelementptr inbounds i8, ptr [[A]], i64 [[N]]
279
282
; CHECK-NEXT: ret ptr [[B]]
280
283
;
@@ -402,11 +405,11 @@ define internal ptr @f1(ptr %arg) {
402
405
; TUNIT-NEXT: br i1 [[TMP3]], label [[BB6:%.*]], label [[BB4:%.*]]
403
406
; TUNIT: bb4:
404
407
; TUNIT-NEXT: [[TMP5:%.*]] = getelementptr inbounds i32, ptr [[ARG]], i64 1
405
- ; TUNIT-NEXT: [[TMP5B:%.*]] = tail call ptr @f3(ptr nofree nonnull readonly [[TMP5]]) #[[ATTR16 :[0-9]+]]
408
+ ; TUNIT-NEXT: [[TMP5B:%.*]] = tail call ptr @f3(ptr nofree nonnull readonly [[TMP5]]) #[[ATTR17 :[0-9]+]]
406
409
; TUNIT-NEXT: [[TMP5C:%.*]] = getelementptr inbounds i32, ptr [[TMP5B]], i64 -1
407
410
; TUNIT-NEXT: br label [[BB9]]
408
411
; TUNIT: bb6:
409
- ; TUNIT-NEXT: [[TMP7:%.*]] = tail call ptr @f2(ptr nofree nonnull readonly align 4 dereferenceable(4) [[ARG]]) #[[ATTR16 ]]
412
+ ; TUNIT-NEXT: [[TMP7:%.*]] = tail call ptr @f2(ptr nofree nonnull readonly align 4 dereferenceable(4) [[ARG]]) #[[ATTR17 ]]
410
413
; TUNIT-NEXT: ret ptr [[TMP7]]
411
414
; TUNIT: bb9:
412
415
; TUNIT-NEXT: [[TMP10:%.*]] = phi ptr [ [[TMP5C]], [[BB4]] ], [ inttoptr (i64 4 to ptr), [[BB:%.*]] ]
@@ -424,11 +427,11 @@ define internal ptr @f1(ptr %arg) {
424
427
; CGSCC-NEXT: br i1 [[TMP3]], label [[BB6:%.*]], label [[BB4:%.*]]
425
428
; CGSCC: bb4:
426
429
; CGSCC-NEXT: [[TMP5:%.*]] = getelementptr inbounds i32, ptr [[ARG]], i64 1
427
- ; CGSCC-NEXT: [[TMP5B:%.*]] = tail call ptr @f3(ptr nofree nonnull readonly [[TMP5]]) #[[ATTR16 :[0-9]+]]
430
+ ; CGSCC-NEXT: [[TMP5B:%.*]] = tail call ptr @f3(ptr nofree nonnull readonly [[TMP5]]) #[[ATTR17 :[0-9]+]]
428
431
; CGSCC-NEXT: [[TMP5C:%.*]] = getelementptr inbounds i32, ptr [[TMP5B]], i64 -1
429
432
; CGSCC-NEXT: br label [[BB9]]
430
433
; CGSCC: bb6:
431
- ; CGSCC-NEXT: [[TMP7:%.*]] = tail call ptr @f2(ptr nofree nonnull readonly align 4 dereferenceable(4) [[ARG]]) #[[ATTR16 ]]
434
+ ; CGSCC-NEXT: [[TMP7:%.*]] = tail call ptr @f2(ptr nofree nonnull readonly align 4 dereferenceable(4) [[ARG]]) #[[ATTR17 ]]
432
435
; CGSCC-NEXT: ret ptr [[TMP7]]
433
436
; CGSCC: bb9:
434
437
; CGSCC-NEXT: [[TMP10:%.*]] = phi ptr [ [[TMP5C]], [[BB4]] ], [ inttoptr (i64 4 to ptr), [[BB:%.*]] ]
@@ -464,14 +467,14 @@ define internal ptr @f2(ptr %arg) {
464
467
; TUNIT-LABEL: define {{[^@]+}}@f2
465
468
; TUNIT-SAME: (ptr nofree nonnull readonly align 4 dereferenceable(4) [[ARG:%.*]]) #[[ATTR6]] {
466
469
; TUNIT-NEXT: bb:
467
- ; TUNIT-NEXT: [[TMP:%.*]] = tail call ptr @f1(ptr nofree readonly [[ARG]]) #[[ATTR16 ]]
470
+ ; TUNIT-NEXT: [[TMP:%.*]] = tail call ptr @f1(ptr nofree readonly [[ARG]]) #[[ATTR17 ]]
468
471
; TUNIT-NEXT: ret ptr [[TMP]]
469
472
;
470
473
; CGSCC: Function Attrs: nofree nosync nounwind memory(argmem: read)
471
474
; CGSCC-LABEL: define {{[^@]+}}@f2
472
475
; CGSCC-SAME: (ptr nofree nonnull readonly align 4 dereferenceable(4) [[ARG:%.*]]) #[[ATTR5]] {
473
476
; CGSCC-NEXT: bb:
474
- ; CGSCC-NEXT: [[TMP:%.*]] = tail call ptr @f1(ptr nofree readonly [[ARG]]) #[[ATTR16 ]]
477
+ ; CGSCC-NEXT: [[TMP:%.*]] = tail call ptr @f1(ptr nofree readonly [[ARG]]) #[[ATTR17 ]]
475
478
; CGSCC-NEXT: ret ptr [[TMP]]
476
479
;
477
480
bb:
@@ -485,14 +488,14 @@ define dso_local noalias ptr @f3(ptr %arg) {
485
488
; TUNIT-LABEL: define {{[^@]+}}@f3
486
489
; TUNIT-SAME: (ptr nofree readonly [[ARG:%.*]]) #[[ATTR6]] {
487
490
; TUNIT-NEXT: bb:
488
- ; TUNIT-NEXT: [[TMP:%.*]] = call ptr @f1(ptr nofree readonly [[ARG]]) #[[ATTR16 ]]
491
+ ; TUNIT-NEXT: [[TMP:%.*]] = call ptr @f1(ptr nofree readonly [[ARG]]) #[[ATTR17 ]]
489
492
; TUNIT-NEXT: ret ptr [[TMP]]
490
493
;
491
494
; CGSCC: Function Attrs: nofree nosync nounwind memory(argmem: read)
492
495
; CGSCC-LABEL: define {{[^@]+}}@f3
493
496
; CGSCC-SAME: (ptr nofree readonly [[ARG:%.*]]) #[[ATTR5]] {
494
497
; CGSCC-NEXT: bb:
495
- ; CGSCC-NEXT: [[TMP:%.*]] = call ptr @f1(ptr nofree readonly [[ARG]]) #[[ATTR16 ]]
498
+ ; CGSCC-NEXT: [[TMP:%.*]] = call ptr @f1(ptr nofree readonly [[ARG]]) #[[ATTR17 ]]
496
499
; CGSCC-NEXT: ret ptr [[TMP]]
497
500
;
498
501
bb:
@@ -856,7 +859,7 @@ define i8 @parent6(ptr %a, ptr %b) {
856
859
define i8 @parent7 (ptr %a ) {
857
860
; CHECK-LABEL: define {{[^@]+}}@parent7
858
861
; CHECK-SAME: (ptr nonnull [[A:%.*]]) {
859
- ; CHECK-NEXT: [[RET:%.*]] = call i8 @use1safecall(ptr nonnull readonly [[A]]) #[[ATTR17 :[0-9]+]]
862
+ ; CHECK-NEXT: [[RET:%.*]] = call i8 @use1safecall(ptr nonnull readonly [[A]]) #[[ATTR18 :[0-9]+]]
860
863
; CHECK-NEXT: call void @use1nonnull(ptr nonnull [[A]])
861
864
; CHECK-NEXT: ret i8 [[RET]]
862
865
;
@@ -981,7 +984,7 @@ define ptr @g1() {
981
984
; CGSCC: Function Attrs: mustprogress nofree nosync nounwind willreturn memory(none)
982
985
; CGSCC-LABEL: define {{[^@]+}}@g1
983
986
; CGSCC-SAME: () #[[ATTR10:[0-9]+]] {
984
- ; CGSCC-NEXT: [[C:%.*]] = call noundef nonnull align 4 ptr @g2() #[[ATTR18 :[0-9]+]]
987
+ ; CGSCC-NEXT: [[C:%.*]] = call noundef nonnull align 4 ptr @g2() #[[ATTR19 :[0-9]+]]
985
988
; CGSCC-NEXT: ret ptr [[C]]
986
989
;
987
990
%c = call ptr @g2 ()
@@ -1392,7 +1395,7 @@ define ptr @mybasename(ptr nofree readonly %str) {
1392
1395
; TUNIT: Function Attrs: mustprogress nofree nosync nounwind willreturn memory(read)
1393
1396
; TUNIT-LABEL: define {{[^@]+}}@mybasename
1394
1397
; TUNIT-SAME: (ptr nofree readonly [[STR:%.*]]) #[[ATTR14:[0-9]+]] {
1395
- ; TUNIT-NEXT: [[CALL:%.*]] = call ptr @strrchr(ptr nofree readonly [[STR]], i32 noundef 47) #[[ATTR18 :[0-9]+]]
1398
+ ; TUNIT-NEXT: [[CALL:%.*]] = call ptr @strrchr(ptr nofree readonly [[STR]], i32 noundef 47) #[[ATTR19 :[0-9]+]]
1396
1399
; TUNIT-NEXT: [[TOBOOL:%.*]] = icmp ne ptr [[CALL]], null
1397
1400
; TUNIT-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds i8, ptr [[CALL]], i64 1
1398
1401
; TUNIT-NEXT: [[COND:%.*]] = select i1 [[TOBOOL]], ptr [[ADD_PTR]], ptr [[STR]]
@@ -1401,7 +1404,7 @@ define ptr @mybasename(ptr nofree readonly %str) {
1401
1404
; CGSCC: Function Attrs: mustprogress nofree nosync nounwind willreturn memory(read)
1402
1405
; CGSCC-LABEL: define {{[^@]+}}@mybasename
1403
1406
; CGSCC-SAME: (ptr nofree readonly [[STR:%.*]]) #[[ATTR14:[0-9]+]] {
1404
- ; CGSCC-NEXT: [[CALL:%.*]] = call ptr @strrchr(ptr nofree readonly [[STR]], i32 noundef 47) #[[ATTR19 :[0-9]+]]
1407
+ ; CGSCC-NEXT: [[CALL:%.*]] = call ptr @strrchr(ptr nofree readonly [[STR]], i32 noundef 47) #[[ATTR20 :[0-9]+]]
1405
1408
; CGSCC-NEXT: [[TOBOOL:%.*]] = icmp ne ptr [[CALL]], null
1406
1409
; CGSCC-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds i8, ptr [[CALL]], i64 1
1407
1410
; CGSCC-NEXT: [[COND:%.*]] = select i1 [[TOBOOL]], ptr [[ADD_PTR]], ptr [[STR]]
@@ -1424,14 +1427,14 @@ define void @nonnull_assume_pos(ptr %arg) {
1424
1427
;
1425
1428
; TUNIT-LABEL: define {{[^@]+}}@nonnull_assume_pos
1426
1429
; TUNIT-SAME: (ptr nocapture nofree nonnull readnone [[ARG:%.*]]) {
1427
- ; TUNIT-NEXT: call void @llvm.assume(i1 noundef true) #[[ATTR15 ]] [ "nonnull"(ptr [[ARG]]) ]
1430
+ ; TUNIT-NEXT: call void @llvm.assume(i1 noundef true) #[[ATTR16 ]] [ "nonnull"(ptr [[ARG]]) ]
1428
1431
; TUNIT-NEXT: call void @use_i8_ptr(ptr noalias nocapture nofree nonnull readnone [[ARG]]) #[[ATTR5]]
1429
1432
; TUNIT-NEXT: [[TMP1:%.*]] = call ptr @unknown()
1430
1433
; TUNIT-NEXT: ret void
1431
1434
;
1432
1435
; CGSCC-LABEL: define {{[^@]+}}@nonnull_assume_pos
1433
1436
; CGSCC-SAME: (ptr nocapture nofree nonnull readnone [[ARG:%.*]]) {
1434
- ; CGSCC-NEXT: call void @llvm.assume(i1 noundef true) #[[ATTR15 ]] [ "nonnull"(ptr [[ARG]]) ]
1437
+ ; CGSCC-NEXT: call void @llvm.assume(i1 noundef true) #[[ATTR16 ]] [ "nonnull"(ptr [[ARG]]) ]
1435
1438
; CGSCC-NEXT: call void @use_i8_ptr(ptr noalias nocapture nofree nonnull readnone [[ARG]]) #[[ATTR4]]
1436
1439
; CGSCC-NEXT: [[TMP1:%.*]] = call ptr @unknown()
1437
1440
; CGSCC-NEXT: ret void
@@ -1553,14 +1556,14 @@ define void @phi_caller(ptr %p) {
1553
1556
; TUNIT: Function Attrs: nounwind
1554
1557
; TUNIT-LABEL: define {{[^@]+}}@phi_caller
1555
1558
; TUNIT-SAME: (ptr nofree [[P:%.*]]) #[[ATTR5]] {
1556
- ; TUNIT-NEXT: [[C:%.*]] = call nonnull ptr @phi(ptr noalias nofree readnone [[P]]) #[[ATTR19 :[0-9]+]]
1559
+ ; TUNIT-NEXT: [[C:%.*]] = call nonnull ptr @phi(ptr noalias nofree readnone [[P]]) #[[ATTR20 :[0-9]+]]
1557
1560
; TUNIT-NEXT: call void @use_i8_ptr(ptr noalias nocapture nofree nonnull readnone [[C]]) #[[ATTR5]]
1558
1561
; TUNIT-NEXT: ret void
1559
1562
;
1560
1563
; CGSCC: Function Attrs: nounwind
1561
1564
; CGSCC-LABEL: define {{[^@]+}}@phi_caller
1562
1565
; CGSCC-SAME: (ptr nofree [[P:%.*]]) #[[ATTR4]] {
1563
- ; CGSCC-NEXT: [[C:%.*]] = call nonnull ptr @phi(ptr noalias nofree readnone [[P]]) #[[ATTR20 :[0-9]+]]
1566
+ ; CGSCC-NEXT: [[C:%.*]] = call nonnull ptr @phi(ptr noalias nofree readnone [[P]]) #[[ATTR21 :[0-9]+]]
1564
1567
; CGSCC-NEXT: call void @use_i8_ptr(ptr noalias nocapture nofree nonnull readnone [[C]]) #[[ATTR4]]
1565
1568
; CGSCC-NEXT: ret void
1566
1569
;
@@ -1593,14 +1596,14 @@ define void @multi_ret_caller(ptr %p) {
1593
1596
; TUNIT: Function Attrs: nounwind
1594
1597
; TUNIT-LABEL: define {{[^@]+}}@multi_ret_caller
1595
1598
; TUNIT-SAME: (ptr nofree [[P:%.*]]) #[[ATTR5]] {
1596
- ; TUNIT-NEXT: [[C:%.*]] = call nonnull ptr @multi_ret(ptr noalias nofree readnone [[P]]) #[[ATTR19 ]]
1599
+ ; TUNIT-NEXT: [[C:%.*]] = call nonnull ptr @multi_ret(ptr noalias nofree readnone [[P]]) #[[ATTR20 ]]
1597
1600
; TUNIT-NEXT: call void @use_i8_ptr(ptr noalias nocapture nofree nonnull readnone [[C]]) #[[ATTR5]]
1598
1601
; TUNIT-NEXT: ret void
1599
1602
;
1600
1603
; CGSCC: Function Attrs: nounwind
1601
1604
; CGSCC-LABEL: define {{[^@]+}}@multi_ret_caller
1602
1605
; CGSCC-SAME: (ptr nofree [[P:%.*]]) #[[ATTR4]] {
1603
- ; CGSCC-NEXT: [[C:%.*]] = call nonnull ptr @multi_ret(ptr noalias nofree readnone [[P]]) #[[ATTR20 ]]
1606
+ ; CGSCC-NEXT: [[C:%.*]] = call nonnull ptr @multi_ret(ptr noalias nofree readnone [[P]]) #[[ATTR21 ]]
1604
1607
; CGSCC-NEXT: call void @use_i8_ptr(ptr noalias nocapture nofree nonnull readnone [[C]]) #[[ATTR4]]
1605
1608
; CGSCC-NEXT: ret void
1606
1609
;
@@ -1609,6 +1612,33 @@ define void @multi_ret_caller(ptr %p) {
1609
1612
ret void
1610
1613
}
1611
1614
1615
+ ; From https://github.com/llvm/llvm-project/pull/85810
1616
+ @G = internal global i64 1 , align 8
1617
+ define dso_local ptr @update_global_in_alive_bb () {
1618
+ ; CHECK: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn
1619
+ ; CHECK-LABEL: define {{[^@]+}}@update_global_in_alive_bb
1620
+ ; CHECK-SAME: () #[[ATTR15:[0-9]+]] {
1621
+ ; CHECK-NEXT: entry:
1622
+ ; CHECK-NEXT: [[TMP0:%.*]] = load i64, ptr @G, align 8
1623
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ne i64 [[TMP0]], 0
1624
+ ; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
1625
+ ; CHECK: if.then:
1626
+ ; CHECK-NEXT: store i64 0, ptr @G, align 8
1627
+ ; CHECK-NEXT: ret ptr inttoptr (i64 5 to ptr)
1628
+ ; CHECK: if.else:
1629
+ ; CHECK-NEXT: ret ptr null
1630
+ ;
1631
+ entry:
1632
+ %0 = load i64 , ptr @G , align 8
1633
+ %cmp = icmp ne i64 %0 , 0
1634
+ br i1 %cmp , label %if.then , label %if.else
1635
+ if.then:
1636
+ store i64 0 , ptr @G , align 8
1637
+ ret ptr inttoptr (i64 5 to ptr )
1638
+ if.else:
1639
+ ret ptr null
1640
+ }
1641
+
1612
1642
attributes #0 = { null_pointer_is_valid }
1613
1643
attributes #1 = { nounwind willreturn}
1614
1644
;.
@@ -1627,11 +1657,12 @@ attributes #1 = { nounwind willreturn}
1627
1657
; TUNIT: attributes #[[ATTR12]] = { noinline optnone }
1628
1658
; TUNIT: attributes #[[ATTR13:[0-9]+]] = { nofree nounwind willreturn memory(read) }
1629
1659
; TUNIT: attributes #[[ATTR14]] = { mustprogress nofree nosync nounwind willreturn memory(read) }
1630
- ; TUNIT: attributes #[[ATTR15]] = { nofree willreturn memory(write) }
1631
- ; TUNIT: attributes #[[ATTR16]] = { nofree nosync nounwind memory(read) }
1632
- ; TUNIT: attributes #[[ATTR17]] = { nosync willreturn memory(read) }
1633
- ; TUNIT: attributes #[[ATTR18]] = { nofree nosync willreturn memory(read) }
1634
- ; TUNIT: attributes #[[ATTR19]] = { nofree nosync nounwind willreturn memory(none) }
1660
+ ; TUNIT: attributes #[[ATTR15]] = { mustprogress nofree norecurse nosync nounwind willreturn }
1661
+ ; TUNIT: attributes #[[ATTR16]] = { nofree willreturn memory(write) }
1662
+ ; TUNIT: attributes #[[ATTR17]] = { nofree nosync nounwind memory(read) }
1663
+ ; TUNIT: attributes #[[ATTR18]] = { nosync willreturn memory(read) }
1664
+ ; TUNIT: attributes #[[ATTR19]] = { nofree nosync willreturn memory(read) }
1665
+ ; TUNIT: attributes #[[ATTR20]] = { nofree nosync nounwind willreturn memory(none) }
1635
1666
;.
1636
1667
; CGSCC: attributes #[[ATTR0:[0-9]+]] = { nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: write) }
1637
1668
; CGSCC: attributes #[[ATTR1]] = { mustprogress nofree norecurse nosync nounwind willreturn memory(none) }
@@ -1648,10 +1679,11 @@ attributes #1 = { nounwind willreturn}
1648
1679
; CGSCC: attributes #[[ATTR12]] = { noinline optnone }
1649
1680
; CGSCC: attributes #[[ATTR13:[0-9]+]] = { nofree nounwind willreturn memory(read) }
1650
1681
; CGSCC: attributes #[[ATTR14]] = { mustprogress nofree nosync nounwind willreturn memory(read) }
1651
- ; CGSCC: attributes #[[ATTR15]] = { nofree willreturn memory(write) }
1652
- ; CGSCC: attributes #[[ATTR16]] = { nofree nosync nounwind memory(read) }
1653
- ; CGSCC: attributes #[[ATTR17]] = { nosync willreturn memory(read) }
1654
- ; CGSCC: attributes #[[ATTR18]] = { nofree nosync willreturn }
1655
- ; CGSCC: attributes #[[ATTR19]] = { nofree nosync willreturn memory(read) }
1656
- ; CGSCC: attributes #[[ATTR20]] = { nofree willreturn }
1682
+ ; CGSCC: attributes #[[ATTR15]] = { mustprogress nofree norecurse nosync nounwind willreturn }
1683
+ ; CGSCC: attributes #[[ATTR16]] = { nofree willreturn memory(write) }
1684
+ ; CGSCC: attributes #[[ATTR17]] = { nofree nosync nounwind memory(read) }
1685
+ ; CGSCC: attributes #[[ATTR18]] = { nosync willreturn memory(read) }
1686
+ ; CGSCC: attributes #[[ATTR19]] = { nofree nosync willreturn }
1687
+ ; CGSCC: attributes #[[ATTR20]] = { nofree nosync willreturn memory(read) }
1688
+ ; CGSCC: attributes #[[ATTR21]] = { nofree willreturn }
1657
1689
;.
0 commit comments