@@ -332,6 +332,74 @@ define <2 x ptr addrspace(7)> @addrspacecast_vec(<2 x ptr addrspace(8)> %buf) {
332
332
ret <2 x ptr addrspace (7 )> %ret
333
333
}
334
334
335
+ define ptr addrspace (7 ) @addrspacecast_null () {
336
+ ; CHECK-LABEL: define { ptr addrspace(8), i32 } @addrspacecast_null
337
+ ; CHECK-SAME: () #[[ATTR0]] {
338
+ ; CHECK-NEXT: ret { ptr addrspace(8), i32 } zeroinitializer
339
+ ;
340
+ %ret = addrspacecast ptr null to ptr addrspace (7 )
341
+ ret ptr addrspace (7 ) %ret
342
+ }
343
+
344
+ define <2 x ptr addrspace (7 )> @addrspacecast_null_vec () {
345
+ ; CHECK-LABEL: define { <2 x ptr addrspace(8)>, <2 x i32> } @addrspacecast_null_vec
346
+ ; CHECK-SAME: () #[[ATTR0]] {
347
+ ; CHECK-NEXT: ret { <2 x ptr addrspace(8)>, <2 x i32> } zeroinitializer
348
+ ;
349
+ %ret = addrspacecast <2 x ptr > zeroinitializer to <2 x ptr addrspace (7 )>
350
+ ret <2 x ptr addrspace (7 )> %ret
351
+ }
352
+
353
+ define i1 @test_null (ptr addrspace (7 ) %p ) {
354
+ ; CHECK-LABEL: define i1 @test_null
355
+ ; CHECK-SAME: ({ ptr addrspace(8), i32 } [[P:%.*]]) #[[ATTR0]] {
356
+ ; CHECK-NEXT: [[P_RSRC:%.*]] = extractvalue { ptr addrspace(8), i32 } [[P]], 0
357
+ ; CHECK-NEXT: [[P_OFF:%.*]] = extractvalue { ptr addrspace(8), i32 } [[P]], 1
358
+ ; CHECK-NEXT: [[IS_NULL_RSRC:%.*]] = icmp eq ptr addrspace(8) [[P_RSRC]], null
359
+ ; CHECK-NEXT: [[IS_NULL_OFF:%.*]] = icmp eq i32 [[P_OFF]], 0
360
+ ; CHECK-NEXT: [[IS_NULL:%.*]] = and i1 [[IS_NULL_RSRC]], [[IS_NULL_OFF]]
361
+ ; CHECK-NEXT: ret i1 [[IS_NULL]]
362
+ ;
363
+ %is.null = icmp eq ptr addrspace (7 ) %p , addrspacecast (ptr null to ptr addrspace (7 ))
364
+ ret i1 %is.null
365
+ }
366
+
367
+ define ptr addrspace (7 ) @addrspacecast_undef () {
368
+ ; CHECK-LABEL: define { ptr addrspace(8), i32 } @addrspacecast_undef
369
+ ; CHECK-SAME: () #[[ATTR0]] {
370
+ ; CHECK-NEXT: ret { ptr addrspace(8), i32 } undef
371
+ ;
372
+ %ret = addrspacecast ptr undef to ptr addrspace (7 )
373
+ ret ptr addrspace (7 ) %ret
374
+ }
375
+
376
+ define <2 x ptr addrspace (7 )> @addrspacecast_undef_vec () {
377
+ ; CHECK-LABEL: define { <2 x ptr addrspace(8)>, <2 x i32> } @addrspacecast_undef_vec
378
+ ; CHECK-SAME: () #[[ATTR0]] {
379
+ ; CHECK-NEXT: ret { <2 x ptr addrspace(8)>, <2 x i32> } undef
380
+ ;
381
+ %ret = addrspacecast <2 x ptr > undef to <2 x ptr addrspace (7 )>
382
+ ret <2 x ptr addrspace (7 )> %ret
383
+ }
384
+
385
+ define ptr addrspace (7 ) @addrspacecast_poison () {
386
+ ; CHECK-LABEL: define { ptr addrspace(8), i32 } @addrspacecast_poison
387
+ ; CHECK-SAME: () #[[ATTR0]] {
388
+ ; CHECK-NEXT: ret { ptr addrspace(8), i32 } poison
389
+ ;
390
+ %ret = addrspacecast ptr poison to ptr addrspace (7 )
391
+ ret ptr addrspace (7 ) %ret
392
+ }
393
+
394
+ define <2 x ptr addrspace (7 )> @addrspacecast_poison_vec () {
395
+ ; CHECK-LABEL: define { <2 x ptr addrspace(8)>, <2 x i32> } @addrspacecast_poison_vec
396
+ ; CHECK-SAME: () #[[ATTR0]] {
397
+ ; CHECK-NEXT: ret { <2 x ptr addrspace(8)>, <2 x i32> } poison
398
+ ;
399
+ %ret = addrspacecast <2 x ptr > poison to <2 x ptr addrspace (7 )>
400
+ ret <2 x ptr addrspace (7 )> %ret
401
+ }
402
+
335
403
declare ptr addrspace (7 ) @llvm.amdgcn.make.buffer.rsrc.p7.p1 (ptr addrspace (1 ), i16 , i32 , i32 )
336
404
337
405
define ptr addrspace (7 ) @make_buffer_rsrc (ptr addrspace (1 ) %buf , i16 %stride , i32 %numRecords , i32 %flags ) {
0 commit comments