@@ -9,15 +9,11 @@ declare void @side.effect()
9
9
define ptr @test_hoist_int_attrs (i1 %c , ptr %p , i64 %x ) {
10
10
; CHECK-LABEL: define {{[^@]+}}@test_hoist_int_attrs
11
11
; 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:%.*]]
13
14
; 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]]
19
16
; 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]+]]
21
17
; CHECK-NEXT: call void @side.effect()
22
18
; CHECK-NEXT: br label [[COMMON_RET]]
23
19
;
@@ -35,15 +31,11 @@ else:
35
31
define ptr @test_hoist_int_attrs2 (i1 %c , ptr %p , i64 %x ) {
36
32
; CHECK-LABEL: define {{[^@]+}}@test_hoist_int_attrs2
37
33
; 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:%.*]]
39
36
; 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]]
45
38
; 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]+]]
47
39
; CHECK-NEXT: call void @side.effect()
48
40
; CHECK-NEXT: br label [[COMMON_RET]]
49
41
;
@@ -61,15 +53,11 @@ else:
61
53
define ptr @test_hoist_bool_attrs2 (i1 %c , ptr %p , i64 %x ) {
62
54
; CHECK-LABEL: define {{[^@]+}}@test_hoist_bool_attrs2
63
55
; 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:%.*]]
65
58
; 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]]
71
60
; CHECK: else:
72
- ; CHECK-NEXT: [[R2]] = call noundef nonnull ptr @foo(ptr nonnull readonly [[P]], i64 noundef [[X]]) #[[ATTR4:[0-9]+]]
73
61
; CHECK-NEXT: call void @side.effect()
74
62
; CHECK-NEXT: br label [[COMMON_RET]]
75
63
;
@@ -87,15 +75,11 @@ else:
87
75
define ptr @test_hoist_bool_attrs3 (i1 %c , ptr %p , i64 %x ) {
88
76
; CHECK-LABEL: define {{[^@]+}}@test_hoist_bool_attrs3
89
77
; 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:%.*]]
91
80
; 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]]
97
82
; CHECK: else:
98
- ; CHECK-NEXT: [[R2]] = call noundef nonnull ptr @foo(ptr nonnull writeonly [[P]], i64 noundef [[X]]) #[[ATTR6:[0-9]+]]
99
83
; CHECK-NEXT: call void @side.effect()
100
84
; CHECK-NEXT: br label [[COMMON_RET]]
101
85
;
@@ -118,10 +102,10 @@ define ptr @test_hoist_bool_attrs_fail_non_droppable(i1 %c, ptr %p, i64 %x) {
118
102
; CHECK-NEXT: [[COMMON_RET_OP:%.*]] = phi ptr [ [[R:%.*]], [[IF]] ], [ [[R2:%.*]], [[ELSE]] ]
119
103
; CHECK-NEXT: ret ptr [[COMMON_RET_OP]]
120
104
; 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]+ ]]
122
106
; CHECK-NEXT: br label [[COMMON_RET:%.*]]
123
107
; 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]+]]
125
109
; CHECK-NEXT: call void @side.effect()
126
110
; CHECK-NEXT: br label [[COMMON_RET]]
127
111
;
@@ -144,10 +128,10 @@ define ptr @test_hoist_bool_attrs_fail_non_droppable2(i1 %c, ptr %p, i64 %x) {
144
128
; CHECK-NEXT: [[COMMON_RET_OP:%.*]] = phi ptr [ [[R:%.*]], [[IF]] ], [ [[R2:%.*]], [[ELSE]] ]
145
129
; CHECK-NEXT: ret ptr [[COMMON_RET_OP]]
146
130
; 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]+]]
148
132
; CHECK-NEXT: br label [[COMMON_RET:%.*]]
149
133
; 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 ]]
151
135
; CHECK-NEXT: call void @side.effect()
152
136
; CHECK-NEXT: br label [[COMMON_RET]]
153
137
;
@@ -170,10 +154,10 @@ define ptr @test_hoist_bool_attrs_fail_non_droppable3(i1 %c, ptr %p, i64 %x) {
170
154
; CHECK-NEXT: [[COMMON_RET_OP:%.*]] = phi ptr [ [[R:%.*]], [[IF]] ], [ [[R2:%.*]], [[ELSE]] ]
171
155
; CHECK-NEXT: ret ptr [[COMMON_RET_OP]]
172
156
; 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 ]]
174
158
; CHECK-NEXT: br label [[COMMON_RET:%.*]]
175
159
; 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 ]]
177
161
; CHECK-NEXT: call void @side.effect()
178
162
; CHECK-NEXT: br label [[COMMON_RET]]
179
163
;
@@ -191,15 +175,11 @@ else:
191
175
define ptr @test_hoist_bool_attrs4 (i1 %c , ptr %p , i64 %x ) {
192
176
; CHECK-LABEL: define {{[^@]+}}@test_hoist_bool_attrs4
193
177
; 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:%.*]]
195
180
; 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]]
201
182
; CHECK: else:
202
- ; CHECK-NEXT: [[R2]] = call noundef nonnull ptr @foo(ptr nonnull writeonly byval(i64) [[P]], i64 noundef [[X]]) #[[ATTR7]]
203
183
; CHECK-NEXT: call void @side.effect()
204
184
; CHECK-NEXT: br label [[COMMON_RET]]
205
185
;
0 commit comments