@@ -9,15 +9,11 @@ declare void @side.effect()
99define ptr @test_hoist_int_attrs (i1 %c , ptr %p , i64 %x ) {
1010; CHECK-LABEL: define {{[^@]+}}@test_hoist_int_attrs
1111; CHECK-SAME: (i1 [[C:%.*]], ptr [[P:%.*]], i64 [[X:%.*]]) {
12- ; CHECK-NEXT: br i1 [[C]], label [[IF:%.*]], label [[ELSE:%.*]]
12+ ; CHECK-NEXT: [[R:%.*]] = call ptr @foo(ptr align 32 dereferenceable(50) dereferenceable_or_null(100) [[P]], i64 range(i64 10, 100000) [[X]]) #[[ATTR0:[0-9]+]]
13+ ; CHECK-NEXT: br i1 [[C]], label [[COMMON_RET:%.*]], label [[ELSE:%.*]]
1314; CHECK: common.ret:
14- ; CHECK-NEXT: [[COMMON_RET_OP:%.*]] = phi ptr [ [[R:%.*]], [[IF]] ], [ [[R2:%.*]], [[ELSE]] ]
15- ; CHECK-NEXT: ret ptr [[COMMON_RET_OP]]
16- ; CHECK: if:
17- ; CHECK-NEXT: [[R]] = call ptr @foo(ptr align 64 dereferenceable(50) dereferenceable_or_null(100) [[P]], i64 range(i64 10, 1000) [[X]]) #[[ATTR0:[0-9]+]]
18- ; CHECK-NEXT: br label [[COMMON_RET:%.*]]
15+ ; CHECK-NEXT: ret ptr [[R]]
1916; CHECK: else:
20- ; CHECK-NEXT: [[R2]] = call ptr @foo(ptr align 32 dereferenceable(100) dereferenceable_or_null(200) [[P]], i64 range(i64 10000, 100000) [[X]]) #[[ATTR1:[0-9]+]]
2117; CHECK-NEXT: call void @side.effect()
2218; CHECK-NEXT: br label [[COMMON_RET]]
2319;
@@ -35,15 +31,11 @@ else:
3531define ptr @test_hoist_int_attrs2 (i1 %c , ptr %p , i64 %x ) {
3632; CHECK-LABEL: define {{[^@]+}}@test_hoist_int_attrs2
3733; CHECK-SAME: (i1 [[C:%.*]], ptr [[P:%.*]], i64 [[X:%.*]]) {
38- ; CHECK-NEXT: br i1 [[C]], label [[IF:%.*]], label [[ELSE:%.*]]
34+ ; CHECK-NEXT: [[R:%.*]] = call ptr @foo(ptr dereferenceable(50) [[P]], i64 range(i64 10, 1000) [[X]]) #[[ATTR1:[0-9]+]]
35+ ; CHECK-NEXT: br i1 [[C]], label [[COMMON_RET:%.*]], label [[ELSE:%.*]]
3936; CHECK: common.ret:
40- ; CHECK-NEXT: [[COMMON_RET_OP:%.*]] = phi ptr [ [[R:%.*]], [[IF]] ], [ [[R2:%.*]], [[ELSE]] ]
41- ; CHECK-NEXT: ret ptr [[COMMON_RET_OP]]
42- ; CHECK: if:
43- ; CHECK-NEXT: [[R]] = call ptr @foo(ptr dereferenceable(50) [[P]], i64 range(i64 10, 1000) [[X]]) #[[ATTR0]]
44- ; CHECK-NEXT: br label [[COMMON_RET:%.*]]
37+ ; CHECK-NEXT: ret ptr [[R]]
4538; CHECK: else:
46- ; CHECK-NEXT: [[R2]] = call ptr @foo(ptr align 32 dereferenceable(100) dereferenceable_or_null(200) [[P]], i64 range(i64 11, 100) [[X]]) #[[ATTR2:[0-9]+]]
4739; CHECK-NEXT: call void @side.effect()
4840; CHECK-NEXT: br label [[COMMON_RET]]
4941;
@@ -61,15 +53,11 @@ else:
6153define ptr @test_hoist_bool_attrs2 (i1 %c , ptr %p , i64 %x ) {
6254; CHECK-LABEL: define {{[^@]+}}@test_hoist_bool_attrs2
6355; CHECK-SAME: (i1 [[C:%.*]], ptr [[P:%.*]], i64 [[X:%.*]]) {
64- ; CHECK-NEXT: br i1 [[C]], label [[IF:%.*]], label [[ELSE:%.*]]
56+ ; CHECK-NEXT: [[R:%.*]] = call noundef ptr @foo(ptr nonnull [[P]], i64 noundef [[X]]) #[[ATTR2:[0-9]+]]
57+ ; CHECK-NEXT: br i1 [[C]], label [[COMMON_RET:%.*]], label [[ELSE:%.*]]
6558; CHECK: common.ret:
66- ; CHECK-NEXT: [[COMMON_RET_OP:%.*]] = phi ptr [ [[R:%.*]], [[IF]] ], [ [[R2:%.*]], [[ELSE]] ]
67- ; CHECK-NEXT: ret ptr [[COMMON_RET_OP]]
68- ; CHECK: if:
69- ; CHECK-NEXT: [[R]] = call noundef ptr @foo(ptr noundef nonnull readnone [[P]], i64 noundef [[X]]) #[[ATTR3:[0-9]+]]
70- ; CHECK-NEXT: br label [[COMMON_RET:%.*]]
59+ ; CHECK-NEXT: ret ptr [[R]]
7160; CHECK: else:
72- ; CHECK-NEXT: [[R2]] = call noundef nonnull ptr @foo(ptr nonnull readonly [[P]], i64 noundef [[X]]) #[[ATTR4:[0-9]+]]
7361; CHECK-NEXT: call void @side.effect()
7462; CHECK-NEXT: br label [[COMMON_RET]]
7563;
@@ -87,15 +75,11 @@ else:
8775define ptr @test_hoist_bool_attrs3 (i1 %c , ptr %p , i64 %x ) {
8876; CHECK-LABEL: define {{[^@]+}}@test_hoist_bool_attrs3
8977; CHECK-SAME: (i1 [[C:%.*]], ptr [[P:%.*]], i64 [[X:%.*]]) {
90- ; CHECK-NEXT: br i1 [[C]], label [[IF:%.*]], label [[ELSE:%.*]]
78+ ; CHECK-NEXT: [[R:%.*]] = call nonnull ptr @foo(ptr [[P]], i64 noundef [[X]]) #[[ATTR3:[0-9]+]]
79+ ; CHECK-NEXT: br i1 [[C]], label [[COMMON_RET:%.*]], label [[ELSE:%.*]]
9180; CHECK: common.ret:
92- ; CHECK-NEXT: [[COMMON_RET_OP:%.*]] = phi ptr [ [[R:%.*]], [[IF]] ], [ [[R2:%.*]], [[ELSE]] ]
93- ; CHECK-NEXT: ret ptr [[COMMON_RET_OP]]
94- ; CHECK: if:
95- ; CHECK-NEXT: [[R]] = call nonnull ptr @foo(ptr noundef readonly [[P]], i64 noundef [[X]]) #[[ATTR5:[0-9]+]]
96- ; CHECK-NEXT: br label [[COMMON_RET:%.*]]
81+ ; CHECK-NEXT: ret ptr [[R]]
9782; CHECK: else:
98- ; CHECK-NEXT: [[R2]] = call noundef nonnull ptr @foo(ptr nonnull writeonly [[P]], i64 noundef [[X]]) #[[ATTR6:[0-9]+]]
9983; CHECK-NEXT: call void @side.effect()
10084; CHECK-NEXT: br label [[COMMON_RET]]
10185;
@@ -118,10 +102,10 @@ define ptr @test_hoist_bool_attrs_fail_non_droppable(i1 %c, ptr %p, i64 %x) {
118102; CHECK-NEXT: [[COMMON_RET_OP:%.*]] = phi ptr [ [[R:%.*]], [[IF]] ], [ [[R2:%.*]], [[ELSE]] ]
119103; CHECK-NEXT: ret ptr [[COMMON_RET_OP]]
120104; CHECK: if:
121- ; CHECK-NEXT: [[R]] = call nonnull ptr @foo(ptr noundef readonly [[P]], i64 noundef [[X]]) #[[ATTR5 ]]
105+ ; CHECK-NEXT: [[R]] = call nonnull ptr @foo(ptr noundef readonly [[P]], i64 noundef [[X]]) #[[ATTR4:[0-9]+ ]]
122106; CHECK-NEXT: br label [[COMMON_RET:%.*]]
123107; CHECK: else:
124- ; CHECK-NEXT: [[R2]] = call noundef nonnull ptr @foo(ptr nonnull writeonly [[P]], i64 noundef [[X]]) #[[ATTR7 :[0-9]+]]
108+ ; CHECK-NEXT: [[R2]] = call noundef nonnull ptr @foo(ptr nonnull writeonly [[P]], i64 noundef [[X]]) #[[ATTR5 :[0-9]+]]
125109; CHECK-NEXT: call void @side.effect()
126110; CHECK-NEXT: br label [[COMMON_RET]]
127111;
@@ -144,10 +128,10 @@ define ptr @test_hoist_bool_attrs_fail_non_droppable2(i1 %c, ptr %p, i64 %x) {
144128; CHECK-NEXT: [[COMMON_RET_OP:%.*]] = phi ptr [ [[R:%.*]], [[IF]] ], [ [[R2:%.*]], [[ELSE]] ]
145129; CHECK-NEXT: ret ptr [[COMMON_RET_OP]]
146130; CHECK: if:
147- ; CHECK-NEXT: [[R]] = call nonnull ptr @foo(ptr noundef readonly [[P]], i64 noundef [[X]]) #[[ATTR8 :[0-9]+]]
131+ ; CHECK-NEXT: [[R]] = call nonnull ptr @foo(ptr noundef readonly [[P]], i64 noundef [[X]]) #[[ATTR6 :[0-9]+]]
148132; CHECK-NEXT: br label [[COMMON_RET:%.*]]
149133; CHECK: else:
150- ; CHECK-NEXT: [[R2]] = call noundef nonnull ptr @foo(ptr nonnull writeonly byval(i64) [[P]], i64 noundef [[X]]) #[[ATTR7 ]]
134+ ; CHECK-NEXT: [[R2]] = call noundef nonnull ptr @foo(ptr nonnull writeonly byval(i64) [[P]], i64 noundef [[X]]) #[[ATTR5 ]]
151135; CHECK-NEXT: call void @side.effect()
152136; CHECK-NEXT: br label [[COMMON_RET]]
153137;
@@ -170,10 +154,10 @@ define ptr @test_hoist_bool_attrs_fail_non_droppable3(i1 %c, ptr %p, i64 %x) {
170154; CHECK-NEXT: [[COMMON_RET_OP:%.*]] = phi ptr [ [[R:%.*]], [[IF]] ], [ [[R2:%.*]], [[ELSE]] ]
171155; CHECK-NEXT: ret ptr [[COMMON_RET_OP]]
172156; CHECK: if:
173- ; CHECK-NEXT: [[R]] = call nonnull ptr @foo(ptr noundef readonly byval(i32) [[P]], i64 noundef [[X]]) #[[ATTR8 ]]
157+ ; CHECK-NEXT: [[R]] = call nonnull ptr @foo(ptr noundef readonly byval(i32) [[P]], i64 noundef [[X]]) #[[ATTR6 ]]
174158; CHECK-NEXT: br label [[COMMON_RET:%.*]]
175159; CHECK: else:
176- ; CHECK-NEXT: [[R2]] = call noundef nonnull ptr @foo(ptr nonnull writeonly byval(i64) [[P]], i64 noundef [[X]]) #[[ATTR7 ]]
160+ ; CHECK-NEXT: [[R2]] = call noundef nonnull ptr @foo(ptr nonnull writeonly byval(i64) [[P]], i64 noundef [[X]]) #[[ATTR5 ]]
177161; CHECK-NEXT: call void @side.effect()
178162; CHECK-NEXT: br label [[COMMON_RET]]
179163;
@@ -191,15 +175,11 @@ else:
191175define ptr @test_hoist_bool_attrs4 (i1 %c , ptr %p , i64 %x ) {
192176; CHECK-LABEL: define {{[^@]+}}@test_hoist_bool_attrs4
193177; CHECK-SAME: (i1 [[C:%.*]], ptr [[P:%.*]], i64 [[X:%.*]]) {
194- ; CHECK-NEXT: br i1 [[C]], label [[IF:%.*]], label [[ELSE:%.*]]
178+ ; CHECK-NEXT: [[R:%.*]] = call nonnull ptr @foo(ptr byval(i64) [[P]], i64 noundef [[X]]) #[[ATTR5]]
179+ ; CHECK-NEXT: br i1 [[C]], label [[COMMON_RET:%.*]], label [[ELSE:%.*]]
195180; CHECK: common.ret:
196- ; CHECK-NEXT: [[COMMON_RET_OP:%.*]] = phi ptr [ [[R:%.*]], [[IF]] ], [ [[R2:%.*]], [[ELSE]] ]
197- ; CHECK-NEXT: ret ptr [[COMMON_RET_OP]]
198- ; CHECK: if:
199- ; CHECK-NEXT: [[R]] = call nonnull ptr @foo(ptr noundef readonly byval(i64) [[P]], i64 noundef [[X]]) #[[ATTR8]]
200- ; CHECK-NEXT: br label [[COMMON_RET:%.*]]
181+ ; CHECK-NEXT: ret ptr [[R]]
201182; CHECK: else:
202- ; CHECK-NEXT: [[R2]] = call noundef nonnull ptr @foo(ptr nonnull writeonly byval(i64) [[P]], i64 noundef [[X]]) #[[ATTR7]]
203183; CHECK-NEXT: call void @side.effect()
204184; CHECK-NEXT: br label [[COMMON_RET]]
205185;
0 commit comments