diff options
author | Matt Arsenault <Matthew.Arsenault@amd.com> | 2019-02-07 19:10:15 +0000 |
---|---|---|
committer | Matt Arsenault <Matthew.Arsenault@amd.com> | 2019-02-07 19:10:15 +0000 |
commit | d914189a2ec513dd49551a20757ff623a6d50476 (patch) | |
tree | bb12467b1a1c8a519a90943bac172fd019342c80 /llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp | |
parent | adf0aad79468d667da1bd5a28f262ebf4bc87296 (diff) | |
download | bcm5719-llvm-d914189a2ec513dd49551a20757ff623a6d50476.tar.gz bcm5719-llvm-d914189a2ec513dd49551a20757ff623a6d50476.zip |
AMDGPU/GlobalISel: Restrict g_implicit_def legality
llvm-svn: 353452
Diffstat (limited to 'llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp')
-rw-r--r-- | llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp b/llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp index 419e7112316..da5c42d10a0 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp @@ -25,6 +25,16 @@ using namespace LegalizeActions; using namespace LegalizeMutations; using namespace LegalityPredicates; + +static LegalityPredicate isMultiple32(unsigned TypeIdx, + unsigned MaxSize = 512) { + return [=](const LegalityQuery &Query) { + const LLT Ty = Query.Types[TypeIdx]; + const LLT EltTy = Ty.getScalarType(); + return Ty.getSizeInBits() <= MaxSize && EltTy.getSizeInBits() % 32 == 0; + }; +} + AMDGPULegalizerInfo::AMDGPULegalizerInfo(const GCNSubtarget &ST, const GCNTargetMachine &TM) { using namespace TargetOpcode; @@ -121,15 +131,12 @@ AMDGPULegalizerInfo::AMDGPULegalizerInfo(const GCNSubtarget &ST, getActionDefinitionsBuilder(G_FCONSTANT) .legalFor({S32, S64, S16}); - // 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) - .legalIf([=](const LegalityQuery &Query) { - return Query.Types[0].getSizeInBits() <= 512; - }) - .clampScalar(0, S1, S512); + .legalFor({S1, S32, S64, V2S32, V4S32, V2S16, V4S16, GlobalPtr, + ConstantPtr, LocalPtr, FlatPtr, PrivatePtr}) + .legalFor({LLT::vector(3, 16)})// FIXME: Hack + .clampScalarOrElt(0, S32, S512) + .legalIf(isMultiple32(0)); // FIXME: i1 operands to intrinsics should always be legal, but other i1 |