diff options
author | Matt Arsenault <Matthew.Arsenault@amd.com> | 2019-02-07 17:25:51 +0000 |
---|---|---|
committer | Matt Arsenault <Matthew.Arsenault@amd.com> | 2019-02-07 17:25:51 +0000 |
commit | 91be65be656072a68b51a8c4e7bb751ea475d896 (patch) | |
tree | d3c63504f16de21d3e4e6dce07fa57b024c084c1 /llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp | |
parent | bae220ce9c2b774e06bb0e811ccb0d7a018c526f (diff) | |
download | bcm5719-llvm-91be65be656072a68b51a8c4e7bb751ea475d896.tar.gz bcm5719-llvm-91be65be656072a68b51a8c4e7bb751ea475d896.zip |
GlobalISel: Try to make legalize rules more useful for vectors
Mostly keep the existing functions on scalars, but add versions which
also operate based on the vector element size.
llvm-svn: 353430
Diffstat (limited to 'llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp')
-rw-r--r-- | llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp | 25 |
1 files changed, 7 insertions, 18 deletions
diff --git a/llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp b/llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp index d25ed987526..5ffab5ca96e 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp @@ -435,29 +435,18 @@ AMDGPULegalizerInfo::AMDGPULegalizerInfo(const GCNSubtarget &ST, // FIXME: Doesn't handle extract of illegal sizes. getActionDefinitionsBuilder({G_EXTRACT, G_INSERT}) - .legalIf([=](const LegalityQuery &Query) { + .legalIf([=](const LegalityQuery &Query) { const LLT &Ty0 = Query.Types[0]; const LLT &Ty1 = Query.Types[1]; return (Ty0.getSizeInBits() % 16 == 0) && (Ty1.getSizeInBits() % 16 == 0); }) - .widenScalarIf( - [=](const LegalityQuery &Query) { - const LLT &Ty1 = Query.Types[1]; - return (Ty1.getScalarSizeInBits() < 16); - }, - // TODO Use generic LegalizeMutation - [](const LegalityQuery &Query) { - LLT Ty1 = Query.Types[1]; - unsigned NewEltSizeInBits = - std::max(1 << Log2_32_Ceil(Ty1.getScalarSizeInBits()), 16); - if (Ty1.isVector()) { - return std::make_pair(1, LLT::vector(Ty1.getNumElements(), - NewEltSizeInBits)); - } - - return std::make_pair(1, LLT::scalar(NewEltSizeInBits)); - }); + .widenScalarIf( + [=](const LegalityQuery &Query) { + const LLT Ty1 = Query.Types[1]; + return (Ty1.getScalarSizeInBits() < 16); + }, + LegalizeMutations::widenScalarOrEltToNextPow2(1, 16)); // TODO: vectors of pointers getActionDefinitionsBuilder(G_BUILD_VECTOR) |