@@ -79,9 +79,10 @@ define i8* @test5(i1 %c) {
79
79
}
80
80
81
81
; Local analysis, but going through a self recursive phi
82
- define i8* @test6 () {
82
+ ; ATTRIBUTOR: Function Attrs: noreturn
83
+ ; ATTRIBUTOR: define noalias nonnull align 536870912 dereferenceable(4294967295) i8* @test6a()
84
+ define i8* @test6a () {
83
85
entry:
84
- ; BOTH: define nonnull i8* @test6
85
86
%ret = call i8* @ret_nonnull ()
86
87
br label %loop
87
88
loop:
91
92
ret i8* %phi
92
93
}
93
94
95
+ ; ATTRIBUTOR: define nonnull i8* @test6b(i1 %c)
96
+ define i8* @test6b (i1 %c ) {
97
+ entry:
98
+ %ret = call i8* @ret_nonnull ()
99
+ br label %loop
100
+ loop:
101
+ %phi = phi i8* [%ret , %entry ], [%phi , %loop ]
102
+ br i1 %c , label %loop , label %exit
103
+ exit:
104
+ ret i8* %phi
105
+ }
106
+
94
107
; BOTH: define i8* @test7
95
108
define i8* @test7 (i8* %a ) {
96
109
%b = getelementptr inbounds i8 , i8* %a , i64 0
@@ -590,7 +603,7 @@ declare void @h(i32*) willreturn nounwind
590
603
declare i32 @g (i32* ) willreturn nounwind
591
604
define i32 @nonnull_exec_ctx_1 (i32* %a , i32 %b ) {
592
605
; FNATTR-LABEL: define {{[^@]+}}@nonnull_exec_ctx_1
593
- ; FNATTR-SAME: (i32* [[A:%.*]], i32 [[B:%.*]]) #3
606
+ ; FNATTR-SAME: (i32* [[A:%.*]], i32 [[B:%.*]])
594
607
; FNATTR-NEXT: en:
595
608
; FNATTR-NEXT: [[TMP3:%.*]] = icmp eq i32 [[B:%.*]], 0
596
609
; FNATTR-NEXT: br i1 [[TMP3]], label [[EX:%.*]], label [[HD:%.*]]
@@ -605,7 +618,7 @@ define i32 @nonnull_exec_ctx_1(i32* %a, i32 %b) {
605
618
; FNATTR-NEXT: br i1 [[TMP9]], label [[EX]], label [[HD]]
606
619
;
607
620
; ATTRIBUTOR-LABEL: define {{[^@]+}}@nonnull_exec_ctx_1
608
- ; ATTRIBUTOR-SAME: (i32* [[A:%.*]], i32 [[B:%.*]]) #5
621
+ ; ATTRIBUTOR-SAME: (i32* [[A:%.*]], i32 [[B:%.*]])
609
622
; ATTRIBUTOR-NEXT: en:
610
623
; ATTRIBUTOR-NEXT: [[TMP3:%.*]] = icmp eq i32 [[B:%.*]], 0
611
624
; ATTRIBUTOR-NEXT: br i1 [[TMP3]], label [[EX:%.*]], label [[HD:%.*]]
637
650
638
651
define i32 @nonnull_exec_ctx_1b (i32* %a , i32 %b ) {
639
652
; FNATTR-LABEL: define {{[^@]+}}@nonnull_exec_ctx_1b
640
- ; FNATTR-SAME: (i32* [[A:%.*]], i32 [[B:%.*]]) #3
653
+ ; FNATTR-SAME: (i32* [[A:%.*]], i32 [[B:%.*]])
641
654
; FNATTR-NEXT: en:
642
655
; FNATTR-NEXT: [[TMP3:%.*]] = icmp eq i32 [[B:%.*]], 0
643
656
; FNATTR-NEXT: br i1 [[TMP3]], label [[EX:%.*]], label [[HD:%.*]]
@@ -654,7 +667,7 @@ define i32 @nonnull_exec_ctx_1b(i32* %a, i32 %b) {
654
667
; FNATTR-NEXT: br i1 [[TMP9]], label [[EX]], label [[HD]]
655
668
;
656
669
; ATTRIBUTOR-LABEL: define {{[^@]+}}@nonnull_exec_ctx_1b
657
- ; ATTRIBUTOR-SAME: (i32* [[A:%.*]], i32 [[B:%.*]]) #5
670
+ ; ATTRIBUTOR-SAME: (i32* [[A:%.*]], i32 [[B:%.*]])
658
671
; ATTRIBUTOR-NEXT: en:
659
672
; ATTRIBUTOR-NEXT: [[TMP3:%.*]] = icmp eq i32 [[B:%.*]], 0
660
673
; ATTRIBUTOR-NEXT: br i1 [[TMP3]], label [[EX:%.*]], label [[HD:%.*]]
691
704
692
705
define i32 @nonnull_exec_ctx_2 (i32* %a , i32 %b ) willreturn nounwind {
693
706
; FNATTR-LABEL: define {{[^@]+}}@nonnull_exec_ctx_2
694
- ; FNATTR-SAME: (i32* [[A:%.*]], i32 [[B:%.*]]) #2
707
+ ; FNATTR-SAME: (i32* [[A:%.*]], i32 [[B:%.*]])
695
708
; FNATTR-NEXT: en:
696
709
; FNATTR-NEXT: [[TMP3:%.*]] = icmp eq i32 [[B:%.*]], 0
697
710
; FNATTR-NEXT: br i1 [[TMP3]], label [[EX:%.*]], label [[HD:%.*]]
@@ -706,7 +719,7 @@ define i32 @nonnull_exec_ctx_2(i32* %a, i32 %b) willreturn nounwind {
706
719
; FNATTR-NEXT: br i1 [[TMP9]], label [[EX]], label [[HD]]
707
720
;
708
721
; ATTRIBUTOR-LABEL: define {{[^@]+}}@nonnull_exec_ctx_2
709
- ; ATTRIBUTOR-SAME: (i32* [[A:%.*]], i32 [[B:%.*]]) #3
722
+ ; ATTRIBUTOR-SAME: (i32* [[A:%.*]], i32 [[B:%.*]])
710
723
; ATTRIBUTOR-NEXT: en:
711
724
; ATTRIBUTOR-NEXT: [[TMP3:%.*]] = icmp eq i32 [[B:%.*]], 0
712
725
; ATTRIBUTOR-NEXT: br i1 [[TMP3]], label [[EX:%.*]], label [[HD:%.*]]
738
751
739
752
define i32 @nonnull_exec_ctx_2b (i32* %a , i32 %b ) willreturn nounwind {
740
753
; FNATTR-LABEL: define {{[^@]+}}@nonnull_exec_ctx_2b
741
- ; FNATTR-SAME: (i32* [[A:%.*]], i32 [[B:%.*]]) #2
754
+ ; FNATTR-SAME: (i32* [[A:%.*]], i32 [[B:%.*]])
742
755
; FNATTR-NEXT: en:
743
756
; FNATTR-NEXT: [[TMP3:%.*]] = icmp eq i32 [[B:%.*]], 0
744
757
; FNATTR-NEXT: br i1 [[TMP3]], label [[EX:%.*]], label [[HD:%.*]]
@@ -755,7 +768,7 @@ define i32 @nonnull_exec_ctx_2b(i32* %a, i32 %b) willreturn nounwind {
755
768
; FNATTR-NEXT: br i1 [[TMP9]], label [[EX]], label [[HD]]
756
769
;
757
770
; ATTRIBUTOR-LABEL: define {{[^@]+}}@nonnull_exec_ctx_2b
758
- ; ATTRIBUTOR-SAME: (i32* [[A:%.*]], i32 [[B:%.*]]) #3
771
+ ; ATTRIBUTOR-SAME: (i32* [[A:%.*]], i32 [[B:%.*]])
759
772
; ATTRIBUTOR-NEXT: en:
760
773
; ATTRIBUTOR-NEXT: [[TMP3:%.*]] = icmp eq i32 [[B:%.*]], 0
761
774
; ATTRIBUTOR-NEXT: br i1 [[TMP3]], label [[EX:%.*]], label [[HD:%.*]]
0 commit comments