summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorTom Stellard <tstellar@redhat.com>2018-06-30 04:09:44 +0000
committerTom Stellard <tstellar@redhat.com>2018-06-30 04:09:44 +0000
commiteebbfc2809d7d4b96c4c7040450c3171f710d5d6 (patch)
tree1a9c7c98b5e89c9643adad0246d4f2d70b818ded /llvm/lib
parent8bda1881cadcd8072fd06a4440e8ad57a8a329b3 (diff)
downloadbcm5719-llvm-eebbfc2809d7d4b96c4c7040450c3171f710d5d6.tar.gz
bcm5719-llvm-eebbfc2809d7d4b96c4c7040450c3171f710d5d6.zip
AMDGPU/GlobalISel: Make IMPLICIT_DEF of all sizes < 512 legal.
Summary: We could split sizes that are not power of two into smaller sized G_IMPLICIT_DEF instructions, but this ends up generating G_MERGE_VALUES instructions which we then have to handle in the instruction selector. Since G_IMPLICIT_DEF is really a no-op it's easier just to keep everything that can fit into a register legal. Reviewers: arsenm Reviewed By: arsenm Subscribers: kzhuravl, wdng, nhaehnle, yaxunl, rovka, kristof.beyls, dstuttard, tpr, t-tye, llvm-commits Differential Revision: https://reviews.llvm.org/D48777 llvm-svn: 336041
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp12
1 files changed, 10 insertions, 2 deletions
diff --git a/llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp b/llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp
index 38e81de7fa1..ff16ceed6ab 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp
+++ b/llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp
@@ -39,6 +39,7 @@ AMDGPULegalizerInfo::AMDGPULegalizerInfo(const SISubtarget &ST,
const LLT S32 = LLT::scalar(32);
const LLT S64 = LLT::scalar(64);
+ const LLT S512 = LLT::scalar(512);
const LLT GlobalPtr = GetAddrSpacePtr(AMDGPUAS::GLOBAL_ADDRESS);
const LLT ConstantPtr = GetAddrSpacePtr(AMDGPUAS::CONSTANT_ADDRESS);
@@ -70,9 +71,16 @@ AMDGPULegalizerInfo::AMDGPULegalizerInfo(const SISubtarget &ST,
getActionDefinitionsBuilder(G_FCONSTANT)
.legalFor({S32, S64});
+
+ // G_IMPLICIT_DEF is a no-op so we can make it legal for any value type that
+ // can fit in a register.
+ // FIXME: We need to legalize several more operations before we can add
+ // a test case for size > 512.
getActionDefinitionsBuilder(G_IMPLICIT_DEF)
- .legalFor({S1, S32, S64,
- GlobalPtr, ConstantPtr, LocalPtr, FlatPtr, PrivatePtr});
+ .legalIf([=](const LegalityQuery &Query) {
+ return Query.Types[0].getSizeInBits() <= 512;
+ })
+ .clampScalar(0, S1, S512);
getActionDefinitionsBuilder(G_CONSTANT)
.legalFor({S1, S32, S64});
OpenPOWER on IntegriCloud