11; NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
22; RUN: llc -global-isel -mtriple=amdgcn-amd-amdhsa -mcpu=hawaii -stop-after=legalizer < %s | FileCheck -check-prefix=GCN %s
3- ; RUN: llc -global-isel -mtriple=amdgcn-amd-amdpal -mcpu=hawaii -stop-after=legalizer < %s | FileCheck -check-prefix=GCN %s
3+ ; RUN: llc -global-isel -mtriple=amdgcn-amd-amdpal -mcpu=hawaii -stop-after=legalizer < %s | FileCheck -check-prefix=GCN-PAL %s
44
55@external_constant = external addrspace (4 ) constant i32 , align 4
66@external_constant32 = external addrspace (6 ) constant i32 , align 4
1414
1515
1616define ptr addrspace (4 ) @external_constant_got () {
17+
1718 ; GCN-LABEL: name: external_constant_got
1819 ; GCN: bb.1 (%ir-block.0):
1920 ; GCN-NEXT: [[SI_PC_ADD_REL_OFFSET:%[0-9]+]]:sreg_64(p4) = SI_PC_ADD_REL_OFFSET target-flags(amdgpu-gotprel32-lo) @external_constant + 4, target-flags(amdgpu-gotprel32-hi) @external_constant + 12, implicit-def $scc
@@ -22,10 +23,19 @@ define ptr addrspace(4) @external_constant_got() {
2223 ; GCN-NEXT: $vgpr0 = COPY [[UV]](s32)
2324 ; GCN-NEXT: $vgpr1 = COPY [[UV1]](s32)
2425 ; GCN-NEXT: SI_RETURN implicit $vgpr0, implicit $vgpr1
26+ ;
27+ ; GCN-PAL-LABEL: name: external_constant_got
28+ ; GCN-PAL: bb.1 (%ir-block.0):
29+ ; GCN-PAL-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32(s32) = S_MOV_B32 target-flags(amdgpu-abs32-lo) @external_constant
30+ ; GCN-PAL-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32(s32) = S_MOV_B32 target-flags(amdgpu-abs32-hi) @external_constant
31+ ; GCN-PAL-NEXT: $vgpr0 = COPY [[S_MOV_B32_]](s32)
32+ ; GCN-PAL-NEXT: $vgpr1 = COPY [[S_MOV_B32_1]](s32)
33+ ; GCN-PAL-NEXT: SI_RETURN implicit $vgpr0, implicit $vgpr1
2534 ret ptr addrspace (4 ) @external_constant
2635}
2736
2837define ptr addrspace (1 ) @external_global_got () {
38+
2939 ; GCN-LABEL: name: external_global_got
3040 ; GCN: bb.1 (%ir-block.0):
3141 ; GCN-NEXT: [[SI_PC_ADD_REL_OFFSET:%[0-9]+]]:sreg_64(p4) = SI_PC_ADD_REL_OFFSET target-flags(amdgpu-gotprel32-lo) @external_global + 4, target-flags(amdgpu-gotprel32-hi) @external_global + 12, implicit-def $scc
@@ -34,10 +44,19 @@ define ptr addrspace(1) @external_global_got() {
3444 ; GCN-NEXT: $vgpr0 = COPY [[UV]](s32)
3545 ; GCN-NEXT: $vgpr1 = COPY [[UV1]](s32)
3646 ; GCN-NEXT: SI_RETURN implicit $vgpr0, implicit $vgpr1
47+ ;
48+ ; GCN-PAL-LABEL: name: external_global_got
49+ ; GCN-PAL: bb.1 (%ir-block.0):
50+ ; GCN-PAL-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32(s32) = S_MOV_B32 target-flags(amdgpu-abs32-lo) @external_global
51+ ; GCN-PAL-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32(s32) = S_MOV_B32 target-flags(amdgpu-abs32-hi) @external_global
52+ ; GCN-PAL-NEXT: $vgpr0 = COPY [[S_MOV_B32_]](s32)
53+ ; GCN-PAL-NEXT: $vgpr1 = COPY [[S_MOV_B32_1]](s32)
54+ ; GCN-PAL-NEXT: SI_RETURN implicit $vgpr0, implicit $vgpr1
3755 ret ptr addrspace (1 ) @external_global
3856}
3957
4058define ptr addrspace (999 ) @external_other_got () {
59+
4160 ; GCN-LABEL: name: external_other_got
4261 ; GCN: bb.1 (%ir-block.0):
4362 ; GCN-NEXT: [[SI_PC_ADD_REL_OFFSET:%[0-9]+]]:sreg_64(p4) = SI_PC_ADD_REL_OFFSET target-flags(amdgpu-gotprel32-lo) @external_other + 4, target-flags(amdgpu-gotprel32-hi) @external_other + 12, implicit-def $scc
@@ -46,59 +65,108 @@ define ptr addrspace(999) @external_other_got() {
4665 ; GCN-NEXT: $vgpr0 = COPY [[UV]](s32)
4766 ; GCN-NEXT: $vgpr1 = COPY [[UV1]](s32)
4867 ; GCN-NEXT: SI_RETURN implicit $vgpr0, implicit $vgpr1
68+ ;
69+ ; GCN-PAL-LABEL: name: external_other_got
70+ ; GCN-PAL: bb.1 (%ir-block.0):
71+ ; GCN-PAL-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32(s32) = S_MOV_B32 target-flags(amdgpu-abs32-lo) @external_other
72+ ; GCN-PAL-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32(s32) = S_MOV_B32 target-flags(amdgpu-abs32-hi) @external_other
73+ ; GCN-PAL-NEXT: $vgpr0 = COPY [[S_MOV_B32_]](s32)
74+ ; GCN-PAL-NEXT: $vgpr1 = COPY [[S_MOV_B32_1]](s32)
75+ ; GCN-PAL-NEXT: SI_RETURN implicit $vgpr0, implicit $vgpr1
4976 ret ptr addrspace (999 ) @external_other
5077}
5178
5279define ptr addrspace (4 ) @internal_constant_pcrel () {
80+
5381 ; GCN-LABEL: name: internal_constant_pcrel
5482 ; GCN: bb.1 (%ir-block.0):
5583 ; GCN-NEXT: [[SI_PC_ADD_REL_OFFSET:%[0-9]+]]:sreg_64(p4) = SI_PC_ADD_REL_OFFSET target-flags(amdgpu-rel32-lo) @internal_constant + 4, target-flags(amdgpu-rel32-hi) @internal_constant + 12, implicit-def $scc
5684 ; GCN-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[SI_PC_ADD_REL_OFFSET]](p4)
5785 ; GCN-NEXT: $vgpr0 = COPY [[UV]](s32)
5886 ; GCN-NEXT: $vgpr1 = COPY [[UV1]](s32)
5987 ; GCN-NEXT: SI_RETURN implicit $vgpr0, implicit $vgpr1
88+ ;
89+ ; GCN-PAL-LABEL: name: internal_constant_pcrel
90+ ; GCN-PAL: bb.1 (%ir-block.0):
91+ ; GCN-PAL-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32(s32) = S_MOV_B32 target-flags(amdgpu-abs32-lo) @internal_constant
92+ ; GCN-PAL-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32(s32) = S_MOV_B32 target-flags(amdgpu-abs32-hi) @internal_constant
93+ ; GCN-PAL-NEXT: $vgpr0 = COPY [[S_MOV_B32_]](s32)
94+ ; GCN-PAL-NEXT: $vgpr1 = COPY [[S_MOV_B32_1]](s32)
95+ ; GCN-PAL-NEXT: SI_RETURN implicit $vgpr0, implicit $vgpr1
6096 ret ptr addrspace (4 ) @internal_constant
6197}
6298
6399define ptr addrspace (1 ) @internal_global_pcrel () {
100+
64101 ; GCN-LABEL: name: internal_global_pcrel
65102 ; GCN: bb.1 (%ir-block.0):
66103 ; GCN-NEXT: [[SI_PC_ADD_REL_OFFSET:%[0-9]+]]:sreg_64(p1) = SI_PC_ADD_REL_OFFSET target-flags(amdgpu-rel32-lo) @internal_global + 4, target-flags(amdgpu-rel32-hi) @internal_global + 12, implicit-def $scc
67104 ; GCN-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[SI_PC_ADD_REL_OFFSET]](p1)
68105 ; GCN-NEXT: $vgpr0 = COPY [[UV]](s32)
69106 ; GCN-NEXT: $vgpr1 = COPY [[UV1]](s32)
70107 ; GCN-NEXT: SI_RETURN implicit $vgpr0, implicit $vgpr1
108+ ;
109+ ; GCN-PAL-LABEL: name: internal_global_pcrel
110+ ; GCN-PAL: bb.1 (%ir-block.0):
111+ ; GCN-PAL-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32(s32) = S_MOV_B32 target-flags(amdgpu-abs32-lo) @internal_global
112+ ; GCN-PAL-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32(s32) = S_MOV_B32 target-flags(amdgpu-abs32-hi) @internal_global
113+ ; GCN-PAL-NEXT: $vgpr0 = COPY [[S_MOV_B32_]](s32)
114+ ; GCN-PAL-NEXT: $vgpr1 = COPY [[S_MOV_B32_1]](s32)
115+ ; GCN-PAL-NEXT: SI_RETURN implicit $vgpr0, implicit $vgpr1
71116 ret ptr addrspace (1 ) @internal_global
72117}
73118
74119define ptr addrspace (999 ) @internal_other_pcrel () {
120+
75121 ; GCN-LABEL: name: internal_other_pcrel
76122 ; GCN: bb.1 (%ir-block.0):
77123 ; GCN-NEXT: [[SI_PC_ADD_REL_OFFSET:%[0-9]+]]:sreg_64(p999) = SI_PC_ADD_REL_OFFSET target-flags(amdgpu-rel32-lo) @internal_other + 4, target-flags(amdgpu-rel32-hi) @internal_other + 12, implicit-def $scc
78124 ; GCN-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[SI_PC_ADD_REL_OFFSET]](p999)
79125 ; GCN-NEXT: $vgpr0 = COPY [[UV]](s32)
80126 ; GCN-NEXT: $vgpr1 = COPY [[UV1]](s32)
81127 ; GCN-NEXT: SI_RETURN implicit $vgpr0, implicit $vgpr1
128+ ;
129+ ; GCN-PAL-LABEL: name: internal_other_pcrel
130+ ; GCN-PAL: bb.1 (%ir-block.0):
131+ ; GCN-PAL-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32(s32) = S_MOV_B32 target-flags(amdgpu-abs32-lo) @internal_other
132+ ; GCN-PAL-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32(s32) = S_MOV_B32 target-flags(amdgpu-abs32-hi) @internal_other
133+ ; GCN-PAL-NEXT: $vgpr0 = COPY [[S_MOV_B32_]](s32)
134+ ; GCN-PAL-NEXT: $vgpr1 = COPY [[S_MOV_B32_1]](s32)
135+ ; GCN-PAL-NEXT: SI_RETURN implicit $vgpr0, implicit $vgpr1
82136 ret ptr addrspace (999 ) @internal_other
83137}
84138
85139define ptr addrspace (6 ) @external_constant32_got () {
140+
86141 ; GCN-LABEL: name: external_constant32_got
87142 ; GCN: bb.1 (%ir-block.0):
88143 ; GCN-NEXT: [[SI_PC_ADD_REL_OFFSET:%[0-9]+]]:sreg_64(p4) = SI_PC_ADD_REL_OFFSET target-flags(amdgpu-gotprel32-lo) @external_constant32 + 4, target-flags(amdgpu-gotprel32-hi) @external_constant32 + 12, implicit-def $scc
89144 ; GCN-NEXT: [[LOAD:%[0-9]+]]:_(p4) = G_LOAD [[SI_PC_ADD_REL_OFFSET]](p4) :: (dereferenceable invariant load (p4) from got, addrspace 4)
90145 ; GCN-NEXT: [[EXTRACT:%[0-9]+]]:_(p6) = G_EXTRACT [[LOAD]](p4), 0
91146 ; GCN-NEXT: $vgpr0 = COPY [[EXTRACT]](p6)
92147 ; GCN-NEXT: SI_RETURN implicit $vgpr0
148+ ;
149+ ; GCN-PAL-LABEL: name: external_constant32_got
150+ ; GCN-PAL: bb.1 (%ir-block.0):
151+ ; GCN-PAL-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32(p6) = S_MOV_B32 target-flags(amdgpu-abs32-lo) @external_constant32
152+ ; GCN-PAL-NEXT: $vgpr0 = COPY [[S_MOV_B32_]](p6)
153+ ; GCN-PAL-NEXT: SI_RETURN implicit $vgpr0
93154 ret ptr addrspace (6 ) @external_constant32
94155}
95156
96157define ptr addrspace (6 ) @internal_constant32_pcrel () {
158+
97159 ; GCN-LABEL: name: internal_constant32_pcrel
98160 ; GCN: bb.1 (%ir-block.0):
99161 ; GCN-NEXT: [[SI_PC_ADD_REL_OFFSET:%[0-9]+]]:sreg_64(p4) = SI_PC_ADD_REL_OFFSET target-flags(amdgpu-rel32-lo) @internal_constant32 + 4, target-flags(amdgpu-rel32-hi) @internal_constant32 + 12, implicit-def $scc
100162 ; GCN-NEXT: [[EXTRACT:%[0-9]+]]:_(p6) = G_EXTRACT [[SI_PC_ADD_REL_OFFSET]](p4), 0
101163 ; GCN-NEXT: $vgpr0 = COPY [[EXTRACT]](p6)
102164 ; GCN-NEXT: SI_RETURN implicit $vgpr0
165+ ;
166+ ; GCN-PAL-LABEL: name: internal_constant32_pcrel
167+ ; GCN-PAL: bb.1 (%ir-block.0):
168+ ; GCN-PAL-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32(p6) = S_MOV_B32 target-flags(amdgpu-abs32-lo) @internal_constant32
169+ ; GCN-PAL-NEXT: $vgpr0 = COPY [[S_MOV_B32_]](p6)
170+ ; GCN-PAL-NEXT: SI_RETURN implicit $vgpr0
103171 ret ptr addrspace (6 ) @internal_constant32
104172}
0 commit comments