diff --git a/llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp b/llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp index 0e17895daa350..b84c23900951a 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp @@ -1980,9 +1980,6 @@ bool AMDGPULegalizerInfo::legalizeAddrSpaceCast( if (DestAS == AMDGPUAS::FLAT_ADDRESS && (SrcAS == AMDGPUAS::LOCAL_ADDRESS || SrcAS == AMDGPUAS::PRIVATE_ADDRESS)) { - if (!ST.hasFlatAddressSpace()) - return false; - Register ApertureReg = getSegmentAperture(SrcAS, MRI, B); if (!ApertureReg.isValid()) return false; diff --git a/llvm/lib/Target/AMDGPU/SIISelLowering.cpp b/llvm/lib/Target/AMDGPU/SIISelLowering.cpp index 023a2139ef6ca..2025bc84da09d 100644 --- a/llvm/lib/Target/AMDGPU/SIISelLowering.cpp +++ b/llvm/lib/Target/AMDGPU/SIISelLowering.cpp @@ -398,8 +398,7 @@ SITargetLowering::SITargetLowering(const TargetMachine &TM, setOperationAction(ISD::ATOMIC_CMP_SWAP_WITH_SUCCESS, {MVT::i32, MVT::i64}, Expand); - if (Subtarget->hasFlatAddressSpace()) - setOperationAction(ISD::ADDRSPACECAST, {MVT::i32, MVT::i64}, Custom); + setOperationAction(ISD::ADDRSPACECAST, {MVT::i32, MVT::i64}, Custom); setOperationAction(ISD::BITREVERSE, {MVT::i32, MVT::i64}, Legal); diff --git a/llvm/test/CodeGen/AMDGPU/GlobalISel/legalize-addrspacecast.mir b/llvm/test/CodeGen/AMDGPU/GlobalISel/legalize-addrspacecast.mir index 62652fd9ab586..c2f33d6df2dce 100644 --- a/llvm/test/CodeGen/AMDGPU/GlobalISel/legalize-addrspacecast.mir +++ b/llvm/test/CodeGen/AMDGPU/GlobalISel/legalize-addrspacecast.mir @@ -1,9 +1,9 @@ # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py -# RUN: llc -march=amdgcn -mcpu=fiji -O0 -run-pass=legalizer -o - %s | FileCheck -check-prefix=VI %s -# RUN: llc -march=amdgcn -mcpu=gfx900 -O0 -run-pass=legalizer -o - %s | FileCheck -check-prefix=GFX9 %s -# RUN: llc -march=amdgcn -mcpu=tahiti -O0 -run-pass=legalizer -global-isel-abort=0 -o - %s | FileCheck -check-prefix=SI %s -# RUN: llc -march=amdgcn -mcpu=gfx1010 -O0 -run-pass=legalizer -o - %s | FileCheck -check-prefix=GFX9 %s -# RUN: llc -march=amdgcn -mcpu=gfx1100 -O0 -run-pass=legalizer -o - %s | FileCheck -check-prefix=GFX9 %s +# RUN: llc -march=amdgcn -mcpu=fiji -O0 -run-pass=legalizer -o - %s | FileCheck -check-prefixes=GCN,SIVI %s +# RUN: llc -march=amdgcn -mcpu=tahiti -O0 -run-pass=legalizer -o - %s | FileCheck -check-prefixes=GCN,SIVI %s +# RUN: llc -march=amdgcn -mcpu=gfx900 -O0 -run-pass=legalizer -o - %s | FileCheck -check-prefixes=GCN,GFX9 %s +# RUN: llc -march=amdgcn -mcpu=gfx1010 -O0 -run-pass=legalizer -o - %s | FileCheck -check-prefixes=GCN,GFX9 %s +# RUN: llc -march=amdgcn -mcpu=gfx1100 -O0 -run-pass=legalizer -o - %s | FileCheck -check-prefixes=GCN,GFX9 %s --- name: test_addrspacecast_p0_to_p1 @@ -15,24 +15,12 @@ body: | bb.0: liveins: $vgpr0_vgpr1 - ; VI-LABEL: name: test_addrspacecast_p0_to_p1 - ; VI: liveins: $vgpr0_vgpr1 - ; VI-NEXT: {{ $}} - ; VI-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $vgpr0_vgpr1 - ; VI-NEXT: [[BITCAST:%[0-9]+]]:_(p1) = G_BITCAST [[COPY]](p0) - ; VI-NEXT: $vgpr0_vgpr1 = COPY [[BITCAST]](p1) - ; GFX9-LABEL: name: test_addrspacecast_p0_to_p1 - ; GFX9: liveins: $vgpr0_vgpr1 - ; GFX9-NEXT: {{ $}} - ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $vgpr0_vgpr1 - ; GFX9-NEXT: [[BITCAST:%[0-9]+]]:_(p1) = G_BITCAST [[COPY]](p0) - ; GFX9-NEXT: $vgpr0_vgpr1 = COPY [[BITCAST]](p1) - ; SI-LABEL: name: test_addrspacecast_p0_to_p1 - ; SI: liveins: $vgpr0_vgpr1 - ; SI-NEXT: {{ $}} - ; SI-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $vgpr0_vgpr1 - ; SI-NEXT: [[BITCAST:%[0-9]+]]:_(p1) = G_BITCAST [[COPY]](p0) - ; SI-NEXT: $vgpr0_vgpr1 = COPY [[BITCAST]](p1) + ; GCN-LABEL: name: test_addrspacecast_p0_to_p1 + ; GCN: liveins: $vgpr0_vgpr1 + ; GCN-NEXT: {{ $}} + ; GCN-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $vgpr0_vgpr1 + ; GCN-NEXT: [[BITCAST:%[0-9]+]]:_(p1) = G_BITCAST [[COPY]](p0) + ; GCN-NEXT: $vgpr0_vgpr1 = COPY [[BITCAST]](p1) %0:_(p0) = COPY $vgpr0_vgpr1 %1:_(p1) = G_ADDRSPACE_CAST %0 $vgpr0_vgpr1 = COPY %1 @@ -48,24 +36,12 @@ body: | bb.0: liveins: $vgpr0_vgpr1 - ; VI-LABEL: name: test_addrspacecast_p1_to_p0 - ; VI: liveins: $vgpr0_vgpr1 - ; VI-NEXT: {{ $}} - ; VI-NEXT: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1 - ; VI-NEXT: [[BITCAST:%[0-9]+]]:_(p0) = G_BITCAST [[COPY]](p1) - ; VI-NEXT: $vgpr0_vgpr1 = COPY [[BITCAST]](p0) - ; GFX9-LABEL: name: test_addrspacecast_p1_to_p0 - ; GFX9: liveins: $vgpr0_vgpr1 - ; GFX9-NEXT: {{ $}} - ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1 - ; GFX9-NEXT: [[BITCAST:%[0-9]+]]:_(p0) = G_BITCAST [[COPY]](p1) - ; GFX9-NEXT: $vgpr0_vgpr1 = COPY [[BITCAST]](p0) - ; SI-LABEL: name: test_addrspacecast_p1_to_p0 - ; SI: liveins: $vgpr0_vgpr1 - ; SI-NEXT: {{ $}} - ; SI-NEXT: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1 - ; SI-NEXT: [[BITCAST:%[0-9]+]]:_(p0) = G_BITCAST [[COPY]](p1) - ; SI-NEXT: $vgpr0_vgpr1 = COPY [[BITCAST]](p0) + ; GCN-LABEL: name: test_addrspacecast_p1_to_p0 + ; GCN: liveins: $vgpr0_vgpr1 + ; GCN-NEXT: {{ $}} + ; GCN-NEXT: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1 + ; GCN-NEXT: [[BITCAST:%[0-9]+]]:_(p0) = G_BITCAST [[COPY]](p1) + ; GCN-NEXT: $vgpr0_vgpr1 = COPY [[BITCAST]](p0) %0:_(p1) = COPY $vgpr0_vgpr1 %1:_(p0) = G_ADDRSPACE_CAST %0 $vgpr0_vgpr1 = COPY %1 @@ -80,24 +56,12 @@ body: | bb.0: liveins: $vgpr0_vgpr1 - ; VI-LABEL: name: test_addrspacecast_p0_to_p4 - ; VI: liveins: $vgpr0_vgpr1 - ; VI-NEXT: {{ $}} - ; VI-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $vgpr0_vgpr1 - ; VI-NEXT: [[BITCAST:%[0-9]+]]:_(p4) = G_BITCAST [[COPY]](p0) - ; VI-NEXT: $vgpr0_vgpr1 = COPY [[BITCAST]](p4) - ; GFX9-LABEL: name: test_addrspacecast_p0_to_p4 - ; GFX9: liveins: $vgpr0_vgpr1 - ; GFX9-NEXT: {{ $}} - ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $vgpr0_vgpr1 - ; GFX9-NEXT: [[BITCAST:%[0-9]+]]:_(p4) = G_BITCAST [[COPY]](p0) - ; GFX9-NEXT: $vgpr0_vgpr1 = COPY [[BITCAST]](p4) - ; SI-LABEL: name: test_addrspacecast_p0_to_p4 - ; SI: liveins: $vgpr0_vgpr1 - ; SI-NEXT: {{ $}} - ; SI-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $vgpr0_vgpr1 - ; SI-NEXT: [[BITCAST:%[0-9]+]]:_(p4) = G_BITCAST [[COPY]](p0) - ; SI-NEXT: $vgpr0_vgpr1 = COPY [[BITCAST]](p4) + ; GCN-LABEL: name: test_addrspacecast_p0_to_p4 + ; GCN: liveins: $vgpr0_vgpr1 + ; GCN-NEXT: {{ $}} + ; GCN-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $vgpr0_vgpr1 + ; GCN-NEXT: [[BITCAST:%[0-9]+]]:_(p4) = G_BITCAST [[COPY]](p0) + ; GCN-NEXT: $vgpr0_vgpr1 = COPY [[BITCAST]](p4) %0:_(p0) = COPY $vgpr0_vgpr1 %1:_(p4) = G_ADDRSPACE_CAST %0 $vgpr0_vgpr1 = COPY %1 @@ -112,24 +76,12 @@ body: | bb.0: liveins: $vgpr0_vgpr1 - ; VI-LABEL: name: test_addrspacecast_p4_to_p0 - ; VI: liveins: $vgpr0_vgpr1 - ; VI-NEXT: {{ $}} - ; VI-NEXT: [[COPY:%[0-9]+]]:_(p4) = COPY $vgpr0_vgpr1 - ; VI-NEXT: [[BITCAST:%[0-9]+]]:_(p0) = G_BITCAST [[COPY]](p4) - ; VI-NEXT: $vgpr0_vgpr1 = COPY [[BITCAST]](p0) - ; GFX9-LABEL: name: test_addrspacecast_p4_to_p0 - ; GFX9: liveins: $vgpr0_vgpr1 - ; GFX9-NEXT: {{ $}} - ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(p4) = COPY $vgpr0_vgpr1 - ; GFX9-NEXT: [[BITCAST:%[0-9]+]]:_(p0) = G_BITCAST [[COPY]](p4) - ; GFX9-NEXT: $vgpr0_vgpr1 = COPY [[BITCAST]](p0) - ; SI-LABEL: name: test_addrspacecast_p4_to_p0 - ; SI: liveins: $vgpr0_vgpr1 - ; SI-NEXT: {{ $}} - ; SI-NEXT: [[COPY:%[0-9]+]]:_(p4) = COPY $vgpr0_vgpr1 - ; SI-NEXT: [[BITCAST:%[0-9]+]]:_(p0) = G_BITCAST [[COPY]](p4) - ; SI-NEXT: $vgpr0_vgpr1 = COPY [[BITCAST]](p0) + ; GCN-LABEL: name: test_addrspacecast_p4_to_p0 + ; GCN: liveins: $vgpr0_vgpr1 + ; GCN-NEXT: {{ $}} + ; GCN-NEXT: [[COPY:%[0-9]+]]:_(p4) = COPY $vgpr0_vgpr1 + ; GCN-NEXT: [[BITCAST:%[0-9]+]]:_(p0) = G_BITCAST [[COPY]](p4) + ; GCN-NEXT: $vgpr0_vgpr1 = COPY [[BITCAST]](p0) %0:_(p4) = COPY $vgpr0_vgpr1 %1:_(p0) = G_ADDRSPACE_CAST %0 $vgpr0_vgpr1 = COPY %1 @@ -144,24 +96,12 @@ body: | bb.0: liveins: $vgpr0_vgpr1 - ; VI-LABEL: name: test_addrspacecast_p0_to_p999 - ; VI: liveins: $vgpr0_vgpr1 - ; VI-NEXT: {{ $}} - ; VI-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $vgpr0_vgpr1 - ; VI-NEXT: [[BITCAST:%[0-9]+]]:_(p999) = G_BITCAST [[COPY]](p0) - ; VI-NEXT: $vgpr0_vgpr1 = COPY [[BITCAST]](p999) - ; GFX9-LABEL: name: test_addrspacecast_p0_to_p999 - ; GFX9: liveins: $vgpr0_vgpr1 - ; GFX9-NEXT: {{ $}} - ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $vgpr0_vgpr1 - ; GFX9-NEXT: [[BITCAST:%[0-9]+]]:_(p999) = G_BITCAST [[COPY]](p0) - ; GFX9-NEXT: $vgpr0_vgpr1 = COPY [[BITCAST]](p999) - ; SI-LABEL: name: test_addrspacecast_p0_to_p999 - ; SI: liveins: $vgpr0_vgpr1 - ; SI-NEXT: {{ $}} - ; SI-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $vgpr0_vgpr1 - ; SI-NEXT: [[BITCAST:%[0-9]+]]:_(p999) = G_BITCAST [[COPY]](p0) - ; SI-NEXT: $vgpr0_vgpr1 = COPY [[BITCAST]](p999) + ; GCN-LABEL: name: test_addrspacecast_p0_to_p999 + ; GCN: liveins: $vgpr0_vgpr1 + ; GCN-NEXT: {{ $}} + ; GCN-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $vgpr0_vgpr1 + ; GCN-NEXT: [[BITCAST:%[0-9]+]]:_(p999) = G_BITCAST [[COPY]](p0) + ; GCN-NEXT: $vgpr0_vgpr1 = COPY [[BITCAST]](p999) %0:_(p0) = COPY $vgpr0_vgpr1 %1:_(p999) = G_ADDRSPACE_CAST %0 $vgpr0_vgpr1 = COPY %1 @@ -176,24 +116,12 @@ body: | bb.0: liveins: $vgpr0_vgpr1 - ; VI-LABEL: name: test_addrspacecast_p999_to_p0 - ; VI: liveins: $vgpr0_vgpr1 - ; VI-NEXT: {{ $}} - ; VI-NEXT: [[COPY:%[0-9]+]]:_(p999) = COPY $vgpr0_vgpr1 - ; VI-NEXT: [[BITCAST:%[0-9]+]]:_(p0) = G_BITCAST [[COPY]](p999) - ; VI-NEXT: $vgpr0_vgpr1 = COPY [[BITCAST]](p0) - ; GFX9-LABEL: name: test_addrspacecast_p999_to_p0 - ; GFX9: liveins: $vgpr0_vgpr1 - ; GFX9-NEXT: {{ $}} - ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(p999) = COPY $vgpr0_vgpr1 - ; GFX9-NEXT: [[BITCAST:%[0-9]+]]:_(p0) = G_BITCAST [[COPY]](p999) - ; GFX9-NEXT: $vgpr0_vgpr1 = COPY [[BITCAST]](p0) - ; SI-LABEL: name: test_addrspacecast_p999_to_p0 - ; SI: liveins: $vgpr0_vgpr1 - ; SI-NEXT: {{ $}} - ; SI-NEXT: [[COPY:%[0-9]+]]:_(p999) = COPY $vgpr0_vgpr1 - ; SI-NEXT: [[BITCAST:%[0-9]+]]:_(p0) = G_BITCAST [[COPY]](p999) - ; SI-NEXT: $vgpr0_vgpr1 = COPY [[BITCAST]](p0) + ; GCN-LABEL: name: test_addrspacecast_p999_to_p0 + ; GCN: liveins: $vgpr0_vgpr1 + ; GCN-NEXT: {{ $}} + ; GCN-NEXT: [[COPY:%[0-9]+]]:_(p999) = COPY $vgpr0_vgpr1 + ; GCN-NEXT: [[BITCAST:%[0-9]+]]:_(p0) = G_BITCAST [[COPY]](p999) + ; GCN-NEXT: $vgpr0_vgpr1 = COPY [[BITCAST]](p0) %0:_(p999) = COPY $vgpr0_vgpr1 %1:_(p0) = G_ADDRSPACE_CAST %0 $vgpr0_vgpr1 = COPY %1 @@ -208,22 +136,22 @@ body: | bb.0: liveins: $vgpr0 - ; VI-LABEL: name: test_addrspacecast_p5_to_p0 - ; VI: liveins: $vgpr0, $sgpr4_sgpr5 - ; VI-NEXT: {{ $}} - ; VI-NEXT: [[COPY:%[0-9]+]]:sgpr_64(p4) = COPY $sgpr4_sgpr5 - ; VI-NEXT: [[COPY1:%[0-9]+]]:_(p5) = COPY $vgpr0 - ; VI-NEXT: [[COPY2:%[0-9]+]]:_(p4) = COPY [[COPY]](p4) - ; VI-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 68 - ; VI-NEXT: [[PTR_ADD:%[0-9]+]]:_(p4) = G_PTR_ADD [[COPY2]], [[C]](s64) - ; VI-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p4) :: (dereferenceable invariant load (s32), addrspace 4) - ; VI-NEXT: [[PTRTOINT:%[0-9]+]]:_(s32) = G_PTRTOINT [[COPY1]](p5) - ; VI-NEXT: [[MV:%[0-9]+]]:_(p0) = G_MERGE_VALUES [[PTRTOINT]](s32), [[LOAD]](s32) - ; VI-NEXT: [[C1:%[0-9]+]]:_(p5) = G_CONSTANT i32 -1 - ; VI-NEXT: [[C2:%[0-9]+]]:_(p0) = G_CONSTANT i64 0 - ; VI-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[COPY1]](p5), [[C1]] - ; VI-NEXT: [[SELECT:%[0-9]+]]:_(p0) = G_SELECT [[ICMP]](s1), [[MV]], [[C2]] - ; VI-NEXT: $vgpr0_vgpr1 = COPY [[SELECT]](p0) + ; SIVI-LABEL: name: test_addrspacecast_p5_to_p0 + ; SIVI: liveins: $vgpr0, $sgpr4_sgpr5 + ; SIVI-NEXT: {{ $}} + ; SIVI-NEXT: [[COPY:%[0-9]+]]:sgpr_64(p4) = COPY $sgpr4_sgpr5 + ; SIVI-NEXT: [[COPY1:%[0-9]+]]:_(p5) = COPY $vgpr0 + ; SIVI-NEXT: [[COPY2:%[0-9]+]]:_(p4) = COPY [[COPY]](p4) + ; SIVI-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 68 + ; SIVI-NEXT: [[PTR_ADD:%[0-9]+]]:_(p4) = G_PTR_ADD [[COPY2]], [[C]](s64) + ; SIVI-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p4) :: (dereferenceable invariant load (s32), addrspace 4) + ; SIVI-NEXT: [[PTRTOINT:%[0-9]+]]:_(s32) = G_PTRTOINT [[COPY1]](p5) + ; SIVI-NEXT: [[MV:%[0-9]+]]:_(p0) = G_MERGE_VALUES [[PTRTOINT]](s32), [[LOAD]](s32) + ; SIVI-NEXT: [[C1:%[0-9]+]]:_(p5) = G_CONSTANT i32 -1 + ; SIVI-NEXT: [[C2:%[0-9]+]]:_(p0) = G_CONSTANT i64 0 + ; SIVI-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[COPY1]](p5), [[C1]] + ; SIVI-NEXT: [[SELECT:%[0-9]+]]:_(p0) = G_SELECT [[ICMP]](s1), [[MV]], [[C2]] + ; SIVI-NEXT: $vgpr0_vgpr1 = COPY [[SELECT]](p0) ; GFX9-LABEL: name: test_addrspacecast_p5_to_p0 ; GFX9: liveins: $vgpr0 ; GFX9-NEXT: {{ $}} @@ -237,12 +165,6 @@ body: | ; GFX9-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[COPY]](p5), [[C]] ; GFX9-NEXT: [[SELECT:%[0-9]+]]:_(p0) = G_SELECT [[ICMP]](s1), [[MV]], [[C1]] ; GFX9-NEXT: $vgpr0_vgpr1 = COPY [[SELECT]](p0) - ; SI-LABEL: name: test_addrspacecast_p5_to_p0 - ; SI: liveins: $vgpr0 - ; SI-NEXT: {{ $}} - ; SI-NEXT: [[COPY:%[0-9]+]]:_(p5) = COPY $vgpr0 - ; SI-NEXT: [[ADDRSPACE_CAST:%[0-9]+]]:_(p0) = G_ADDRSPACE_CAST [[COPY]](p5) - ; SI-NEXT: $vgpr0_vgpr1 = COPY [[ADDRSPACE_CAST]](p0) %0:_(p5) = COPY $vgpr0 %1:_(p0) = G_ADDRSPACE_CAST %0 $vgpr0_vgpr1 = COPY %1 @@ -257,36 +179,16 @@ body: | bb.0: liveins: $vgpr0_vgpr1 - ; VI-LABEL: name: test_addrspacecast_p0_to_p5 - ; VI: liveins: $vgpr0_vgpr1 - ; VI-NEXT: {{ $}} - ; VI-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $vgpr0_vgpr1 - ; VI-NEXT: [[C:%[0-9]+]]:_(p5) = G_CONSTANT i32 -1 - ; VI-NEXT: [[C1:%[0-9]+]]:_(p0) = G_CONSTANT i64 0 - ; VI-NEXT: [[EXTRACT:%[0-9]+]]:_(p5) = G_EXTRACT [[COPY]](p0), 0 - ; VI-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[COPY]](p0), [[C1]] - ; VI-NEXT: [[SELECT:%[0-9]+]]:_(p5) = G_SELECT [[ICMP]](s1), [[EXTRACT]], [[C]] - ; VI-NEXT: $vgpr0 = COPY [[SELECT]](p5) - ; GFX9-LABEL: name: test_addrspacecast_p0_to_p5 - ; GFX9: liveins: $vgpr0_vgpr1 - ; GFX9-NEXT: {{ $}} - ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $vgpr0_vgpr1 - ; GFX9-NEXT: [[C:%[0-9]+]]:_(p5) = G_CONSTANT i32 -1 - ; GFX9-NEXT: [[C1:%[0-9]+]]:_(p0) = G_CONSTANT i64 0 - ; GFX9-NEXT: [[EXTRACT:%[0-9]+]]:_(p5) = G_EXTRACT [[COPY]](p0), 0 - ; GFX9-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[COPY]](p0), [[C1]] - ; GFX9-NEXT: [[SELECT:%[0-9]+]]:_(p5) = G_SELECT [[ICMP]](s1), [[EXTRACT]], [[C]] - ; GFX9-NEXT: $vgpr0 = COPY [[SELECT]](p5) - ; SI-LABEL: name: test_addrspacecast_p0_to_p5 - ; SI: liveins: $vgpr0_vgpr1 - ; SI-NEXT: {{ $}} - ; SI-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $vgpr0_vgpr1 - ; SI-NEXT: [[C:%[0-9]+]]:_(p5) = G_CONSTANT i32 -1 - ; SI-NEXT: [[C1:%[0-9]+]]:_(p0) = G_CONSTANT i64 0 - ; SI-NEXT: [[EXTRACT:%[0-9]+]]:_(p5) = G_EXTRACT [[COPY]](p0), 0 - ; SI-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[COPY]](p0), [[C1]] - ; SI-NEXT: [[SELECT:%[0-9]+]]:_(p5) = G_SELECT [[ICMP]](s1), [[EXTRACT]], [[C]] - ; SI-NEXT: $vgpr0 = COPY [[SELECT]](p5) + ; GCN-LABEL: name: test_addrspacecast_p0_to_p5 + ; GCN: liveins: $vgpr0_vgpr1 + ; GCN-NEXT: {{ $}} + ; GCN-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $vgpr0_vgpr1 + ; GCN-NEXT: [[C:%[0-9]+]]:_(p5) = G_CONSTANT i32 -1 + ; GCN-NEXT: [[C1:%[0-9]+]]:_(p0) = G_CONSTANT i64 0 + ; GCN-NEXT: [[EXTRACT:%[0-9]+]]:_(p5) = G_EXTRACT [[COPY]](p0), 0 + ; GCN-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[COPY]](p0), [[C1]] + ; GCN-NEXT: [[SELECT:%[0-9]+]]:_(p5) = G_SELECT [[ICMP]](s1), [[EXTRACT]], [[C]] + ; GCN-NEXT: $vgpr0 = COPY [[SELECT]](p5) %0:_(p0) = COPY $vgpr0_vgpr1 %1:_(p5) = G_ADDRSPACE_CAST %0 $vgpr0 = COPY %1 @@ -302,22 +204,22 @@ body: | bb.0: liveins: $vgpr0 - ; VI-LABEL: name: test_addrspacecast_p3_to_p0 - ; VI: liveins: $vgpr0, $sgpr4_sgpr5 - ; VI-NEXT: {{ $}} - ; VI-NEXT: [[COPY:%[0-9]+]]:sgpr_64(p4) = COPY $sgpr4_sgpr5 - ; VI-NEXT: [[COPY1:%[0-9]+]]:_(p3) = COPY $vgpr0 - ; VI-NEXT: [[COPY2:%[0-9]+]]:_(p4) = COPY [[COPY]](p4) - ; VI-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 64 - ; VI-NEXT: [[PTR_ADD:%[0-9]+]]:_(p4) = G_PTR_ADD [[COPY2]], [[C]](s64) - ; VI-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p4) :: (dereferenceable invariant load (s32), align 64, addrspace 4) - ; VI-NEXT: [[PTRTOINT:%[0-9]+]]:_(s32) = G_PTRTOINT [[COPY1]](p3) - ; VI-NEXT: [[MV:%[0-9]+]]:_(p0) = G_MERGE_VALUES [[PTRTOINT]](s32), [[LOAD]](s32) - ; VI-NEXT: [[C1:%[0-9]+]]:_(p3) = G_CONSTANT i32 -1 - ; VI-NEXT: [[C2:%[0-9]+]]:_(p0) = G_CONSTANT i64 0 - ; VI-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[COPY1]](p3), [[C1]] - ; VI-NEXT: [[SELECT:%[0-9]+]]:_(p0) = G_SELECT [[ICMP]](s1), [[MV]], [[C2]] - ; VI-NEXT: $vgpr0_vgpr1 = COPY [[SELECT]](p0) + ; SIVI-LABEL: name: test_addrspacecast_p3_to_p0 + ; SIVI: liveins: $vgpr0, $sgpr4_sgpr5 + ; SIVI-NEXT: {{ $}} + ; SIVI-NEXT: [[COPY:%[0-9]+]]:sgpr_64(p4) = COPY $sgpr4_sgpr5 + ; SIVI-NEXT: [[COPY1:%[0-9]+]]:_(p3) = COPY $vgpr0 + ; SIVI-NEXT: [[COPY2:%[0-9]+]]:_(p4) = COPY [[COPY]](p4) + ; SIVI-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 64 + ; SIVI-NEXT: [[PTR_ADD:%[0-9]+]]:_(p4) = G_PTR_ADD [[COPY2]], [[C]](s64) + ; SIVI-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p4) :: (dereferenceable invariant load (s32), align 64, addrspace 4) + ; SIVI-NEXT: [[PTRTOINT:%[0-9]+]]:_(s32) = G_PTRTOINT [[COPY1]](p3) + ; SIVI-NEXT: [[MV:%[0-9]+]]:_(p0) = G_MERGE_VALUES [[PTRTOINT]](s32), [[LOAD]](s32) + ; SIVI-NEXT: [[C1:%[0-9]+]]:_(p3) = G_CONSTANT i32 -1 + ; SIVI-NEXT: [[C2:%[0-9]+]]:_(p0) = G_CONSTANT i64 0 + ; SIVI-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[COPY1]](p3), [[C1]] + ; SIVI-NEXT: [[SELECT:%[0-9]+]]:_(p0) = G_SELECT [[ICMP]](s1), [[MV]], [[C2]] + ; SIVI-NEXT: $vgpr0_vgpr1 = COPY [[SELECT]](p0) ; GFX9-LABEL: name: test_addrspacecast_p3_to_p0 ; GFX9: liveins: $vgpr0 ; GFX9-NEXT: {{ $}} @@ -331,12 +233,6 @@ body: | ; GFX9-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[COPY]](p3), [[C]] ; GFX9-NEXT: [[SELECT:%[0-9]+]]:_(p0) = G_SELECT [[ICMP]](s1), [[MV]], [[C1]] ; GFX9-NEXT: $vgpr0_vgpr1 = COPY [[SELECT]](p0) - ; SI-LABEL: name: test_addrspacecast_p3_to_p0 - ; SI: liveins: $vgpr0 - ; SI-NEXT: {{ $}} - ; SI-NEXT: [[COPY:%[0-9]+]]:_(p3) = COPY $vgpr0 - ; SI-NEXT: [[ADDRSPACE_CAST:%[0-9]+]]:_(p0) = G_ADDRSPACE_CAST [[COPY]](p3) - ; SI-NEXT: $vgpr0_vgpr1 = COPY [[ADDRSPACE_CAST]](p0) %0:_(p3) = COPY $vgpr0 %1:_(p0) = G_ADDRSPACE_CAST %0 $vgpr0_vgpr1 = COPY %1 @@ -351,36 +247,16 @@ body: | bb.0: liveins: $vgpr0_vgpr1 - ; VI-LABEL: name: test_addrspacecast_p0_to_p3 - ; VI: liveins: $vgpr0_vgpr1 - ; VI-NEXT: {{ $}} - ; VI-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $vgpr0_vgpr1 - ; VI-NEXT: [[C:%[0-9]+]]:_(p3) = G_CONSTANT i32 -1 - ; VI-NEXT: [[C1:%[0-9]+]]:_(p0) = G_CONSTANT i64 0 - ; VI-NEXT: [[EXTRACT:%[0-9]+]]:_(p3) = G_EXTRACT [[COPY]](p0), 0 - ; VI-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[COPY]](p0), [[C1]] - ; VI-NEXT: [[SELECT:%[0-9]+]]:_(p3) = G_SELECT [[ICMP]](s1), [[EXTRACT]], [[C]] - ; VI-NEXT: $vgpr0 = COPY [[SELECT]](p3) - ; GFX9-LABEL: name: test_addrspacecast_p0_to_p3 - ; GFX9: liveins: $vgpr0_vgpr1 - ; GFX9-NEXT: {{ $}} - ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $vgpr0_vgpr1 - ; GFX9-NEXT: [[C:%[0-9]+]]:_(p3) = G_CONSTANT i32 -1 - ; GFX9-NEXT: [[C1:%[0-9]+]]:_(p0) = G_CONSTANT i64 0 - ; GFX9-NEXT: [[EXTRACT:%[0-9]+]]:_(p3) = G_EXTRACT [[COPY]](p0), 0 - ; GFX9-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[COPY]](p0), [[C1]] - ; GFX9-NEXT: [[SELECT:%[0-9]+]]:_(p3) = G_SELECT [[ICMP]](s1), [[EXTRACT]], [[C]] - ; GFX9-NEXT: $vgpr0 = COPY [[SELECT]](p3) - ; SI-LABEL: name: test_addrspacecast_p0_to_p3 - ; SI: liveins: $vgpr0_vgpr1 - ; SI-NEXT: {{ $}} - ; SI-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $vgpr0_vgpr1 - ; SI-NEXT: [[C:%[0-9]+]]:_(p3) = G_CONSTANT i32 -1 - ; SI-NEXT: [[C1:%[0-9]+]]:_(p0) = G_CONSTANT i64 0 - ; SI-NEXT: [[EXTRACT:%[0-9]+]]:_(p3) = G_EXTRACT [[COPY]](p0), 0 - ; SI-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[COPY]](p0), [[C1]] - ; SI-NEXT: [[SELECT:%[0-9]+]]:_(p3) = G_SELECT [[ICMP]](s1), [[EXTRACT]], [[C]] - ; SI-NEXT: $vgpr0 = COPY [[SELECT]](p3) + ; GCN-LABEL: name: test_addrspacecast_p0_to_p3 + ; GCN: liveins: $vgpr0_vgpr1 + ; GCN-NEXT: {{ $}} + ; GCN-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $vgpr0_vgpr1 + ; GCN-NEXT: [[C:%[0-9]+]]:_(p3) = G_CONSTANT i32 -1 + ; GCN-NEXT: [[C1:%[0-9]+]]:_(p0) = G_CONSTANT i64 0 + ; GCN-NEXT: [[EXTRACT:%[0-9]+]]:_(p3) = G_EXTRACT [[COPY]](p0), 0 + ; GCN-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[COPY]](p0), [[C1]] + ; GCN-NEXT: [[SELECT:%[0-9]+]]:_(p3) = G_SELECT [[ICMP]](s1), [[EXTRACT]], [[C]] + ; GCN-NEXT: $vgpr0 = COPY [[SELECT]](p3) %0:_(p0) = COPY $vgpr0_vgpr1 %1:_(p3) = G_ADDRSPACE_CAST %0 $vgpr0 = COPY %1 @@ -395,33 +271,15 @@ body: | bb.0: liveins: $vgpr0_vgpr1_vgpr2_vgpr3 - ; VI-LABEL: name: test_addrspacecast_v2p0_to_v2p1 - ; VI: liveins: $vgpr0_vgpr1_vgpr2_vgpr3 - ; VI-NEXT: {{ $}} - ; VI-NEXT: [[COPY:%[0-9]+]]:_(<2 x p0>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 - ; VI-NEXT: [[UV:%[0-9]+]]:_(p0), [[UV1:%[0-9]+]]:_(p0) = G_UNMERGE_VALUES [[COPY]](<2 x p0>) - ; VI-NEXT: [[BITCAST:%[0-9]+]]:_(p1) = G_BITCAST [[UV]](p0) - ; VI-NEXT: [[BITCAST1:%[0-9]+]]:_(p1) = G_BITCAST [[UV1]](p0) - ; VI-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x p1>) = G_BUILD_VECTOR [[BITCAST]](p1), [[BITCAST1]](p1) - ; VI-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[BUILD_VECTOR]](<2 x p1>) - ; GFX9-LABEL: name: test_addrspacecast_v2p0_to_v2p1 - ; GFX9: liveins: $vgpr0_vgpr1_vgpr2_vgpr3 - ; GFX9-NEXT: {{ $}} - ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(<2 x p0>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 - ; GFX9-NEXT: [[UV:%[0-9]+]]:_(p0), [[UV1:%[0-9]+]]:_(p0) = G_UNMERGE_VALUES [[COPY]](<2 x p0>) - ; GFX9-NEXT: [[BITCAST:%[0-9]+]]:_(p1) = G_BITCAST [[UV]](p0) - ; GFX9-NEXT: [[BITCAST1:%[0-9]+]]:_(p1) = G_BITCAST [[UV1]](p0) - ; GFX9-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x p1>) = G_BUILD_VECTOR [[BITCAST]](p1), [[BITCAST1]](p1) - ; GFX9-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[BUILD_VECTOR]](<2 x p1>) - ; SI-LABEL: name: test_addrspacecast_v2p0_to_v2p1 - ; SI: liveins: $vgpr0_vgpr1_vgpr2_vgpr3 - ; SI-NEXT: {{ $}} - ; SI-NEXT: [[COPY:%[0-9]+]]:_(<2 x p0>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 - ; SI-NEXT: [[UV:%[0-9]+]]:_(p0), [[UV1:%[0-9]+]]:_(p0) = G_UNMERGE_VALUES [[COPY]](<2 x p0>) - ; SI-NEXT: [[BITCAST:%[0-9]+]]:_(p1) = G_BITCAST [[UV]](p0) - ; SI-NEXT: [[BITCAST1:%[0-9]+]]:_(p1) = G_BITCAST [[UV1]](p0) - ; SI-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x p1>) = G_BUILD_VECTOR [[BITCAST]](p1), [[BITCAST1]](p1) - ; SI-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[BUILD_VECTOR]](<2 x p1>) + ; GCN-LABEL: name: test_addrspacecast_v2p0_to_v2p1 + ; GCN: liveins: $vgpr0_vgpr1_vgpr2_vgpr3 + ; GCN-NEXT: {{ $}} + ; GCN-NEXT: [[COPY:%[0-9]+]]:_(<2 x p0>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + ; GCN-NEXT: [[UV:%[0-9]+]]:_(p0), [[UV1:%[0-9]+]]:_(p0) = G_UNMERGE_VALUES [[COPY]](<2 x p0>) + ; GCN-NEXT: [[BITCAST:%[0-9]+]]:_(p1) = G_BITCAST [[UV]](p0) + ; GCN-NEXT: [[BITCAST1:%[0-9]+]]:_(p1) = G_BITCAST [[UV1]](p0) + ; GCN-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x p1>) = G_BUILD_VECTOR [[BITCAST]](p1), [[BITCAST1]](p1) + ; GCN-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[BUILD_VECTOR]](<2 x p1>) %0:_(<2 x p0>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 %1:_(<2 x p1>) = G_ADDRSPACE_CAST %0 $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %1 @@ -436,33 +294,15 @@ body: | bb.0: liveins: $vgpr0_vgpr1_vgpr2_vgpr3 - ; VI-LABEL: name: test_addrspacecast_v2p1_to_v2p0 - ; VI: liveins: $vgpr0_vgpr1_vgpr2_vgpr3 - ; VI-NEXT: {{ $}} - ; VI-NEXT: [[COPY:%[0-9]+]]:_(<2 x p1>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 - ; VI-NEXT: [[UV:%[0-9]+]]:_(p1), [[UV1:%[0-9]+]]:_(p1) = G_UNMERGE_VALUES [[COPY]](<2 x p1>) - ; VI-NEXT: [[BITCAST:%[0-9]+]]:_(p0) = G_BITCAST [[UV]](p1) - ; VI-NEXT: [[BITCAST1:%[0-9]+]]:_(p0) = G_BITCAST [[UV1]](p1) - ; VI-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x p0>) = G_BUILD_VECTOR [[BITCAST]](p0), [[BITCAST1]](p0) - ; VI-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[BUILD_VECTOR]](<2 x p0>) - ; GFX9-LABEL: name: test_addrspacecast_v2p1_to_v2p0 - ; GFX9: liveins: $vgpr0_vgpr1_vgpr2_vgpr3 - ; GFX9-NEXT: {{ $}} - ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(<2 x p1>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 - ; GFX9-NEXT: [[UV:%[0-9]+]]:_(p1), [[UV1:%[0-9]+]]:_(p1) = G_UNMERGE_VALUES [[COPY]](<2 x p1>) - ; GFX9-NEXT: [[BITCAST:%[0-9]+]]:_(p0) = G_BITCAST [[UV]](p1) - ; GFX9-NEXT: [[BITCAST1:%[0-9]+]]:_(p0) = G_BITCAST [[UV1]](p1) - ; GFX9-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x p0>) = G_BUILD_VECTOR [[BITCAST]](p0), [[BITCAST1]](p0) - ; GFX9-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[BUILD_VECTOR]](<2 x p0>) - ; SI-LABEL: name: test_addrspacecast_v2p1_to_v2p0 - ; SI: liveins: $vgpr0_vgpr1_vgpr2_vgpr3 - ; SI-NEXT: {{ $}} - ; SI-NEXT: [[COPY:%[0-9]+]]:_(<2 x p1>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 - ; SI-NEXT: [[UV:%[0-9]+]]:_(p1), [[UV1:%[0-9]+]]:_(p1) = G_UNMERGE_VALUES [[COPY]](<2 x p1>) - ; SI-NEXT: [[BITCAST:%[0-9]+]]:_(p0) = G_BITCAST [[UV]](p1) - ; SI-NEXT: [[BITCAST1:%[0-9]+]]:_(p0) = G_BITCAST [[UV1]](p1) - ; SI-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x p0>) = G_BUILD_VECTOR [[BITCAST]](p0), [[BITCAST1]](p0) - ; SI-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[BUILD_VECTOR]](<2 x p0>) + ; GCN-LABEL: name: test_addrspacecast_v2p1_to_v2p0 + ; GCN: liveins: $vgpr0_vgpr1_vgpr2_vgpr3 + ; GCN-NEXT: {{ $}} + ; GCN-NEXT: [[COPY:%[0-9]+]]:_(<2 x p1>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + ; GCN-NEXT: [[UV:%[0-9]+]]:_(p1), [[UV1:%[0-9]+]]:_(p1) = G_UNMERGE_VALUES [[COPY]](<2 x p1>) + ; GCN-NEXT: [[BITCAST:%[0-9]+]]:_(p0) = G_BITCAST [[UV]](p1) + ; GCN-NEXT: [[BITCAST1:%[0-9]+]]:_(p0) = G_BITCAST [[UV1]](p1) + ; GCN-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x p0>) = G_BUILD_VECTOR [[BITCAST]](p0), [[BITCAST1]](p0) + ; GCN-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[BUILD_VECTOR]](<2 x p0>) %0:_(<2 x p1>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 %1:_(<2 x p0>) = G_ADDRSPACE_CAST %0 $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %1 @@ -477,51 +317,21 @@ body: | bb.0: liveins: $vgpr0_vgpr1_vgpr2_vgpr3 - ; VI-LABEL: name: test_addrspacecast_v2p0_to_v2p3 - ; VI: liveins: $vgpr0_vgpr1_vgpr2_vgpr3 - ; VI-NEXT: {{ $}} - ; VI-NEXT: [[COPY:%[0-9]+]]:_(<2 x p0>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 - ; VI-NEXT: [[UV:%[0-9]+]]:_(p0), [[UV1:%[0-9]+]]:_(p0) = G_UNMERGE_VALUES [[COPY]](<2 x p0>) - ; VI-NEXT: [[C:%[0-9]+]]:_(p3) = G_CONSTANT i32 -1 - ; VI-NEXT: [[C1:%[0-9]+]]:_(p0) = G_CONSTANT i64 0 - ; VI-NEXT: [[EXTRACT:%[0-9]+]]:_(p3) = G_EXTRACT [[UV]](p0), 0 - ; VI-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV]](p0), [[C1]] - ; VI-NEXT: [[SELECT:%[0-9]+]]:_(p3) = G_SELECT [[ICMP]](s1), [[EXTRACT]], [[C]] - ; VI-NEXT: [[EXTRACT1:%[0-9]+]]:_(p3) = G_EXTRACT [[UV1]](p0), 0 - ; VI-NEXT: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV1]](p0), [[C1]] - ; VI-NEXT: [[SELECT1:%[0-9]+]]:_(p3) = G_SELECT [[ICMP1]](s1), [[EXTRACT1]], [[C]] - ; VI-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x p3>) = G_BUILD_VECTOR [[SELECT]](p3), [[SELECT1]](p3) - ; VI-NEXT: $vgpr0_vgpr1 = COPY [[BUILD_VECTOR]](<2 x p3>) - ; GFX9-LABEL: name: test_addrspacecast_v2p0_to_v2p3 - ; GFX9: liveins: $vgpr0_vgpr1_vgpr2_vgpr3 - ; GFX9-NEXT: {{ $}} - ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(<2 x p0>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 - ; GFX9-NEXT: [[UV:%[0-9]+]]:_(p0), [[UV1:%[0-9]+]]:_(p0) = G_UNMERGE_VALUES [[COPY]](<2 x p0>) - ; GFX9-NEXT: [[C:%[0-9]+]]:_(p3) = G_CONSTANT i32 -1 - ; GFX9-NEXT: [[C1:%[0-9]+]]:_(p0) = G_CONSTANT i64 0 - ; GFX9-NEXT: [[EXTRACT:%[0-9]+]]:_(p3) = G_EXTRACT [[UV]](p0), 0 - ; GFX9-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV]](p0), [[C1]] - ; GFX9-NEXT: [[SELECT:%[0-9]+]]:_(p3) = G_SELECT [[ICMP]](s1), [[EXTRACT]], [[C]] - ; GFX9-NEXT: [[EXTRACT1:%[0-9]+]]:_(p3) = G_EXTRACT [[UV1]](p0), 0 - ; GFX9-NEXT: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV1]](p0), [[C1]] - ; GFX9-NEXT: [[SELECT1:%[0-9]+]]:_(p3) = G_SELECT [[ICMP1]](s1), [[EXTRACT1]], [[C]] - ; GFX9-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x p3>) = G_BUILD_VECTOR [[SELECT]](p3), [[SELECT1]](p3) - ; GFX9-NEXT: $vgpr0_vgpr1 = COPY [[BUILD_VECTOR]](<2 x p3>) - ; SI-LABEL: name: test_addrspacecast_v2p0_to_v2p3 - ; SI: liveins: $vgpr0_vgpr1_vgpr2_vgpr3 - ; SI-NEXT: {{ $}} - ; SI-NEXT: [[COPY:%[0-9]+]]:_(<2 x p0>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 - ; SI-NEXT: [[UV:%[0-9]+]]:_(p0), [[UV1:%[0-9]+]]:_(p0) = G_UNMERGE_VALUES [[COPY]](<2 x p0>) - ; SI-NEXT: [[C:%[0-9]+]]:_(p3) = G_CONSTANT i32 -1 - ; SI-NEXT: [[C1:%[0-9]+]]:_(p0) = G_CONSTANT i64 0 - ; SI-NEXT: [[EXTRACT:%[0-9]+]]:_(p3) = G_EXTRACT [[UV]](p0), 0 - ; SI-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV]](p0), [[C1]] - ; SI-NEXT: [[SELECT:%[0-9]+]]:_(p3) = G_SELECT [[ICMP]](s1), [[EXTRACT]], [[C]] - ; SI-NEXT: [[EXTRACT1:%[0-9]+]]:_(p3) = G_EXTRACT [[UV1]](p0), 0 - ; SI-NEXT: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV1]](p0), [[C1]] - ; SI-NEXT: [[SELECT1:%[0-9]+]]:_(p3) = G_SELECT [[ICMP1]](s1), [[EXTRACT1]], [[C]] - ; SI-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x p3>) = G_BUILD_VECTOR [[SELECT]](p3), [[SELECT1]](p3) - ; SI-NEXT: $vgpr0_vgpr1 = COPY [[BUILD_VECTOR]](<2 x p3>) + ; GCN-LABEL: name: test_addrspacecast_v2p0_to_v2p3 + ; GCN: liveins: $vgpr0_vgpr1_vgpr2_vgpr3 + ; GCN-NEXT: {{ $}} + ; GCN-NEXT: [[COPY:%[0-9]+]]:_(<2 x p0>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + ; GCN-NEXT: [[UV:%[0-9]+]]:_(p0), [[UV1:%[0-9]+]]:_(p0) = G_UNMERGE_VALUES [[COPY]](<2 x p0>) + ; GCN-NEXT: [[C:%[0-9]+]]:_(p3) = G_CONSTANT i32 -1 + ; GCN-NEXT: [[C1:%[0-9]+]]:_(p0) = G_CONSTANT i64 0 + ; GCN-NEXT: [[EXTRACT:%[0-9]+]]:_(p3) = G_EXTRACT [[UV]](p0), 0 + ; GCN-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV]](p0), [[C1]] + ; GCN-NEXT: [[SELECT:%[0-9]+]]:_(p3) = G_SELECT [[ICMP]](s1), [[EXTRACT]], [[C]] + ; GCN-NEXT: [[EXTRACT1:%[0-9]+]]:_(p3) = G_EXTRACT [[UV1]](p0), 0 + ; GCN-NEXT: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV1]](p0), [[C1]] + ; GCN-NEXT: [[SELECT1:%[0-9]+]]:_(p3) = G_SELECT [[ICMP1]](s1), [[EXTRACT1]], [[C]] + ; GCN-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x p3>) = G_BUILD_VECTOR [[SELECT]](p3), [[SELECT1]](p3) + ; GCN-NEXT: $vgpr0_vgpr1 = COPY [[BUILD_VECTOR]](<2 x p3>) %0:_(<2 x p0>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 %1:_(<2 x p3>) = G_ADDRSPACE_CAST %0 $vgpr0_vgpr1 = COPY %1 @@ -536,31 +346,31 @@ body: | bb.0: liveins: $vgpr0_vgpr1 - ; VI-LABEL: name: test_addrspacecast_v2p3_to_v2p0 - ; VI: liveins: $vgpr0_vgpr1, $sgpr4_sgpr5 - ; VI-NEXT: {{ $}} - ; VI-NEXT: [[COPY:%[0-9]+]]:sgpr_64(p4) = COPY $sgpr4_sgpr5 - ; VI-NEXT: [[COPY1:%[0-9]+]]:_(<2 x p3>) = COPY $vgpr0_vgpr1 - ; VI-NEXT: [[UV:%[0-9]+]]:_(p3), [[UV1:%[0-9]+]]:_(p3) = G_UNMERGE_VALUES [[COPY1]](<2 x p3>) - ; VI-NEXT: [[COPY2:%[0-9]+]]:_(p4) = COPY [[COPY]](p4) - ; VI-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 64 - ; VI-NEXT: [[PTR_ADD:%[0-9]+]]:_(p4) = G_PTR_ADD [[COPY2]], [[C]](s64) - ; VI-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p4) :: (dereferenceable invariant load (s32), align 64, addrspace 4) - ; VI-NEXT: [[PTRTOINT:%[0-9]+]]:_(s32) = G_PTRTOINT [[UV]](p3) - ; VI-NEXT: [[MV:%[0-9]+]]:_(p0) = G_MERGE_VALUES [[PTRTOINT]](s32), [[LOAD]](s32) - ; VI-NEXT: [[C1:%[0-9]+]]:_(p3) = G_CONSTANT i32 -1 - ; VI-NEXT: [[C2:%[0-9]+]]:_(p0) = G_CONSTANT i64 0 - ; VI-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV]](p3), [[C1]] - ; VI-NEXT: [[SELECT:%[0-9]+]]:_(p0) = G_SELECT [[ICMP]](s1), [[MV]], [[C2]] - ; VI-NEXT: [[COPY3:%[0-9]+]]:_(p4) = COPY [[COPY]](p4) - ; VI-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p4) = G_PTR_ADD [[COPY3]], [[C]](s64) - ; VI-NEXT: [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD1]](p4) :: (dereferenceable invariant load (s32), align 64, addrspace 4) - ; VI-NEXT: [[PTRTOINT1:%[0-9]+]]:_(s32) = G_PTRTOINT [[UV1]](p3) - ; VI-NEXT: [[MV1:%[0-9]+]]:_(p0) = G_MERGE_VALUES [[PTRTOINT1]](s32), [[LOAD1]](s32) - ; VI-NEXT: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV1]](p3), [[C1]] - ; VI-NEXT: [[SELECT1:%[0-9]+]]:_(p0) = G_SELECT [[ICMP1]](s1), [[MV1]], [[C2]] - ; VI-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x p0>) = G_BUILD_VECTOR [[SELECT]](p0), [[SELECT1]](p0) - ; VI-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[BUILD_VECTOR]](<2 x p0>) + ; SIVI-LABEL: name: test_addrspacecast_v2p3_to_v2p0 + ; SIVI: liveins: $vgpr0_vgpr1, $sgpr4_sgpr5 + ; SIVI-NEXT: {{ $}} + ; SIVI-NEXT: [[COPY:%[0-9]+]]:sgpr_64(p4) = COPY $sgpr4_sgpr5 + ; SIVI-NEXT: [[COPY1:%[0-9]+]]:_(<2 x p3>) = COPY $vgpr0_vgpr1 + ; SIVI-NEXT: [[UV:%[0-9]+]]:_(p3), [[UV1:%[0-9]+]]:_(p3) = G_UNMERGE_VALUES [[COPY1]](<2 x p3>) + ; SIVI-NEXT: [[COPY2:%[0-9]+]]:_(p4) = COPY [[COPY]](p4) + ; SIVI-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 64 + ; SIVI-NEXT: [[PTR_ADD:%[0-9]+]]:_(p4) = G_PTR_ADD [[COPY2]], [[C]](s64) + ; SIVI-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p4) :: (dereferenceable invariant load (s32), align 64, addrspace 4) + ; SIVI-NEXT: [[PTRTOINT:%[0-9]+]]:_(s32) = G_PTRTOINT [[UV]](p3) + ; SIVI-NEXT: [[MV:%[0-9]+]]:_(p0) = G_MERGE_VALUES [[PTRTOINT]](s32), [[LOAD]](s32) + ; SIVI-NEXT: [[C1:%[0-9]+]]:_(p3) = G_CONSTANT i32 -1 + ; SIVI-NEXT: [[C2:%[0-9]+]]:_(p0) = G_CONSTANT i64 0 + ; SIVI-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV]](p3), [[C1]] + ; SIVI-NEXT: [[SELECT:%[0-9]+]]:_(p0) = G_SELECT [[ICMP]](s1), [[MV]], [[C2]] + ; SIVI-NEXT: [[COPY3:%[0-9]+]]:_(p4) = COPY [[COPY]](p4) + ; SIVI-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p4) = G_PTR_ADD [[COPY3]], [[C]](s64) + ; SIVI-NEXT: [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD1]](p4) :: (dereferenceable invariant load (s32), align 64, addrspace 4) + ; SIVI-NEXT: [[PTRTOINT1:%[0-9]+]]:_(s32) = G_PTRTOINT [[UV1]](p3) + ; SIVI-NEXT: [[MV1:%[0-9]+]]:_(p0) = G_MERGE_VALUES [[PTRTOINT1]](s32), [[LOAD1]](s32) + ; SIVI-NEXT: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV1]](p3), [[C1]] + ; SIVI-NEXT: [[SELECT1:%[0-9]+]]:_(p0) = G_SELECT [[ICMP1]](s1), [[MV1]], [[C2]] + ; SIVI-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x p0>) = G_BUILD_VECTOR [[SELECT]](p0), [[SELECT1]](p0) + ; SIVI-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[BUILD_VECTOR]](<2 x p0>) ; GFX9-LABEL: name: test_addrspacecast_v2p3_to_v2p0 ; GFX9: liveins: $vgpr0_vgpr1 ; GFX9-NEXT: {{ $}} @@ -582,15 +392,6 @@ body: | ; GFX9-NEXT: [[SELECT1:%[0-9]+]]:_(p0) = G_SELECT [[ICMP1]](s1), [[MV1]], [[C1]] ; GFX9-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x p0>) = G_BUILD_VECTOR [[SELECT]](p0), [[SELECT1]](p0) ; GFX9-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[BUILD_VECTOR]](<2 x p0>) - ; SI-LABEL: name: test_addrspacecast_v2p3_to_v2p0 - ; SI: liveins: $vgpr0_vgpr1 - ; SI-NEXT: {{ $}} - ; SI-NEXT: [[COPY:%[0-9]+]]:_(<2 x p3>) = COPY $vgpr0_vgpr1 - ; SI-NEXT: [[UV:%[0-9]+]]:_(p3), [[UV1:%[0-9]+]]:_(p3) = G_UNMERGE_VALUES [[COPY]](<2 x p3>) - ; SI-NEXT: [[ADDRSPACE_CAST:%[0-9]+]]:_(p0) = G_ADDRSPACE_CAST [[UV]](p3) - ; SI-NEXT: [[ADDRSPACE_CAST1:%[0-9]+]]:_(p0) = G_ADDRSPACE_CAST [[UV1]](p3) - ; SI-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x p0>) = G_BUILD_VECTOR [[ADDRSPACE_CAST]](p0), [[ADDRSPACE_CAST1]](p0) - ; SI-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[BUILD_VECTOR]](<2 x p0>) %0:_(<2 x p3>) = COPY $vgpr0_vgpr1 %1:_(<2 x p0>) = G_ADDRSPACE_CAST %0 $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %1 @@ -602,24 +403,12 @@ body: | bb.0: liveins: $vgpr0_vgpr1 - ; VI-LABEL: name: test_addrspacecast_p4_to_p6 - ; VI: liveins: $vgpr0_vgpr1 - ; VI-NEXT: {{ $}} - ; VI-NEXT: [[COPY:%[0-9]+]]:_(p4) = COPY $vgpr0_vgpr1 - ; VI-NEXT: [[EXTRACT:%[0-9]+]]:_(p6) = G_EXTRACT [[COPY]](p4), 0 - ; VI-NEXT: $vgpr0 = COPY [[EXTRACT]](p6) - ; GFX9-LABEL: name: test_addrspacecast_p4_to_p6 - ; GFX9: liveins: $vgpr0_vgpr1 - ; GFX9-NEXT: {{ $}} - ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(p4) = COPY $vgpr0_vgpr1 - ; GFX9-NEXT: [[EXTRACT:%[0-9]+]]:_(p6) = G_EXTRACT [[COPY]](p4), 0 - ; GFX9-NEXT: $vgpr0 = COPY [[EXTRACT]](p6) - ; SI-LABEL: name: test_addrspacecast_p4_to_p6 - ; SI: liveins: $vgpr0_vgpr1 - ; SI-NEXT: {{ $}} - ; SI-NEXT: [[COPY:%[0-9]+]]:_(p4) = COPY $vgpr0_vgpr1 - ; SI-NEXT: [[EXTRACT:%[0-9]+]]:_(p6) = G_EXTRACT [[COPY]](p4), 0 - ; SI-NEXT: $vgpr0 = COPY [[EXTRACT]](p6) + ; GCN-LABEL: name: test_addrspacecast_p4_to_p6 + ; GCN: liveins: $vgpr0_vgpr1 + ; GCN-NEXT: {{ $}} + ; GCN-NEXT: [[COPY:%[0-9]+]]:_(p4) = COPY $vgpr0_vgpr1 + ; GCN-NEXT: [[EXTRACT:%[0-9]+]]:_(p6) = G_EXTRACT [[COPY]](p4), 0 + ; GCN-NEXT: $vgpr0 = COPY [[EXTRACT]](p6) %0:_(p4) = COPY $vgpr0_vgpr1 %1:_(p6) = G_ADDRSPACE_CAST %0 $vgpr0 = COPY %1 @@ -631,27 +420,13 @@ body: | bb.0: liveins: $vgpr0 - ; VI-LABEL: name: test_addrspacecast_p6_to_p4_0 - ; VI: liveins: $vgpr0 - ; VI-NEXT: {{ $}} - ; VI-NEXT: [[COPY:%[0-9]+]]:_(p6) = COPY $vgpr0 - ; VI-NEXT: [[C:%[0-9]+]]:_(p6) = G_CONSTANT i32 0 - ; VI-NEXT: [[MV:%[0-9]+]]:_(p4) = G_MERGE_VALUES [[COPY]](p6), [[C]](p6) - ; VI-NEXT: $vgpr0_vgpr1 = COPY [[MV]](p4) - ; GFX9-LABEL: name: test_addrspacecast_p6_to_p4_0 - ; GFX9: liveins: $vgpr0 - ; GFX9-NEXT: {{ $}} - ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(p6) = COPY $vgpr0 - ; GFX9-NEXT: [[C:%[0-9]+]]:_(p6) = G_CONSTANT i32 0 - ; GFX9-NEXT: [[MV:%[0-9]+]]:_(p4) = G_MERGE_VALUES [[COPY]](p6), [[C]](p6) - ; GFX9-NEXT: $vgpr0_vgpr1 = COPY [[MV]](p4) - ; SI-LABEL: name: test_addrspacecast_p6_to_p4_0 - ; SI: liveins: $vgpr0 - ; SI-NEXT: {{ $}} - ; SI-NEXT: [[COPY:%[0-9]+]]:_(p6) = COPY $vgpr0 - ; SI-NEXT: [[C:%[0-9]+]]:_(p6) = G_CONSTANT i32 0 - ; SI-NEXT: [[MV:%[0-9]+]]:_(p4) = G_MERGE_VALUES [[COPY]](p6), [[C]](p6) - ; SI-NEXT: $vgpr0_vgpr1 = COPY [[MV]](p4) + ; GCN-LABEL: name: test_addrspacecast_p6_to_p4_0 + ; GCN: liveins: $vgpr0 + ; GCN-NEXT: {{ $}} + ; GCN-NEXT: [[COPY:%[0-9]+]]:_(p6) = COPY $vgpr0 + ; GCN-NEXT: [[C:%[0-9]+]]:_(p6) = G_CONSTANT i32 0 + ; GCN-NEXT: [[MV:%[0-9]+]]:_(p4) = G_MERGE_VALUES [[COPY]](p6), [[C]](p6) + ; GCN-NEXT: $vgpr0_vgpr1 = COPY [[MV]](p4) %0:_(p6) = COPY $vgpr0 %1:_(p4) = G_ADDRSPACE_CAST %0 $vgpr0_vgpr1 = COPY %1 @@ -665,27 +440,13 @@ body: | bb.0: liveins: $vgpr0 - ; VI-LABEL: name: test_addrspacecast_p6_to_p4_0xdeadbeef - ; VI: liveins: $vgpr0 - ; VI-NEXT: {{ $}} - ; VI-NEXT: [[COPY:%[0-9]+]]:_(p6) = COPY $vgpr0 - ; VI-NEXT: [[C:%[0-9]+]]:_(p6) = G_CONSTANT i32 -559038737 - ; VI-NEXT: [[MV:%[0-9]+]]:_(p4) = G_MERGE_VALUES [[COPY]](p6), [[C]](p6) - ; VI-NEXT: $vgpr0_vgpr1 = COPY [[MV]](p4) - ; GFX9-LABEL: name: test_addrspacecast_p6_to_p4_0xdeadbeef - ; GFX9: liveins: $vgpr0 - ; GFX9-NEXT: {{ $}} - ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(p6) = COPY $vgpr0 - ; GFX9-NEXT: [[C:%[0-9]+]]:_(p6) = G_CONSTANT i32 -559038737 - ; GFX9-NEXT: [[MV:%[0-9]+]]:_(p4) = G_MERGE_VALUES [[COPY]](p6), [[C]](p6) - ; GFX9-NEXT: $vgpr0_vgpr1 = COPY [[MV]](p4) - ; SI-LABEL: name: test_addrspacecast_p6_to_p4_0xdeadbeef - ; SI: liveins: $vgpr0 - ; SI-NEXT: {{ $}} - ; SI-NEXT: [[COPY:%[0-9]+]]:_(p6) = COPY $vgpr0 - ; SI-NEXT: [[C:%[0-9]+]]:_(p6) = G_CONSTANT i32 -559038737 - ; SI-NEXT: [[MV:%[0-9]+]]:_(p4) = G_MERGE_VALUES [[COPY]](p6), [[C]](p6) - ; SI-NEXT: $vgpr0_vgpr1 = COPY [[MV]](p4) + ; GCN-LABEL: name: test_addrspacecast_p6_to_p4_0xdeadbeef + ; GCN: liveins: $vgpr0 + ; GCN-NEXT: {{ $}} + ; GCN-NEXT: [[COPY:%[0-9]+]]:_(p6) = COPY $vgpr0 + ; GCN-NEXT: [[C:%[0-9]+]]:_(p6) = G_CONSTANT i32 -559038737 + ; GCN-NEXT: [[MV:%[0-9]+]]:_(p4) = G_MERGE_VALUES [[COPY]](p6), [[C]](p6) + ; GCN-NEXT: $vgpr0_vgpr1 = COPY [[MV]](p4) %0:_(p6) = COPY $vgpr0 %1:_(p4) = G_ADDRSPACE_CAST %0 $vgpr0_vgpr1 = COPY %1 @@ -697,24 +458,12 @@ body: | bb.0: liveins: $vgpr0_vgpr1 - ; VI-LABEL: name: test_addrspacecast_p0_to_p6 - ; VI: liveins: $vgpr0_vgpr1 - ; VI-NEXT: {{ $}} - ; VI-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $vgpr0_vgpr1 - ; VI-NEXT: [[EXTRACT:%[0-9]+]]:_(p6) = G_EXTRACT [[COPY]](p0), 0 - ; VI-NEXT: $vgpr0 = COPY [[EXTRACT]](p6) - ; GFX9-LABEL: name: test_addrspacecast_p0_to_p6 - ; GFX9: liveins: $vgpr0_vgpr1 - ; GFX9-NEXT: {{ $}} - ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $vgpr0_vgpr1 - ; GFX9-NEXT: [[EXTRACT:%[0-9]+]]:_(p6) = G_EXTRACT [[COPY]](p0), 0 - ; GFX9-NEXT: $vgpr0 = COPY [[EXTRACT]](p6) - ; SI-LABEL: name: test_addrspacecast_p0_to_p6 - ; SI: liveins: $vgpr0_vgpr1 - ; SI-NEXT: {{ $}} - ; SI-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $vgpr0_vgpr1 - ; SI-NEXT: [[EXTRACT:%[0-9]+]]:_(p6) = G_EXTRACT [[COPY]](p0), 0 - ; SI-NEXT: $vgpr0 = COPY [[EXTRACT]](p6) + ; GCN-LABEL: name: test_addrspacecast_p0_to_p6 + ; GCN: liveins: $vgpr0_vgpr1 + ; GCN-NEXT: {{ $}} + ; GCN-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $vgpr0_vgpr1 + ; GCN-NEXT: [[EXTRACT:%[0-9]+]]:_(p6) = G_EXTRACT [[COPY]](p0), 0 + ; GCN-NEXT: $vgpr0 = COPY [[EXTRACT]](p6) %0:_(p0) = COPY $vgpr0_vgpr1 %1:_(p6) = G_ADDRSPACE_CAST %0 $vgpr0 = COPY %1 @@ -726,27 +475,13 @@ body: | bb.0: liveins: $vgpr0 - ; VI-LABEL: name: test_addrspacecast_p6_to_p0 - ; VI: liveins: $vgpr0 - ; VI-NEXT: {{ $}} - ; VI-NEXT: [[COPY:%[0-9]+]]:_(p6) = COPY $vgpr0 - ; VI-NEXT: [[C:%[0-9]+]]:_(p6) = G_CONSTANT i32 0 - ; VI-NEXT: [[MV:%[0-9]+]]:_(p0) = G_MERGE_VALUES [[COPY]](p6), [[C]](p6) - ; VI-NEXT: $vgpr0_vgpr1 = COPY [[MV]](p0) - ; GFX9-LABEL: name: test_addrspacecast_p6_to_p0 - ; GFX9: liveins: $vgpr0 - ; GFX9-NEXT: {{ $}} - ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(p6) = COPY $vgpr0 - ; GFX9-NEXT: [[C:%[0-9]+]]:_(p6) = G_CONSTANT i32 0 - ; GFX9-NEXT: [[MV:%[0-9]+]]:_(p0) = G_MERGE_VALUES [[COPY]](p6), [[C]](p6) - ; GFX9-NEXT: $vgpr0_vgpr1 = COPY [[MV]](p0) - ; SI-LABEL: name: test_addrspacecast_p6_to_p0 - ; SI: liveins: $vgpr0 - ; SI-NEXT: {{ $}} - ; SI-NEXT: [[COPY:%[0-9]+]]:_(p6) = COPY $vgpr0 - ; SI-NEXT: [[C:%[0-9]+]]:_(p6) = G_CONSTANT i32 0 - ; SI-NEXT: [[MV:%[0-9]+]]:_(p0) = G_MERGE_VALUES [[COPY]](p6), [[C]](p6) - ; SI-NEXT: $vgpr0_vgpr1 = COPY [[MV]](p0) + ; GCN-LABEL: name: test_addrspacecast_p6_to_p0 + ; GCN: liveins: $vgpr0 + ; GCN-NEXT: {{ $}} + ; GCN-NEXT: [[COPY:%[0-9]+]]:_(p6) = COPY $vgpr0 + ; GCN-NEXT: [[C:%[0-9]+]]:_(p6) = G_CONSTANT i32 0 + ; GCN-NEXT: [[MV:%[0-9]+]]:_(p0) = G_MERGE_VALUES [[COPY]](p6), [[C]](p6) + ; GCN-NEXT: $vgpr0_vgpr1 = COPY [[MV]](p0) %0:_(p6) = COPY $vgpr0 %1:_(p0) = G_ADDRSPACE_CAST %0 $vgpr0_vgpr1 = COPY %1 @@ -760,19 +495,19 @@ stack: - { id: 0, size: 4, alignment: 4 } body: | bb.0: - ; VI-LABEL: name: test_addrspacecast_p5_fi_to_p0 - ; VI: liveins: $sgpr4_sgpr5 - ; VI-NEXT: {{ $}} - ; VI-NEXT: [[COPY:%[0-9]+]]:sgpr_64(p4) = COPY $sgpr4_sgpr5 - ; VI-NEXT: [[FRAME_INDEX:%[0-9]+]]:_(p5) = G_FRAME_INDEX %stack.0 - ; VI-NEXT: [[COPY1:%[0-9]+]]:_(p4) = COPY [[COPY]](p4) - ; VI-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 68 - ; VI-NEXT: [[PTR_ADD:%[0-9]+]]:_(p4) = G_PTR_ADD [[COPY1]], [[C]](s64) - ; VI-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p4) :: (dereferenceable invariant load (s32), addrspace 4) - ; VI-NEXT: [[PTRTOINT:%[0-9]+]]:_(s32) = G_PTRTOINT [[FRAME_INDEX]](p5) - ; VI-NEXT: [[MV:%[0-9]+]]:_(p0) = G_MERGE_VALUES [[PTRTOINT]](s32), [[LOAD]](s32) - ; VI-NEXT: [[COPY2:%[0-9]+]]:_(p0) = COPY [[MV]](p0) - ; VI-NEXT: $vgpr0_vgpr1 = COPY [[COPY2]](p0) + ; SIVI-LABEL: name: test_addrspacecast_p5_fi_to_p0 + ; SIVI: liveins: $sgpr4_sgpr5 + ; SIVI-NEXT: {{ $}} + ; SIVI-NEXT: [[COPY:%[0-9]+]]:sgpr_64(p4) = COPY $sgpr4_sgpr5 + ; SIVI-NEXT: [[FRAME_INDEX:%[0-9]+]]:_(p5) = G_FRAME_INDEX %stack.0 + ; SIVI-NEXT: [[COPY1:%[0-9]+]]:_(p4) = COPY [[COPY]](p4) + ; SIVI-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 68 + ; SIVI-NEXT: [[PTR_ADD:%[0-9]+]]:_(p4) = G_PTR_ADD [[COPY1]], [[C]](s64) + ; SIVI-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p4) :: (dereferenceable invariant load (s32), addrspace 4) + ; SIVI-NEXT: [[PTRTOINT:%[0-9]+]]:_(s32) = G_PTRTOINT [[FRAME_INDEX]](p5) + ; SIVI-NEXT: [[MV:%[0-9]+]]:_(p0) = G_MERGE_VALUES [[PTRTOINT]](s32), [[LOAD]](s32) + ; SIVI-NEXT: [[COPY2:%[0-9]+]]:_(p0) = COPY [[MV]](p0) + ; SIVI-NEXT: $vgpr0_vgpr1 = COPY [[COPY2]](p0) ; GFX9-LABEL: name: test_addrspacecast_p5_fi_to_p0 ; GFX9: [[FRAME_INDEX:%[0-9]+]]:_(p5) = G_FRAME_INDEX %stack.0 ; GFX9-NEXT: [[S_MOV_B64_:%[0-9]+]]:sreg_64(s64) = S_MOV_B64 $src_private_base @@ -781,10 +516,6 @@ body: | ; GFX9-NEXT: [[MV:%[0-9]+]]:_(p0) = G_MERGE_VALUES [[PTRTOINT]](s32), [[UV1]](s32) ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY [[MV]](p0) ; GFX9-NEXT: $vgpr0_vgpr1 = COPY [[COPY]](p0) - ; SI-LABEL: name: test_addrspacecast_p5_fi_to_p0 - ; SI: [[FRAME_INDEX:%[0-9]+]]:_(p5) = G_FRAME_INDEX %stack.0 - ; SI-NEXT: [[ADDRSPACE_CAST:%[0-9]+]]:_(p0) = G_ADDRSPACE_CAST [[FRAME_INDEX]](p5) - ; SI-NEXT: $vgpr0_vgpr1 = COPY [[ADDRSPACE_CAST]](p0) %0:_(p5) = G_FRAME_INDEX %stack.0 %1:_(p0) = G_ADDRSPACE_CAST %0 $vgpr0_vgpr1 = COPY %1 diff --git a/llvm/test/CodeGen/AMDGPU/addrspacecast.gfx6.ll b/llvm/test/CodeGen/AMDGPU/addrspacecast.gfx6.ll new file mode 100644 index 0000000000000..10dec31e62305 --- /dev/null +++ b/llvm/test/CodeGen/AMDGPU/addrspacecast.gfx6.ll @@ -0,0 +1,154 @@ +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py +; RUN: llc -global-isel=0 -mtriple=amdgcn-amd-amdpal -mcpu=tahiti < %s | FileCheck %s +; RUN: llc -global-isel=1 -mtriple=amdgcn-amd-amdpal -mcpu=tahiti < %s | FileCheck %s + +define ptr @global_to_flat_addrspacecast(ptr addrspace(1) %ptr) { +; CHECK-LABEL: global_to_flat_addrspacecast: +; CHECK: ; %bb.0: +; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) +; CHECK-NEXT: s_setpc_b64 s[30:31] + %stof = addrspacecast ptr addrspace(1) %ptr to ptr + ret ptr %stof +} + +define ptr addrspace(1) @flat_to_gobal_addrspacecast(ptr %ptr) { +; CHECK-LABEL: flat_to_gobal_addrspacecast: +; CHECK: ; %bb.0: +; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) +; CHECK-NEXT: s_setpc_b64 s[30:31] + %stof = addrspacecast ptr %ptr to ptr addrspace(1) + ret ptr addrspace(1) %stof +} + +define ptr @group_to_flat_addrspacecast(ptr addrspace(3) %ptr) { +; CHECK-LABEL: group_to_flat_addrspacecast: +; CHECK: ; %bb.0: +; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) +; CHECK-NEXT: s_load_dword s4, s[6:7], 0x10 +; CHECK-NEXT: v_cmp_ne_u32_e32 vcc, -1, v0 +; CHECK-NEXT: v_cndmask_b32_e32 v0, 0, v0, vcc +; CHECK-NEXT: s_waitcnt lgkmcnt(0) +; CHECK-NEXT: v_mov_b32_e32 v1, s4 +; CHECK-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc +; CHECK-NEXT: s_setpc_b64 s[30:31] + %stof = addrspacecast ptr addrspace(3) %ptr to ptr + ret ptr %stof +} + +define ptr addrspace(3) @flat_to_group_addrspacecast(ptr %ptr) { +; CHECK-LABEL: flat_to_group_addrspacecast: +; CHECK: ; %bb.0: +; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) +; CHECK-NEXT: v_cmp_ne_u64_e32 vcc, 0, v[0:1] +; CHECK-NEXT: v_cndmask_b32_e32 v0, -1, v0, vcc +; CHECK-NEXT: s_setpc_b64 s[30:31] + %stof = addrspacecast ptr %ptr to ptr addrspace(3) + ret ptr addrspace(3) %stof +} + +define ptr @private_to_flat_addrspacecast(ptr addrspace(5) %ptr) { +; CHECK-LABEL: private_to_flat_addrspacecast: +; CHECK: ; %bb.0: +; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) +; CHECK-NEXT: s_load_dword s4, s[6:7], 0x11 +; CHECK-NEXT: v_cmp_ne_u32_e32 vcc, -1, v0 +; CHECK-NEXT: v_cndmask_b32_e32 v0, 0, v0, vcc +; CHECK-NEXT: s_waitcnt lgkmcnt(0) +; CHECK-NEXT: v_mov_b32_e32 v1, s4 +; CHECK-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc +; CHECK-NEXT: s_setpc_b64 s[30:31] + %stof = addrspacecast ptr addrspace(5) %ptr to ptr + ret ptr %stof +} + +define ptr addrspace(5) @flat_to_private_addrspacecast(ptr %ptr) { +; CHECK-LABEL: flat_to_private_addrspacecast: +; CHECK: ; %bb.0: +; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) +; CHECK-NEXT: v_cmp_ne_u64_e32 vcc, 0, v[0:1] +; CHECK-NEXT: v_cndmask_b32_e32 v0, -1, v0, vcc +; CHECK-NEXT: s_setpc_b64 s[30:31] + %stof = addrspacecast ptr %ptr to ptr addrspace(5) + ret ptr addrspace(5) %stof +} + +define ptr addrspace(6) @constant_to_constant32_addrspacecast(ptr addrspace(4) %ptr, i32 %offset) { +; CHECK-LABEL: constant_to_constant32_addrspacecast: +; CHECK: ; %bb.0: +; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) +; CHECK-NEXT: v_add_i32_e32 v0, vcc, v0, v2 +; CHECK-NEXT: s_setpc_b64 s[30:31] + %addrspacecast = addrspacecast ptr addrspace(4) %ptr to ptr addrspace(6) + %gep = getelementptr i8, ptr addrspace(6) %addrspacecast, i32 %offset + ret ptr addrspace(6) %gep +} + +define ptr addrspace(6) @global_to_constant32_addrspacecast(ptr addrspace(1) %ptr, i32 %offset) { +; CHECK-LABEL: global_to_constant32_addrspacecast: +; CHECK: ; %bb.0: +; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) +; CHECK-NEXT: v_add_i32_e32 v0, vcc, v0, v2 +; CHECK-NEXT: s_setpc_b64 s[30:31] + %addrspacecast = addrspacecast ptr addrspace(1) %ptr to ptr addrspace(6) + %gep = getelementptr i8, ptr addrspace(6) %addrspacecast, i32 %offset + ret ptr addrspace(6) %gep +} + +define ptr @constant32bit_to_flat_addrspacecast_0(ptr addrspace(6) %ptr) { +; CHECK-LABEL: constant32bit_to_flat_addrspacecast_0: +; CHECK: ; %bb.0: +; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) +; CHECK-NEXT: v_mov_b32_e32 v1, 0 +; CHECK-NEXT: s_setpc_b64 s[30:31] + %stof = addrspacecast ptr addrspace(6) %ptr to ptr + ret ptr %stof +} + +define ptr @constant32bit_to_flat_addrspacecast_1(ptr addrspace(6) %ptr) #0 { +; CHECK-LABEL: constant32bit_to_flat_addrspacecast_1: +; CHECK: ; %bb.0: +; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) +; CHECK-NEXT: v_mov_b32_e32 v1, 0xffff8000 +; CHECK-NEXT: s_setpc_b64 s[30:31] + %stof = addrspacecast ptr addrspace(6) %ptr to ptr + ret ptr %stof +} + +define ptr addrspace(1) @addrspacecast_flat_null_to_global() { +; CHECK-LABEL: addrspacecast_flat_null_to_global: +; CHECK: ; %bb.0: +; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) +; CHECK-NEXT: v_mov_b32_e32 v0, 0 +; CHECK-NEXT: v_mov_b32_e32 v1, 0 +; CHECK-NEXT: s_setpc_b64 s[30:31] + ret ptr addrspace(1) addrspacecast (ptr null to ptr addrspace(1)) +} + +define ptr addrspace(3) @addrspacecast_flat_null_to_group() { +; CHECK-LABEL: addrspacecast_flat_null_to_group: +; CHECK: ; %bb.0: +; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) +; CHECK-NEXT: v_mov_b32_e32 v0, -1 +; CHECK-NEXT: s_setpc_b64 s[30:31] + ret ptr addrspace(3) addrspacecast (ptr null to ptr addrspace(3)) +} + +define ptr addrspace(5) @addrspacecast_flat_null_to_private() { +; CHECK-LABEL: addrspacecast_flat_null_to_private: +; CHECK: ; %bb.0: +; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) +; CHECK-NEXT: v_mov_b32_e32 v0, -1 +; CHECK-NEXT: s_setpc_b64 s[30:31] + ret ptr addrspace(5) addrspacecast (ptr null to ptr addrspace(5)) +} + +define ptr addrspace(6) @addrspacecast_flat_null_to_constant32bit() { +; CHECK-LABEL: addrspacecast_flat_null_to_constant32bit: +; CHECK: ; %bb.0: +; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) +; CHECK-NEXT: v_mov_b32_e32 v0, 0 +; CHECK-NEXT: s_setpc_b64 s[30:31] + ret ptr addrspace(6) addrspacecast (ptr null to ptr addrspace(6)) +} + +attributes #0 = { "amdgpu-32bit-address-high-bits"="0xffff8000" }