6
6
declare void @bar1 (ptr %p )
7
7
declare void @bar2 (ptr %p , ptr %p2 )
8
8
declare void @bar3 (ptr writable %p )
9
+ declare void @bar4 (ptr byval ([4 x i32 ]) %p )
9
10
define dso_local void @foo1_rdonly (ptr readonly %p ) {
10
11
; CHECK-LABEL: define {{[^@]+}}@foo1_rdonly
11
12
; CHECK-SAME: (ptr readonly [[P:%.*]]) {
@@ -186,10 +187,20 @@ define dso_local void @foo2_through_obj(ptr %p, ptr %p2) {
186
187
ret void
187
188
}
188
189
190
+ define dso_local void @foo_byval_readonly (ptr readonly %p ) {
191
+ ; CHECK-LABEL: define {{[^@]+}}@foo_byval_readonly
192
+ ; CHECK-SAME: (ptr readonly [[P:%.*]]) {
193
+ ; CHECK-NEXT: call void @bar4(ptr byval([4 x i32]) [[P]])
194
+ ; CHECK-NEXT: ret void
195
+ ;
196
+ call void @bar4 (ptr byval ([4 x i32 ]) %p )
197
+ ret void
198
+ }
199
+
189
200
define void @prop_param_func_decl (ptr %p ) {
190
201
; CHECK-LABEL: define {{[^@]+}}@prop_param_func_decl
191
202
; CHECK-SAME: (ptr [[P:%.*]]) {
192
- ; CHECK-NEXT: call void @bar1(ptr [[P]])
203
+ ; CHECK-NEXT: call void @bar1(ptr readonly [[P]])
193
204
; CHECK-NEXT: ret void
194
205
;
195
206
call void @foo1_rdonly (ptr %p )
@@ -199,7 +210,7 @@ define void @prop_param_func_decl(ptr %p) {
199
210
define void @prop_param_callbase_def (ptr %p ) {
200
211
; CHECK-LABEL: define {{[^@]+}}@prop_param_callbase_def
201
212
; CHECK-SAME: (ptr [[P:%.*]]) {
202
- ; CHECK-NEXT: call void @bar1(ptr [[P]])
213
+ ; CHECK-NEXT: call void @bar1(ptr readonly [[P]])
203
214
; CHECK-NEXT: call void @bar1(ptr [[P]])
204
215
; CHECK-NEXT: ret void
205
216
;
@@ -211,7 +222,7 @@ define void @prop_param_callbase_def(ptr %p) {
211
222
define void @prop_param_callbase_def_2x (ptr %p , ptr %p2 ) {
212
223
; CHECK-LABEL: define {{[^@]+}}@prop_param_callbase_def_2x
213
224
; CHECK-SAME: (ptr [[P:%.*]], ptr [[P2:%.*]]) {
214
- ; CHECK-NEXT: call void @bar2(ptr [[P]], ptr [[P]])
225
+ ; CHECK-NEXT: call void @bar2(ptr readonly [[P]], ptr readonly [[P]])
215
226
; CHECK-NEXT: ret void
216
227
;
217
228
call void @foo2 (ptr readonly %p , ptr %p )
@@ -223,7 +234,7 @@ define void @prop_param_callbase_def_2x_2(ptr %p, ptr %p2) {
223
234
; CHECK-SAME: (ptr [[P:%.*]], ptr [[P2:%.*]]) {
224
235
; CHECK-NEXT: [[PP_I:%.*]] = getelementptr i8, ptr [[P]], i64 9
225
236
; CHECK-NEXT: [[P2P_I:%.*]] = getelementptr i8, ptr [[P2]], i64 123
226
- ; CHECK-NEXT: call void @bar2(ptr [[P2P_I]], ptr [[PP_I]])
237
+ ; CHECK-NEXT: call void @bar2(ptr [[P2P_I]], ptr readonly [[PP_I]])
227
238
; CHECK-NEXT: ret void
228
239
;
229
240
call void @foo2_through_obj (ptr readonly %p , ptr writeonly %p2 )
@@ -235,7 +246,7 @@ define void @prop_param_callbase_def_2x_incompat(ptr %p, ptr %p2) {
235
246
; CHECK-SAME: (ptr [[P:%.*]], ptr [[P2:%.*]]) {
236
247
; CHECK-NEXT: [[PP_I:%.*]] = getelementptr i8, ptr [[P]], i64 9
237
248
; CHECK-NEXT: [[P2P_I:%.*]] = getelementptr i8, ptr [[P]], i64 123
238
- ; CHECK-NEXT: call void @bar2(ptr [[P2P_I]], ptr [[PP_I]])
249
+ ; CHECK-NEXT: call void @bar2(ptr readonly [[P2P_I]], ptr readnone [[PP_I]])
239
250
; CHECK-NEXT: ret void
240
251
;
241
252
call void @foo2_through_obj (ptr readnone %p , ptr readonly %p )
@@ -245,7 +256,7 @@ define void @prop_param_callbase_def_2x_incompat(ptr %p, ptr %p2) {
245
256
define void @prop_param_callbase_def_2x_incompat_2 (ptr %p , ptr %p2 ) {
246
257
; CHECK-LABEL: define {{[^@]+}}@prop_param_callbase_def_2x_incompat_2
247
258
; CHECK-SAME: (ptr [[P:%.*]], ptr [[P2:%.*]]) {
248
- ; CHECK-NEXT: call void @bar2(ptr [[P]], ptr [[P]])
259
+ ; CHECK-NEXT: call void @bar2(ptr readonly [[P]], ptr readonly [[P]])
249
260
; CHECK-NEXT: ret void
250
261
;
251
262
call void @foo2 (ptr readonly %p , ptr readnone %p )
@@ -255,7 +266,7 @@ define void @prop_param_callbase_def_2x_incompat_2(ptr %p, ptr %p2) {
255
266
define void @prop_param_callbase_def_2x_incompat_3 (ptr %p , ptr %p2 ) {
256
267
; CHECK-LABEL: define {{[^@]+}}@prop_param_callbase_def_2x_incompat_3
257
268
; CHECK-SAME: (ptr [[P:%.*]], ptr [[P2:%.*]]) {
258
- ; CHECK-NEXT: call void @bar2(ptr [[P]], ptr [[P]])
269
+ ; CHECK-NEXT: call void @bar2(ptr readnone [[P]], ptr readnone [[P]])
259
270
; CHECK-NEXT: ret void
260
271
;
261
272
call void @foo2_2 (ptr readonly %p , ptr readnone %p )
@@ -265,7 +276,7 @@ define void @prop_param_callbase_def_2x_incompat_3(ptr %p, ptr %p2) {
265
276
define void @prop_param_callbase_def_1x_partial (ptr %p , ptr %p2 ) {
266
277
; CHECK-LABEL: define {{[^@]+}}@prop_param_callbase_def_1x_partial
267
278
; CHECK-SAME: (ptr [[P:%.*]], ptr [[P2:%.*]]) {
268
- ; CHECK-NEXT: call void @bar2(ptr [[P]], ptr [[P]])
279
+ ; CHECK-NEXT: call void @bar2(ptr readonly [[P]], ptr readonly [[P]])
269
280
; CHECK-NEXT: ret void
270
281
;
271
282
call void @foo2 (ptr readonly %p , ptr %p )
@@ -285,7 +296,7 @@ define void @prop_param_callbase_def_1x_partial_2(ptr %p, ptr %p2) {
285
296
define void @prop_param_callbase_def_1x_partial_3 (ptr %p , ptr %p2 ) {
286
297
; CHECK-LABEL: define {{[^@]+}}@prop_param_callbase_def_1x_partial_3
287
298
; CHECK-SAME: (ptr [[P:%.*]], ptr [[P2:%.*]]) {
288
- ; CHECK-NEXT: call void @bar2(ptr [[P]], ptr [[P]])
299
+ ; CHECK-NEXT: call void @bar2(ptr readonly [[P]], ptr readnone [[P]])
289
300
; CHECK-NEXT: ret void
290
301
;
291
302
call void @foo2_3 (ptr readonly %p , ptr %p )
@@ -521,7 +532,7 @@ define void @prop_cb_def_mustprogress(ptr %p) {
521
532
define void @prop_no_conflict_writable (ptr %p ) {
522
533
; CHECK-LABEL: define {{[^@]+}}@prop_no_conflict_writable
523
534
; CHECK-SAME: (ptr [[P:%.*]]) {
524
- ; CHECK-NEXT: call void @bar1(ptr writable [[P]])
535
+ ; CHECK-NEXT: call void @bar1(ptr readonly [[P]])
525
536
; CHECK-NEXT: ret void
526
537
;
527
538
call void @foo1_writable (ptr readonly %p )
@@ -532,10 +543,19 @@ define void @prop_no_conflict_writable(ptr %p) {
532
543
define void @prop_no_conflict_writable2 (ptr %p ) {
533
544
; CHECK-LABEL: define {{[^@]+}}@prop_no_conflict_writable2
534
545
; CHECK-SAME: (ptr [[P:%.*]]) {
535
- ; CHECK-NEXT: call void @bar3(ptr [[P]])
546
+ ; CHECK-NEXT: call void @bar3(ptr readnone [[P]])
536
547
; CHECK-NEXT: ret void
537
548
;
538
549
call void @foo3_writable (ptr readnone %p )
539
550
ret void
540
551
}
541
552
553
+ define void @prop_byval_readonly (ptr %p ) {
554
+ ; CHECK-LABEL: define {{[^@]+}}@prop_byval_readonly
555
+ ; CHECK-SAME: (ptr [[P:%.*]]) {
556
+ ; CHECK-NEXT: call void @bar4(ptr byval([4 x i32]) [[P]])
557
+ ; CHECK-NEXT: ret void
558
+ ;
559
+ call void @foo_byval_readonly (ptr %p )
560
+ ret void
561
+ }
0 commit comments