528 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple=amdgcn -mcpu=fiji -O0 -run-pass=legalizer --amdhsa-code-object-version=4 -o - %s | FileCheck -check-prefixes=GCN,SIVI %s3# RUN: llc -mtriple=amdgcn -mcpu=tahiti -O0 -run-pass=legalizer --amdhsa-code-object-version=4 -o - %s | FileCheck -check-prefixes=GCN,SIVI %s4# RUN: llc -mtriple=amdgcn -mcpu=gfx900 -O0 -run-pass=legalizer --amdhsa-code-object-version=4 -o - %s | FileCheck -check-prefixes=GCN,GFX9 %s5# RUN: llc -mtriple=amdgcn -mcpu=gfx1010 -O0 -run-pass=legalizer --amdhsa-code-object-version=4 -o - %s | FileCheck -check-prefixes=GCN,GFX9 %s6# RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -O0 -run-pass=legalizer --amdhsa-code-object-version=4 -o - %s | FileCheck -check-prefixes=GCN,GFX9 %s7 8---9name: test_addrspacecast_p0_to_p110machineFunctionInfo:11 argumentInfo:12 queuePtr: { reg: '$sgpr4_sgpr5' }13 14body: |15 bb.0:16 liveins: $vgpr0_vgpr117 18 ; GCN-LABEL: name: test_addrspacecast_p0_to_p119 ; GCN: liveins: $vgpr0_vgpr120 ; GCN-NEXT: {{ $}}21 ; GCN-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $vgpr0_vgpr122 ; GCN-NEXT: [[BITCAST:%[0-9]+]]:_(p1) = G_BITCAST [[COPY]](p0)23 ; GCN-NEXT: $vgpr0_vgpr1 = COPY [[BITCAST]](p1)24 %0:_(p0) = COPY $vgpr0_vgpr125 %1:_(p1) = G_ADDRSPACE_CAST %026 $vgpr0_vgpr1 = COPY %127...28 29---30name: test_addrspacecast_p1_to_p031machineFunctionInfo:32 argumentInfo:33 queuePtr: { reg: '$sgpr4_sgpr5' }34 35body: |36 bb.0:37 liveins: $vgpr0_vgpr138 39 ; GCN-LABEL: name: test_addrspacecast_p1_to_p040 ; GCN: liveins: $vgpr0_vgpr141 ; GCN-NEXT: {{ $}}42 ; GCN-NEXT: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr143 ; GCN-NEXT: [[BITCAST:%[0-9]+]]:_(p0) = G_BITCAST [[COPY]](p1)44 ; GCN-NEXT: $vgpr0_vgpr1 = COPY [[BITCAST]](p0)45 %0:_(p1) = COPY $vgpr0_vgpr146 %1:_(p0) = G_ADDRSPACE_CAST %047 $vgpr0_vgpr1 = COPY %148...49 50---51name: test_addrspacecast_p0_to_p452machineFunctionInfo:53 argumentInfo:54 queuePtr: { reg: '$sgpr4_sgpr5' }55body: |56 bb.0:57 liveins: $vgpr0_vgpr158 59 ; GCN-LABEL: name: test_addrspacecast_p0_to_p460 ; GCN: liveins: $vgpr0_vgpr161 ; GCN-NEXT: {{ $}}62 ; GCN-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $vgpr0_vgpr163 ; GCN-NEXT: [[BITCAST:%[0-9]+]]:_(p4) = G_BITCAST [[COPY]](p0)64 ; GCN-NEXT: $vgpr0_vgpr1 = COPY [[BITCAST]](p4)65 %0:_(p0) = COPY $vgpr0_vgpr166 %1:_(p4) = G_ADDRSPACE_CAST %067 $vgpr0_vgpr1 = COPY %168...69 70---71name: test_addrspacecast_p4_to_p072machineFunctionInfo:73 argumentInfo:74 queuePtr: { reg: '$sgpr4_sgpr5' }75body: |76 bb.0:77 liveins: $vgpr0_vgpr178 79 ; GCN-LABEL: name: test_addrspacecast_p4_to_p080 ; GCN: liveins: $vgpr0_vgpr181 ; GCN-NEXT: {{ $}}82 ; GCN-NEXT: [[COPY:%[0-9]+]]:_(p4) = COPY $vgpr0_vgpr183 ; GCN-NEXT: [[BITCAST:%[0-9]+]]:_(p0) = G_BITCAST [[COPY]](p4)84 ; GCN-NEXT: $vgpr0_vgpr1 = COPY [[BITCAST]](p0)85 %0:_(p4) = COPY $vgpr0_vgpr186 %1:_(p0) = G_ADDRSPACE_CAST %087 $vgpr0_vgpr1 = COPY %188...89 90---91name: test_addrspacecast_p0_to_p99992machineFunctionInfo:93 argumentInfo:94 queuePtr: { reg: '$sgpr4_sgpr5' }95body: |96 bb.0:97 liveins: $vgpr0_vgpr198 99 ; GCN-LABEL: name: test_addrspacecast_p0_to_p999100 ; GCN: liveins: $vgpr0_vgpr1101 ; GCN-NEXT: {{ $}}102 ; GCN-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $vgpr0_vgpr1103 ; GCN-NEXT: [[BITCAST:%[0-9]+]]:_(p999) = G_BITCAST [[COPY]](p0)104 ; GCN-NEXT: $vgpr0_vgpr1 = COPY [[BITCAST]](p999)105 %0:_(p0) = COPY $vgpr0_vgpr1106 %1:_(p999) = G_ADDRSPACE_CAST %0107 $vgpr0_vgpr1 = COPY %1108...109 110---111name: test_addrspacecast_p999_to_p0112machineFunctionInfo:113 argumentInfo:114 queuePtr: { reg: '$sgpr4_sgpr5' }115body: |116 bb.0:117 liveins: $vgpr0_vgpr1118 119 ; GCN-LABEL: name: test_addrspacecast_p999_to_p0120 ; GCN: liveins: $vgpr0_vgpr1121 ; GCN-NEXT: {{ $}}122 ; GCN-NEXT: [[COPY:%[0-9]+]]:_(p999) = COPY $vgpr0_vgpr1123 ; GCN-NEXT: [[BITCAST:%[0-9]+]]:_(p0) = G_BITCAST [[COPY]](p999)124 ; GCN-NEXT: $vgpr0_vgpr1 = COPY [[BITCAST]](p0)125 %0:_(p999) = COPY $vgpr0_vgpr1126 %1:_(p0) = G_ADDRSPACE_CAST %0127 $vgpr0_vgpr1 = COPY %1128...129 130---131name: test_addrspacecast_p5_to_p0132machineFunctionInfo:133 argumentInfo:134 queuePtr: { reg: '$sgpr4_sgpr5' }135body: |136 bb.0:137 liveins: $vgpr0138 139 ; SIVI-LABEL: name: test_addrspacecast_p5_to_p0140 ; SIVI: liveins: $vgpr0, $sgpr4_sgpr5141 ; SIVI-NEXT: {{ $}}142 ; SIVI-NEXT: [[COPY:%[0-9]+]]:sgpr_64(p4) = COPY $sgpr4_sgpr5143 ; SIVI-NEXT: [[COPY1:%[0-9]+]]:_(p5) = COPY $vgpr0144 ; SIVI-NEXT: [[PTRTOINT:%[0-9]+]]:_(s32) = G_PTRTOINT [[COPY1]](p5)145 ; SIVI-NEXT: [[COPY2:%[0-9]+]]:_(p4) = COPY [[COPY]](p4)146 ; SIVI-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 68147 ; SIVI-NEXT: [[PTR_ADD:%[0-9]+]]:_(p4) = nuw inbounds G_PTR_ADD [[COPY2]], [[C]](s64)148 ; SIVI-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p4) :: (dereferenceable invariant load (s32), addrspace 4)149 ; SIVI-NEXT: [[MV:%[0-9]+]]:_(p0) = G_MERGE_VALUES [[PTRTOINT]](s32), [[LOAD]](s32)150 ; SIVI-NEXT: [[C1:%[0-9]+]]:_(p5) = G_CONSTANT i32 -1151 ; SIVI-NEXT: [[C2:%[0-9]+]]:_(p0) = G_CONSTANT i64 0152 ; SIVI-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[COPY1]](p5), [[C1]]153 ; SIVI-NEXT: [[SELECT:%[0-9]+]]:_(p0) = G_SELECT [[ICMP]](s1), [[MV]], [[C2]]154 ; SIVI-NEXT: $vgpr0_vgpr1 = COPY [[SELECT]](p0)155 ;156 ; GFX9-LABEL: name: test_addrspacecast_p5_to_p0157 ; GFX9: liveins: $vgpr0158 ; GFX9-NEXT: {{ $}}159 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(p5) = COPY $vgpr0160 ; GFX9-NEXT: [[PTRTOINT:%[0-9]+]]:_(s32) = G_PTRTOINT [[COPY]](p5)161 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:sreg_64(s64) = COPY $src_private_base162 ; GFX9-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](s64)163 ; GFX9-NEXT: [[MV:%[0-9]+]]:_(p0) = G_MERGE_VALUES [[PTRTOINT]](s32), [[UV1]](s32)164 ; GFX9-NEXT: [[C:%[0-9]+]]:_(p5) = G_CONSTANT i32 -1165 ; GFX9-NEXT: [[C1:%[0-9]+]]:_(p0) = G_CONSTANT i64 0166 ; GFX9-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[COPY]](p5), [[C]]167 ; GFX9-NEXT: [[SELECT:%[0-9]+]]:_(p0) = G_SELECT [[ICMP]](s1), [[MV]], [[C1]]168 ; GFX9-NEXT: $vgpr0_vgpr1 = COPY [[SELECT]](p0)169 %0:_(p5) = COPY $vgpr0170 %1:_(p0) = G_ADDRSPACE_CAST %0171 $vgpr0_vgpr1 = COPY %1172...173 174---175name: test_addrspacecast_p0_to_p5176machineFunctionInfo:177 argumentInfo:178 queuePtr: { reg: '$sgpr4_sgpr5' }179body: |180 bb.0:181 liveins: $vgpr0_vgpr1182 183 ; GCN-LABEL: name: test_addrspacecast_p0_to_p5184 ; GCN: liveins: $vgpr0_vgpr1185 ; GCN-NEXT: {{ $}}186 ; GCN-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $vgpr0_vgpr1187 ; GCN-NEXT: [[C:%[0-9]+]]:_(p5) = G_CONSTANT i32 -1188 ; GCN-NEXT: [[C1:%[0-9]+]]:_(p0) = G_CONSTANT i64 0189 ; GCN-NEXT: [[EXTRACT:%[0-9]+]]:_(p5) = G_EXTRACT [[COPY]](p0), 0190 ; GCN-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[COPY]](p0), [[C1]]191 ; GCN-NEXT: [[SELECT:%[0-9]+]]:_(p5) = G_SELECT [[ICMP]](s1), [[EXTRACT]], [[C]]192 ; GCN-NEXT: $vgpr0 = COPY [[SELECT]](p5)193 %0:_(p0) = COPY $vgpr0_vgpr1194 %1:_(p5) = G_ADDRSPACE_CAST %0195 $vgpr0 = COPY %1196...197 198---199name: test_addrspacecast_p3_to_p0200machineFunctionInfo:201 argumentInfo:202 queuePtr: { reg: '$sgpr4_sgpr5' }203 204body: |205 bb.0:206 liveins: $vgpr0207 208 ; SIVI-LABEL: name: test_addrspacecast_p3_to_p0209 ; SIVI: liveins: $vgpr0, $sgpr4_sgpr5210 ; SIVI-NEXT: {{ $}}211 ; SIVI-NEXT: [[COPY:%[0-9]+]]:sgpr_64(p4) = COPY $sgpr4_sgpr5212 ; SIVI-NEXT: [[COPY1:%[0-9]+]]:_(p3) = COPY $vgpr0213 ; SIVI-NEXT: [[PTRTOINT:%[0-9]+]]:_(s32) = G_PTRTOINT [[COPY1]](p3)214 ; SIVI-NEXT: [[COPY2:%[0-9]+]]:_(p4) = COPY [[COPY]](p4)215 ; SIVI-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 64216 ; SIVI-NEXT: [[PTR_ADD:%[0-9]+]]:_(p4) = nuw inbounds G_PTR_ADD [[COPY2]], [[C]](s64)217 ; SIVI-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p4) :: (dereferenceable invariant load (s32), align 64, addrspace 4)218 ; SIVI-NEXT: [[MV:%[0-9]+]]:_(p0) = G_MERGE_VALUES [[PTRTOINT]](s32), [[LOAD]](s32)219 ; SIVI-NEXT: [[C1:%[0-9]+]]:_(p3) = G_CONSTANT i32 -1220 ; SIVI-NEXT: [[C2:%[0-9]+]]:_(p0) = G_CONSTANT i64 0221 ; SIVI-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[COPY1]](p3), [[C1]]222 ; SIVI-NEXT: [[SELECT:%[0-9]+]]:_(p0) = G_SELECT [[ICMP]](s1), [[MV]], [[C2]]223 ; SIVI-NEXT: $vgpr0_vgpr1 = COPY [[SELECT]](p0)224 ;225 ; GFX9-LABEL: name: test_addrspacecast_p3_to_p0226 ; GFX9: liveins: $vgpr0227 ; GFX9-NEXT: {{ $}}228 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(p3) = COPY $vgpr0229 ; GFX9-NEXT: [[PTRTOINT:%[0-9]+]]:_(s32) = G_PTRTOINT [[COPY]](p3)230 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:sreg_64(s64) = COPY $src_shared_base231 ; GFX9-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](s64)232 ; GFX9-NEXT: [[MV:%[0-9]+]]:_(p0) = G_MERGE_VALUES [[PTRTOINT]](s32), [[UV1]](s32)233 ; GFX9-NEXT: [[C:%[0-9]+]]:_(p3) = G_CONSTANT i32 -1234 ; GFX9-NEXT: [[C1:%[0-9]+]]:_(p0) = G_CONSTANT i64 0235 ; GFX9-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[COPY]](p3), [[C]]236 ; GFX9-NEXT: [[SELECT:%[0-9]+]]:_(p0) = G_SELECT [[ICMP]](s1), [[MV]], [[C1]]237 ; GFX9-NEXT: $vgpr0_vgpr1 = COPY [[SELECT]](p0)238 %0:_(p3) = COPY $vgpr0239 %1:_(p0) = G_ADDRSPACE_CAST %0240 $vgpr0_vgpr1 = COPY %1241...242 243---244name: test_addrspacecast_p0_to_p3245machineFunctionInfo:246 argumentInfo:247 queuePtr: { reg: '$sgpr4_sgpr5' }248body: |249 bb.0:250 liveins: $vgpr0_vgpr1251 252 ; GCN-LABEL: name: test_addrspacecast_p0_to_p3253 ; GCN: liveins: $vgpr0_vgpr1254 ; GCN-NEXT: {{ $}}255 ; GCN-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $vgpr0_vgpr1256 ; GCN-NEXT: [[C:%[0-9]+]]:_(p3) = G_CONSTANT i32 -1257 ; GCN-NEXT: [[C1:%[0-9]+]]:_(p0) = G_CONSTANT i64 0258 ; GCN-NEXT: [[EXTRACT:%[0-9]+]]:_(p3) = G_EXTRACT [[COPY]](p0), 0259 ; GCN-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[COPY]](p0), [[C1]]260 ; GCN-NEXT: [[SELECT:%[0-9]+]]:_(p3) = G_SELECT [[ICMP]](s1), [[EXTRACT]], [[C]]261 ; GCN-NEXT: $vgpr0 = COPY [[SELECT]](p3)262 %0:_(p0) = COPY $vgpr0_vgpr1263 %1:_(p3) = G_ADDRSPACE_CAST %0264 $vgpr0 = COPY %1265...266 267---268name: test_addrspacecast_v2p0_to_v2p1269machineFunctionInfo:270 argumentInfo:271 queuePtr: { reg: '$sgpr4_sgpr5' }272body: |273 bb.0:274 liveins: $vgpr0_vgpr1_vgpr2_vgpr3275 276 ; GCN-LABEL: name: test_addrspacecast_v2p0_to_v2p1277 ; GCN: liveins: $vgpr0_vgpr1_vgpr2_vgpr3278 ; GCN-NEXT: {{ $}}279 ; GCN-NEXT: [[COPY:%[0-9]+]]:_(<2 x p0>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3280 ; GCN-NEXT: [[UV:%[0-9]+]]:_(p0), [[UV1:%[0-9]+]]:_(p0) = G_UNMERGE_VALUES [[COPY]](<2 x p0>)281 ; GCN-NEXT: [[BITCAST:%[0-9]+]]:_(p1) = G_BITCAST [[UV]](p0)282 ; GCN-NEXT: [[BITCAST1:%[0-9]+]]:_(p1) = G_BITCAST [[UV1]](p0)283 ; GCN-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x p1>) = G_BUILD_VECTOR [[BITCAST]](p1), [[BITCAST1]](p1)284 ; GCN-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[BUILD_VECTOR]](<2 x p1>)285 %0:_(<2 x p0>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3286 %1:_(<2 x p1>) = G_ADDRSPACE_CAST %0287 $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %1288...289 290---291name: test_addrspacecast_v2p1_to_v2p0292machineFunctionInfo:293 argumentInfo:294 queuePtr: { reg: '$sgpr4_sgpr5' }295body: |296 bb.0:297 liveins: $vgpr0_vgpr1_vgpr2_vgpr3298 299 ; GCN-LABEL: name: test_addrspacecast_v2p1_to_v2p0300 ; GCN: liveins: $vgpr0_vgpr1_vgpr2_vgpr3301 ; GCN-NEXT: {{ $}}302 ; GCN-NEXT: [[COPY:%[0-9]+]]:_(<2 x p1>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3303 ; GCN-NEXT: [[UV:%[0-9]+]]:_(p1), [[UV1:%[0-9]+]]:_(p1) = G_UNMERGE_VALUES [[COPY]](<2 x p1>)304 ; GCN-NEXT: [[BITCAST:%[0-9]+]]:_(p0) = G_BITCAST [[UV]](p1)305 ; GCN-NEXT: [[BITCAST1:%[0-9]+]]:_(p0) = G_BITCAST [[UV1]](p1)306 ; GCN-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x p0>) = G_BUILD_VECTOR [[BITCAST]](p0), [[BITCAST1]](p0)307 ; GCN-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[BUILD_VECTOR]](<2 x p0>)308 %0:_(<2 x p1>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3309 %1:_(<2 x p0>) = G_ADDRSPACE_CAST %0310 $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %1311...312 313---314name: test_addrspacecast_v2p0_to_v2p3315machineFunctionInfo:316 argumentInfo:317 queuePtr: { reg: '$sgpr4_sgpr5' }318body: |319 bb.0:320 liveins: $vgpr0_vgpr1_vgpr2_vgpr3321 322 ; GCN-LABEL: name: test_addrspacecast_v2p0_to_v2p3323 ; GCN: liveins: $vgpr0_vgpr1_vgpr2_vgpr3324 ; GCN-NEXT: {{ $}}325 ; GCN-NEXT: [[COPY:%[0-9]+]]:_(<2 x p0>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3326 ; GCN-NEXT: [[UV:%[0-9]+]]:_(p0), [[UV1:%[0-9]+]]:_(p0) = G_UNMERGE_VALUES [[COPY]](<2 x p0>)327 ; GCN-NEXT: [[C:%[0-9]+]]:_(p3) = G_CONSTANT i32 -1328 ; GCN-NEXT: [[C1:%[0-9]+]]:_(p0) = G_CONSTANT i64 0329 ; GCN-NEXT: [[EXTRACT:%[0-9]+]]:_(p3) = G_EXTRACT [[UV]](p0), 0330 ; GCN-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV]](p0), [[C1]]331 ; GCN-NEXT: [[SELECT:%[0-9]+]]:_(p3) = G_SELECT [[ICMP]](s1), [[EXTRACT]], [[C]]332 ; GCN-NEXT: [[EXTRACT1:%[0-9]+]]:_(p3) = G_EXTRACT [[UV1]](p0), 0333 ; GCN-NEXT: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV1]](p0), [[C1]]334 ; GCN-NEXT: [[SELECT1:%[0-9]+]]:_(p3) = G_SELECT [[ICMP1]](s1), [[EXTRACT1]], [[C]]335 ; GCN-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x p3>) = G_BUILD_VECTOR [[SELECT]](p3), [[SELECT1]](p3)336 ; GCN-NEXT: $vgpr0_vgpr1 = COPY [[BUILD_VECTOR]](<2 x p3>)337 %0:_(<2 x p0>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3338 %1:_(<2 x p3>) = G_ADDRSPACE_CAST %0339 $vgpr0_vgpr1 = COPY %1340...341 342---343name: test_addrspacecast_v2p3_to_v2p0344machineFunctionInfo:345 argumentInfo:346 queuePtr: { reg: '$sgpr4_sgpr5' }347body: |348 bb.0:349 liveins: $vgpr0_vgpr1350 351 ; SIVI-LABEL: name: test_addrspacecast_v2p3_to_v2p0352 ; SIVI: liveins: $vgpr0_vgpr1, $sgpr4_sgpr5353 ; SIVI-NEXT: {{ $}}354 ; SIVI-NEXT: [[COPY:%[0-9]+]]:sgpr_64(p4) = COPY $sgpr4_sgpr5355 ; SIVI-NEXT: [[COPY1:%[0-9]+]]:_(<2 x p3>) = COPY $vgpr0_vgpr1356 ; SIVI-NEXT: [[UV:%[0-9]+]]:_(p3), [[UV1:%[0-9]+]]:_(p3) = G_UNMERGE_VALUES [[COPY1]](<2 x p3>)357 ; SIVI-NEXT: [[PTRTOINT:%[0-9]+]]:_(s32) = G_PTRTOINT [[UV]](p3)358 ; SIVI-NEXT: [[COPY2:%[0-9]+]]:_(p4) = COPY [[COPY]](p4)359 ; SIVI-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 64360 ; SIVI-NEXT: [[PTR_ADD:%[0-9]+]]:_(p4) = nuw inbounds G_PTR_ADD [[COPY2]], [[C]](s64)361 ; SIVI-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p4) :: (dereferenceable invariant load (s32), align 64, addrspace 4)362 ; SIVI-NEXT: [[MV:%[0-9]+]]:_(p0) = G_MERGE_VALUES [[PTRTOINT]](s32), [[LOAD]](s32)363 ; SIVI-NEXT: [[C1:%[0-9]+]]:_(p3) = G_CONSTANT i32 -1364 ; SIVI-NEXT: [[C2:%[0-9]+]]:_(p0) = G_CONSTANT i64 0365 ; SIVI-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV]](p3), [[C1]]366 ; SIVI-NEXT: [[SELECT:%[0-9]+]]:_(p0) = G_SELECT [[ICMP]](s1), [[MV]], [[C2]]367 ; SIVI-NEXT: [[PTRTOINT1:%[0-9]+]]:_(s32) = G_PTRTOINT [[UV1]](p3)368 ; SIVI-NEXT: [[COPY3:%[0-9]+]]:_(p4) = COPY [[COPY]](p4)369 ; SIVI-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p4) = nuw inbounds G_PTR_ADD [[COPY3]], [[C]](s64)370 ; SIVI-NEXT: [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD1]](p4) :: (dereferenceable invariant load (s32), align 64, addrspace 4)371 ; SIVI-NEXT: [[MV1:%[0-9]+]]:_(p0) = G_MERGE_VALUES [[PTRTOINT1]](s32), [[LOAD1]](s32)372 ; SIVI-NEXT: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV1]](p3), [[C1]]373 ; SIVI-NEXT: [[SELECT1:%[0-9]+]]:_(p0) = G_SELECT [[ICMP1]](s1), [[MV1]], [[C2]]374 ; SIVI-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x p0>) = G_BUILD_VECTOR [[SELECT]](p0), [[SELECT1]](p0)375 ; SIVI-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[BUILD_VECTOR]](<2 x p0>)376 ;377 ; GFX9-LABEL: name: test_addrspacecast_v2p3_to_v2p0378 ; GFX9: liveins: $vgpr0_vgpr1379 ; GFX9-NEXT: {{ $}}380 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(<2 x p3>) = COPY $vgpr0_vgpr1381 ; GFX9-NEXT: [[UV:%[0-9]+]]:_(p3), [[UV1:%[0-9]+]]:_(p3) = G_UNMERGE_VALUES [[COPY]](<2 x p3>)382 ; GFX9-NEXT: [[PTRTOINT:%[0-9]+]]:_(s32) = G_PTRTOINT [[UV]](p3)383 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:sreg_64(s64) = COPY $src_shared_base384 ; GFX9-NEXT: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](s64)385 ; GFX9-NEXT: [[MV:%[0-9]+]]:_(p0) = G_MERGE_VALUES [[PTRTOINT]](s32), [[UV3]](s32)386 ; GFX9-NEXT: [[C:%[0-9]+]]:_(p3) = G_CONSTANT i32 -1387 ; GFX9-NEXT: [[C1:%[0-9]+]]:_(p0) = G_CONSTANT i64 0388 ; GFX9-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV]](p3), [[C]]389 ; GFX9-NEXT: [[SELECT:%[0-9]+]]:_(p0) = G_SELECT [[ICMP]](s1), [[MV]], [[C1]]390 ; GFX9-NEXT: [[PTRTOINT1:%[0-9]+]]:_(s32) = G_PTRTOINT [[UV1]](p3)391 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:sreg_64(s64) = COPY $src_shared_base392 ; GFX9-NEXT: [[UV4:%[0-9]+]]:_(s32), [[UV5:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY2]](s64)393 ; GFX9-NEXT: [[MV1:%[0-9]+]]:_(p0) = G_MERGE_VALUES [[PTRTOINT1]](s32), [[UV5]](s32)394 ; GFX9-NEXT: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV1]](p3), [[C]]395 ; GFX9-NEXT: [[SELECT1:%[0-9]+]]:_(p0) = G_SELECT [[ICMP1]](s1), [[MV1]], [[C1]]396 ; GFX9-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x p0>) = G_BUILD_VECTOR [[SELECT]](p0), [[SELECT1]](p0)397 ; GFX9-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[BUILD_VECTOR]](<2 x p0>)398 %0:_(<2 x p3>) = COPY $vgpr0_vgpr1399 %1:_(<2 x p0>) = G_ADDRSPACE_CAST %0400 $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %1401...402 403---404name: test_addrspacecast_p4_to_p6405body: |406 bb.0:407 liveins: $vgpr0_vgpr1408 409 ; GCN-LABEL: name: test_addrspacecast_p4_to_p6410 ; GCN: liveins: $vgpr0_vgpr1411 ; GCN-NEXT: {{ $}}412 ; GCN-NEXT: [[COPY:%[0-9]+]]:_(p4) = COPY $vgpr0_vgpr1413 ; GCN-NEXT: [[EXTRACT:%[0-9]+]]:_(p6) = G_EXTRACT [[COPY]](p4), 0414 ; GCN-NEXT: $vgpr0 = COPY [[EXTRACT]](p6)415 %0:_(p4) = COPY $vgpr0_vgpr1416 %1:_(p6) = G_ADDRSPACE_CAST %0417 $vgpr0 = COPY %1418...419 420---421name: test_addrspacecast_p6_to_p4_0422body: |423 bb.0:424 liveins: $vgpr0425 426 ; GCN-LABEL: name: test_addrspacecast_p6_to_p4_0427 ; GCN: liveins: $vgpr0428 ; GCN-NEXT: {{ $}}429 ; GCN-NEXT: [[COPY:%[0-9]+]]:_(p6) = COPY $vgpr0430 ; GCN-NEXT: [[PTRTOINT:%[0-9]+]]:_(s32) = G_PTRTOINT [[COPY]](p6)431 ; GCN-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0432 ; GCN-NEXT: [[MV:%[0-9]+]]:_(p4) = G_MERGE_VALUES [[PTRTOINT]](s32), [[C]](s32)433 ; GCN-NEXT: $vgpr0_vgpr1 = COPY [[MV]](p4)434 %0:_(p6) = COPY $vgpr0435 %1:_(p4) = G_ADDRSPACE_CAST %0436 $vgpr0_vgpr1 = COPY %1437...438 439---440name: test_addrspacecast_p6_to_p4_0xdeadbeef441machineFunctionInfo:442 highBitsOf32BitAddress: 0xdeadbeef443body: |444 bb.0:445 liveins: $vgpr0446 447 ; GCN-LABEL: name: test_addrspacecast_p6_to_p4_0xdeadbeef448 ; GCN: liveins: $vgpr0449 ; GCN-NEXT: {{ $}}450 ; GCN-NEXT: [[COPY:%[0-9]+]]:_(p6) = COPY $vgpr0451 ; GCN-NEXT: [[PTRTOINT:%[0-9]+]]:_(s32) = G_PTRTOINT [[COPY]](p6)452 ; GCN-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -559038737453 ; GCN-NEXT: [[MV:%[0-9]+]]:_(p4) = G_MERGE_VALUES [[PTRTOINT]](s32), [[C]](s32)454 ; GCN-NEXT: $vgpr0_vgpr1 = COPY [[MV]](p4)455 %0:_(p6) = COPY $vgpr0456 %1:_(p4) = G_ADDRSPACE_CAST %0457 $vgpr0_vgpr1 = COPY %1458...459 460---461name: test_addrspacecast_p0_to_p6462body: |463 bb.0:464 liveins: $vgpr0_vgpr1465 466 ; GCN-LABEL: name: test_addrspacecast_p0_to_p6467 ; GCN: liveins: $vgpr0_vgpr1468 ; GCN-NEXT: {{ $}}469 ; GCN-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $vgpr0_vgpr1470 ; GCN-NEXT: [[EXTRACT:%[0-9]+]]:_(p6) = G_EXTRACT [[COPY]](p0), 0471 ; GCN-NEXT: $vgpr0 = COPY [[EXTRACT]](p6)472 %0:_(p0) = COPY $vgpr0_vgpr1473 %1:_(p6) = G_ADDRSPACE_CAST %0474 $vgpr0 = COPY %1475...476 477---478name: test_addrspacecast_p6_to_p0479body: |480 bb.0:481 liveins: $vgpr0482 483 ; GCN-LABEL: name: test_addrspacecast_p6_to_p0484 ; GCN: liveins: $vgpr0485 ; GCN-NEXT: {{ $}}486 ; GCN-NEXT: [[COPY:%[0-9]+]]:_(p6) = COPY $vgpr0487 ; GCN-NEXT: [[PTRTOINT:%[0-9]+]]:_(s32) = G_PTRTOINT [[COPY]](p6)488 ; GCN-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0489 ; GCN-NEXT: [[MV:%[0-9]+]]:_(p0) = G_MERGE_VALUES [[PTRTOINT]](s32), [[C]](s32)490 ; GCN-NEXT: $vgpr0_vgpr1 = COPY [[MV]](p0)491 %0:_(p6) = COPY $vgpr0492 %1:_(p0) = G_ADDRSPACE_CAST %0493 $vgpr0_vgpr1 = COPY %1494...495---496name: test_addrspacecast_p5_fi_to_p0497machineFunctionInfo:498 argumentInfo:499 queuePtr: { reg: '$sgpr4_sgpr5' }500stack:501 - { id: 0, size: 4, alignment: 4 }502body: |503 bb.0:504 ; SIVI-LABEL: name: test_addrspacecast_p5_fi_to_p0505 ; SIVI: liveins: $sgpr4_sgpr5506 ; SIVI-NEXT: {{ $}}507 ; SIVI-NEXT: [[COPY:%[0-9]+]]:sgpr_64(p4) = COPY $sgpr4_sgpr5508 ; SIVI-NEXT: [[FRAME_INDEX:%[0-9]+]]:_(p5) = G_FRAME_INDEX %stack.0509 ; SIVI-NEXT: [[PTRTOINT:%[0-9]+]]:_(s32) = G_PTRTOINT [[FRAME_INDEX]](p5)510 ; SIVI-NEXT: [[COPY1:%[0-9]+]]:_(p4) = COPY [[COPY]](p4)511 ; SIVI-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 68512 ; SIVI-NEXT: [[PTR_ADD:%[0-9]+]]:_(p4) = nuw inbounds G_PTR_ADD [[COPY1]], [[C]](s64)513 ; SIVI-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p4) :: (dereferenceable invariant load (s32), addrspace 4)514 ; SIVI-NEXT: [[MV:%[0-9]+]]:_(p0) = G_MERGE_VALUES [[PTRTOINT]](s32), [[LOAD]](s32)515 ; SIVI-NEXT: $vgpr0_vgpr1 = COPY [[MV]](p0)516 ;517 ; GFX9-LABEL: name: test_addrspacecast_p5_fi_to_p0518 ; GFX9: [[FRAME_INDEX:%[0-9]+]]:_(p5) = G_FRAME_INDEX %stack.0519 ; GFX9-NEXT: [[PTRTOINT:%[0-9]+]]:_(s32) = G_PTRTOINT [[FRAME_INDEX]](p5)520 ; GFX9-NEXT: [[COPY:%[0-9]+]]:sreg_64(s64) = COPY $src_private_base521 ; GFX9-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](s64)522 ; GFX9-NEXT: [[MV:%[0-9]+]]:_(p0) = G_MERGE_VALUES [[PTRTOINT]](s32), [[UV1]](s32)523 ; GFX9-NEXT: $vgpr0_vgpr1 = COPY [[MV]](p0)524 %0:_(p5) = G_FRAME_INDEX %stack.0525 %1:_(p0) = G_ADDRSPACE_CAST %0526 $vgpr0_vgpr1 = COPY %1527...528