@@ -12,10 +12,10 @@ declare void @p2_no_dead_on_unwind_but_nounwind(ptr nocapture noundef initialize
1212; Function Attrs: mustprogress nounwind uwtable
1313define i16 @p1_write_only_caller () {
1414; CHECK-LABEL: @p1_write_only_caller(
15- ; CHECK-NEXT: %ptr = alloca i16, align 2
16- ; CHECK-NEXT: call void @p1_write_only(ptr %ptr )
17- ; CHECK-NEXT: %l = load i16, ptr %ptr
18- ; CHECK-NEXT: ret i16 %l
15+ ; CHECK-NEXT: [[PTR:%.*]] = alloca i16, align 2
16+ ; CHECK-NEXT: call void @p1_write_only(ptr [[PTR]] )
17+ ; CHECK-NEXT: [[L:%.*]] = load i16, ptr [[PTR]], align 2
18+ ; CHECK-NEXT: ret i16 [[L]]
1919;
2020 %ptr = alloca i16
2121 store i16 0 , ptr %ptr
@@ -27,10 +27,10 @@ define i16 @p1_write_only_caller() {
2727; Function Attrs: mustprogress nounwind uwtable
2828define i16 @p1_write_then_read_caller () {
2929; CHECK-LABEL: @p1_write_then_read_caller(
30- ; CHECK-NEXT: %ptr = alloca i16, align 2
31- ; CHECK-NEXT: call void @p1_write_then_read(ptr %ptr )
32- ; CHECK-NEXT: %l = load i16, ptr %ptr
33- ; CHECK-NEXT: ret i16 %l
30+ ; CHECK-NEXT: [[PTR:%.*]] = alloca i16, align 2
31+ ; CHECK-NEXT: call void @p1_write_then_read(ptr [[PTR]] )
32+ ; CHECK-NEXT: [[L:%.*]] = load i16, ptr [[PTR]], align 2
33+ ; CHECK-NEXT: ret i16 [[L]]
3434;
3535 %ptr = alloca i16
3636 store i16 0 , ptr %ptr
@@ -42,12 +42,12 @@ define i16 @p1_write_then_read_caller() {
4242; Function Attrs: mustprogress nounwind uwtable
4343define i16 @p1_write_then_read_caller_with_clobber () {
4444; CHECK-LABEL: @p1_write_then_read_caller_with_clobber(
45- ; CHECK-NEXT: %ptr = alloca i16, align 2
46- ; CHECK-NEXT: store i16 0, ptr %ptr
47- ; CHECK-NEXT: call void @p1_clobber(ptr %ptr )
48- ; CHECK-NEXT: call void @p1_write_then_read(ptr %ptr )
49- ; CHECK-NEXT: %l = load i16, ptr %ptr
50- ; CHECK-NEXT: ret i16 %l
45+ ; CHECK-NEXT: [[PTR:%.*]] = alloca i16, align 2
46+ ; CHECK-NEXT: store i16 0, ptr [[PTR]], align 2
47+ ; CHECK-NEXT: call void @p1_clobber(ptr [[PTR]] )
48+ ; CHECK-NEXT: call void @p1_write_then_read(ptr [[PTR]] )
49+ ; CHECK-NEXT: [[L:%.*]] = load i16, ptr [[PTR]], align 2
50+ ; CHECK-NEXT: ret i16 [[L]]
5151;
5252 %ptr = alloca i16
5353 store i16 0 , ptr %ptr
@@ -58,13 +58,13 @@ define i16 @p1_write_then_read_caller_with_clobber() {
5858}
5959
6060; Function Attrs: mustprogress nounwind uwtable
61- define i16 @p2_same_range_nonalias_caller () {
62- ; CHECK-LABEL: @p2_same_range_nonalias_caller (
63- ; CHECK-NEXT: %ptr1 = alloca i16, align 2
64- ; CHECK-NEXT: %ptr2 = alloca i16, align 2
65- ; CHECK-NEXT: call void @p2_same_range(ptr %ptr1 , ptr %ptr2 )
66- ; CHECK-NEXT: %l = load i16, ptr %ptr1
67- ; CHECK-NEXT: ret i16 %l
61+ define i16 @p2_same_range_noalias_caller () {
62+ ; CHECK-LABEL: @p2_same_range_noalias_caller (
63+ ; CHECK-NEXT: [[PTR1:%.*]] = alloca i16, align 2
64+ ; CHECK-NEXT: [[PTR2:%.*]] = alloca i16, align 2
65+ ; CHECK-NEXT: call void @p2_same_range(ptr [[PTR1]] , ptr [[PTR2]] )
66+ ; CHECK-NEXT: [[L:%.*]] = load i16, ptr [[PTR1]], align 2
67+ ; CHECK-NEXT: ret i16 [[L]]
6868;
6969 %ptr1 = alloca i16
7070 %ptr2 = alloca i16
@@ -76,12 +76,12 @@ define i16 @p2_same_range_nonalias_caller() {
7676}
7777
7878; Function Attrs: mustprogress nounwind uwtable
79- define i16 @p2_same_range_alias_caller () {
80- ; CHECK-LABEL: @p2_same_range_alias_caller (
81- ; CHECK-NEXT: %ptr = alloca i16, align 2
82- ; CHECK-NEXT: call void @p2_same_range(ptr %ptr , ptr %ptr )
83- ; CHECK-NEXT: %l = load i16, ptr %ptr
84- ; CHECK-NEXT: ret i16 %l
79+ define i16 @p2_same_range_must_alias_caller () {
80+ ; CHECK-LABEL: @p2_same_range_must_alias_caller (
81+ ; CHECK-NEXT: [[PTR:%.*]] = alloca i16, align 2
82+ ; CHECK-NEXT: call void @p2_same_range(ptr [[PTR]] , ptr [[PTR]] )
83+ ; CHECK-NEXT: [[L:%.*]] = load i16, ptr [[PTR]], align 2
84+ ; CHECK-NEXT: ret i16 [[L]]
8585;
8686 %ptr = alloca i16
8787 store i16 0 , ptr %ptr
@@ -90,14 +90,46 @@ define i16 @p2_same_range_alias_caller() {
9090 ret i16 %l
9191}
9292
93+ ; Function Attrs: mustprogress nounwind uwtable
94+ define i16 @p2_same_range_may_or_partial_alias_caller1 (ptr %base , i1 %x ) {
95+ ; CHECK-LABEL: @p2_same_range_may_or_partial_alias_caller1(
96+ ; CHECK-NEXT: [[BASEPLUS:%.*]] = getelementptr i8, ptr [[BASE:%.*]], i64 1
97+ ; CHECK-NEXT: [[SEL:%.*]] = select i1 [[X:%.*]], ptr [[BASEPLUS]], ptr [[BASE]]
98+ ; CHECK-NEXT: store i32 0, ptr [[BASE]], align 4
99+ ; CHECK-NEXT: call void @p2_same_range(ptr [[BASE]], ptr [[SEL]])
100+ ; CHECK-NEXT: [[L:%.*]] = load i16, ptr [[BASE]], align 2
101+ ; CHECK-NEXT: ret i16 [[L]]
102+ ;
103+ %baseplus = getelementptr i8 , ptr %base , i64 1
104+ %sel = select i1 %x , ptr %baseplus , ptr %base
105+ store i32 0 , ptr %base
106+ call void @p2_same_range (ptr %base , ptr %sel )
107+ %l = load i16 , ptr %base
108+ ret i16 %l
109+ }
110+
111+ ; Function Attrs: mustprogress nounwind uwtable
112+ define i16 @p2_same_range_may_or_partial_alias_caller2 (ptr %base1 , ptr %base2 ) {
113+ ; CHECK-LABEL: @p2_same_range_may_or_partial_alias_caller2(
114+ ; CHECK-NEXT: store i32 0, ptr [[BASE1:%.*]], align 4
115+ ; CHECK-NEXT: call void @p2_same_range(ptr [[BASE1]], ptr [[BASE2:%.*]])
116+ ; CHECK-NEXT: [[L:%.*]] = load i16, ptr [[BASE1]], align 2
117+ ; CHECK-NEXT: ret i16 [[L]]
118+ ;
119+ store i32 0 , ptr %base1
120+ call void @p2_same_range (ptr %base1 , ptr %base2 )
121+ %l = load i16 , ptr %base1
122+ ret i16 %l
123+ }
124+
93125; Function Attrs: mustprogress nounwind uwtable
94126define i16 @p2_no_init_alias_caller () {
95127; CHECK-LABEL: @p2_no_init_alias_caller(
96- ; CHECK-NEXT: %ptr = alloca i16, align 2
97- ; CHECK-NEXT: store i16 0, ptr %ptr
98- ; CHECK-NEXT: call void @p2_no_init(ptr %ptr , ptr %ptr )
99- ; CHECK-NEXT: %l = load i16, ptr %ptr
100- ; CHECK-NEXT: ret i16 %l
128+ ; CHECK-NEXT: [[PTR:%.*]] = alloca i16, align 2
129+ ; CHECK-NEXT: store i16 0, ptr [[PTR]], align 2
130+ ; CHECK-NEXT: call void @p2_no_init(ptr [[PTR]] , ptr [[PTR]] )
131+ ; CHECK-NEXT: [[L:%.*]] = load i16, ptr [[PTR]], align 2
132+ ; CHECK-NEXT: ret i16 [[L]]
101133;
102134 %ptr = alloca i16
103135 store i16 0 , ptr %ptr
@@ -109,11 +141,11 @@ define i16 @p2_no_init_alias_caller() {
109141; Function Attrs: mustprogress nounwind uwtable
110142define i16 @p2_no_dead_on_unwind_alias_caller () {
111143; CHECK-LABEL: @p2_no_dead_on_unwind_alias_caller(
112- ; CHECK-NEXT: %ptr = alloca i16, align 2
113- ; CHECK-NEXT: store i16 0, ptr %ptr
114- ; CHECK-NEXT: call void @p2_no_dead_on_unwind(ptr %ptr , ptr %ptr )
115- ; CHECK-NEXT: %l = load i16, ptr %ptr
116- ; CHECK-NEXT: ret i16 %l
144+ ; CHECK-NEXT: [[PTR:%.*]] = alloca i16, align 2
145+ ; CHECK-NEXT: store i16 0, ptr [[PTR]], align 2
146+ ; CHECK-NEXT: call void @p2_no_dead_on_unwind(ptr [[PTR]] , ptr [[PTR]] )
147+ ; CHECK-NEXT: [[L:%.*]] = load i16, ptr [[PTR]], align 2
148+ ; CHECK-NEXT: ret i16 [[L]]
117149;
118150 %ptr = alloca i16
119151 store i16 0 , ptr %ptr
@@ -125,10 +157,10 @@ define i16 @p2_no_dead_on_unwind_alias_caller() {
125157; Function Attrs: mustprogress nounwind uwtable
126158define i16 @p2_no_dead_on_unwind_but_nounwind_alias_caller () {
127159; CHECK-LABEL: @p2_no_dead_on_unwind_but_nounwind_alias_caller(
128- ; CHECK-NEXT: %ptr = alloca i16, align 2
129- ; CHECK-NEXT: call void @p2_no_dead_on_unwind_but_nounwind(ptr %ptr , ptr %ptr )
130- ; CHECK-NEXT: %l = load i16, ptr %ptr
131- ; CHECK-NEXT: ret i16 %l
160+ ; CHECK-NEXT: [[PTR:%.*]] = alloca i16, align 2
161+ ; CHECK-NEXT: call void @p2_no_dead_on_unwind_but_nounwind(ptr [[PTR]] , ptr [[PTR]] )
162+ ; CHECK-NEXT: [[L:%.*]] = load i16, ptr [[PTR]], align 2
163+ ; CHECK-NEXT: ret i16 [[L]]
132164;
133165 %ptr = alloca i16
134166 store i16 0 , ptr %ptr
@@ -144,10 +176,10 @@ declare void @large_p2(ptr nocapture noundef initializes((0, 200)), ptr nocaptur
144176; Function Attrs: mustprogress nounwind uwtable
145177define i16 @large_p1_caller () {
146178; CHECK-LABEL: @large_p1_caller(
147- ; CHECK-NEXT: %ptr = alloca i16, align 2
148- ; CHECK-NEXT: call void @large_p1(ptr %ptr )
149- ; CHECK-NEXT: %l = load i16, ptr %ptr
150- ; CHECK-NEXT: ret i16 %l
179+ ; CHECK-NEXT: [[PTR:%.*]] = alloca i16, align 2
180+ ; CHECK-NEXT: call void @large_p1(ptr [[PTR]] )
181+ ; CHECK-NEXT: [[L:%.*]] = load i16, ptr [[PTR]], align 2
182+ ; CHECK-NEXT: ret i16 [[L]]
151183;
152184 %ptr = alloca i16
153185 call void @llvm.memset.p0.i64 (ptr %ptr , i8 42 , i64 100 , i1 false )
@@ -159,11 +191,11 @@ define i16 @large_p1_caller() {
159191; Function Attrs: mustprogress nounwind uwtable
160192define i16 @large_p2_nonalias_caller () {
161193; CHECK-LABEL: @large_p2_nonalias_caller(
162- ; CHECK-NEXT: %ptr1 = alloca i16, align 2
163- ; CHECK-NEXT: %ptr2 = alloca i16, align 2
164- ; CHECK-NEXT: call void @large_p2(ptr %ptr1 , ptr %ptr2 )
165- ; CHECK-NEXT: %l = load i16, ptr %ptr1
166- ; CHECK-NEXT: ret i16 %l
194+ ; CHECK-NEXT: [[PTR1:%.*]] = alloca i16, align 2
195+ ; CHECK-NEXT: [[PTR2:%.*]] = alloca i16, align 2
196+ ; CHECK-NEXT: call void @large_p2(ptr [[PTR1]] , ptr [[PTR2]] )
197+ ; CHECK-NEXT: [[L:%.*]] = load i16, ptr [[PTR1]], align 2
198+ ; CHECK-NEXT: ret i16 [[L]]
167199;
168200 %ptr1 = alloca i16
169201 %ptr2 = alloca i16
@@ -176,14 +208,14 @@ define i16 @large_p2_nonalias_caller() {
176208
177209
178210; Function Attrs: mustprogress nounwind uwtable
179- define i16 @large_p2_alias_caller () {
180- ; CHECK-LABEL: @large_p2_alias_caller (
181- ; CHECK-NEXT: %ptr = alloca i16, align 2
182- ; CHECK-NEXT: %1 = getelementptr inbounds i8, ptr %ptr , i64 100
183- ; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 1 %1 , i8 42, i64 200, i1 false)
184- ; CHECK-NEXT: call void @large_p2(ptr %ptr , ptr %ptr )
185- ; CHECK-NEXT: %l = load i16, ptr %ptr
186- ; CHECK-NEXT: ret i16 %l
211+ define i16 @large_p2_must_alias_caller () {
212+ ; CHECK-LABEL: @large_p2_must_alias_caller (
213+ ; CHECK-NEXT: [[PTR:%.*]] = alloca i16, align 2
214+ ; CHECK-NEXT: [[TMP1:%.*]] = getelementptr inbounds i8, ptr [[PTR]] , i64 100
215+ ; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 1 [[TMP1]] , i8 42, i64 200, i1 false)
216+ ; CHECK-NEXT: call void @large_p2(ptr [[PTR]] , ptr [[PTR]] )
217+ ; CHECK-NEXT: [[L:%.*]] = load i16, ptr [[PTR]], align 2
218+ ; CHECK-NEXT: ret i16 [[L]]
187219;
188220 %ptr = alloca i16
189221 call void @llvm.memset.p0.i64 (ptr %ptr , i8 42 , i64 300 , i1 false )
0 commit comments