| ;RUN: llc < %s -mtriple=amdgpu6.00-- | FileCheck -check-prefixes=CHECK,GCN %s | |
| ;RUN: llc < %s -mtriple=r600-- | FileCheck -check-prefixes=CHECK,R600 %s | |
| %struct.S = type { ptr addrspace(5), ptr addrspace(1), ptr addrspace(4), ptr addrspace(3), ptr, ptr addrspace(2)} | |
| ; CHECK-LABEL: nullptr_priv: | |
| ; CHECK-NEXT: .long -1 | |
| @nullptr_priv = global ptr addrspace(5) addrspacecast (ptr null to ptr addrspace(5)) | |
| ; CHECK-LABEL: nullptr_glob: | |
| ; GCN-NEXT: .quad 0 | |
| ; R600-NEXT: .long 0 | |
| @nullptr_glob = global ptr addrspace(1) addrspacecast (ptr null to ptr addrspace(1)) | |
| ; CHECK-LABEL: nullptr_const: | |
| ; GCN-NEXT: .quad 0 | |
| ; R600-NEXT: .long 0 | |
| @nullptr_const = global ptr addrspace(4) addrspacecast (ptr null to ptr addrspace(4)) | |
| ; CHECK-LABEL: nullptr_local: | |
| ; CHECK-NEXT: .long -1 | |
| @nullptr_local = global ptr addrspace(3) addrspacecast (ptr null to ptr addrspace(3)) | |
| ; CHECK-LABEL: nullptr_region: | |
| ; CHECK-NEXT: .long -1 | |
| @nullptr_region = global ptr addrspace(2) addrspacecast (ptr null to ptr addrspace(2)) | |
| ; CHECK-LABEL: nullptr6: | |
| ; R600-NEXT: .long 0 | |
| @nullptr6 = global ptr addrspace(6) addrspacecast (ptr null to ptr addrspace(6)) | |
| ; FIXME: AsmPrinter can't handle 128-bit constants | |
| ; FIXME-LABEL: nullptr7: | |
| ; FIXME-R600-NEXT: .long 0 | |
| ; FIXME @nullptr7 = global ptr addrspace(7) addrspacecast (ptr null to ptr addrspace(7)) | |
| ; FIXME-LABEL: nullptr8: | |
| ; FIXME-R600-NEXT: .long 0 | |
| ; FIXME @nullptr8 = global ptr addrspace(8) addrspacecast (ptr null to ptr addrspace(8)) | |
| ; FIXME-LABEL: nullptr9: | |
| ; FIXME-R600-NEXT: .long 0 | |
| ; FIXME @nullptr9 = global ptr addrspace(9) addrspacecast (ptr null to ptr addrspace(9)) | |
| ; CHECK-LABEL: nullptr10: | |
| ; R600-NEXT: .long 0 | |
| @nullptr10 = global ptr addrspace(10) addrspacecast (ptr null to ptr addrspace(10)) | |
| ; CHECK-LABEL: nullptr11: | |
| ; R600-NEXT: .long 0 | |
| @nullptr11 = global ptr addrspace(11) addrspacecast (ptr null to ptr addrspace(11)) | |
| ; CHECK-LABEL: nullptr12: | |
| ; R600-NEXT: .long 0 | |
| @nullptr12 = global ptr addrspace(12) addrspacecast (ptr null to ptr addrspace(12)) | |
| ; Address space 13 is the VGPR address space, whose null pointer is -1 like the | |
| ; other address spaces where zero is a valid address. R600 reaches the same | |
| ; value through the shared numbering, where 13 is CONSTANT_BUFFER_5. | |
| ; CHECK-LABEL: nullptr13: | |
| ; CHECK-NEXT: .long -1 | |
| @nullptr13 = global ptr addrspace(13) addrspacecast (ptr null to ptr addrspace(13)) | |
| ; CHECK-LABEL: nullptr14: | |
| ; R600-NEXT: .long 0 | |
| @nullptr14 = global ptr addrspace(14) addrspacecast (ptr null to ptr addrspace(14)) | |
| ; CHECK-LABEL: nullptr15: | |
| ; R600-NEXT: .long 0 | |
| @nullptr15 = global ptr addrspace(15) addrspacecast (ptr null to ptr addrspace(15)) | |
| ; CHECK-LABEL: nullptr16: | |
| ; R600-NEXT: .long 0 | |
| @nullptr16 = global ptr addrspace(16) addrspacecast (ptr null to ptr addrspace(16)) | |
| ; CHECK-LABEL: nullptr17: | |
| ; R600-NEXT: .long 0 | |
| @nullptr17 = global ptr addrspace(17) addrspacecast (ptr null to ptr addrspace(17)) | |
| ; CHECK-LABEL: nullptr18: | |
| ; R600-NEXT: .long 0 | |
| @nullptr18 = global ptr addrspace(18) addrspacecast (ptr null to ptr addrspace(18)) | |
| ; CHECK-LABEL: nullptr19: | |
| ; R600-NEXT: .long 0 | |
| @nullptr19 = global ptr addrspace(19) addrspacecast (ptr null to ptr addrspace(19)) | |
| ; CHECK-LABEL: nullptr20: | |
| ; R600-NEXT: .long 0 | |
| @nullptr20 = global ptr addrspace(20) addrspacecast (ptr null to ptr addrspace(20)) | |
| ; CHECK-LABEL: nullptr21: | |
| ; R600-NEXT: .long 0 | |
| @nullptr21 = global ptr addrspace(21) addrspacecast (ptr null to ptr addrspace(21)) | |
| ; CHECK-LABEL: nullptr22: | |
| ; R600-NEXT: .long 0 | |
| @nullptr22 = global ptr addrspace(22) addrspacecast (ptr null to ptr addrspace(22)) | |
| ; CHECK-LABEL: nullptr23: | |
| ; R600-NEXT: .long 0 | |
| @nullptr23 = global ptr addrspace(23) addrspacecast (ptr null to ptr addrspace(23)) | |
| ; CHECK-LABEL: structWithPointers: | |
| ; CHECK-NEXT: .long -1 | |
| ; GCN-NEXT: .zero 4 | |
| ; GCN-NEXT: .quad 0 | |
| ; R600-NEXT: .long 0 | |
| ; GCN-NEXT: .quad 0 | |
| ; R600-NEXT: .long 0 | |
| ; CHECK-NEXT: .long -1 | |
| ; GCN-NEXT: .zero 4 | |
| ; GCN-NEXT: .quad 0 | |
| ; R600-NEXT: .long 0 | |
| ; CHECK-NEXT: .long -1 | |
| ; GCN-NEXT: .zero 4 | |
| @structWithPointers = addrspace(1) global %struct.S { | |
| ptr addrspace(5) addrspacecast (ptr null to ptr addrspace(5)), | |
| ptr addrspace(1) addrspacecast (ptr null to ptr addrspace(1)), | |
| ptr addrspace(4) addrspacecast (ptr null to ptr addrspace(4)), | |
| ptr addrspace(3) addrspacecast (ptr null to ptr addrspace(3)), | |
| ptr null, | |
| ptr addrspace(2) addrspacecast (ptr null to ptr addrspace(2))}, align 4 |