diff options
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) |