diff options
Diffstat (limited to 'llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp')
-rw-r--r-- | llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp | 38 |
1 files changed, 9 insertions, 29 deletions
diff --git a/llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp b/llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp index b6c66829f07..26dbd25ec9d 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp @@ -22,17 +22,13 @@ using namespace llvm; using namespace LegalizeActions; +using namespace LegalizeMutations; using namespace LegalityPredicates; AMDGPULegalizerInfo::AMDGPULegalizerInfo(const GCNSubtarget &ST, const GCNTargetMachine &TM) { using namespace TargetOpcode; - auto scalarize = [=](const LegalityQuery &Query, unsigned TypeIdx) { - const LLT &Ty = Query.Types[TypeIdx]; - return std::make_pair(TypeIdx, Ty.getElementType()); - }; - auto GetAddrSpacePtr = [&TM](unsigned AS) { return LLT::pointer(AS, TM.getPointerSizeInBits(AS)); }; @@ -144,9 +140,7 @@ AMDGPULegalizerInfo::AMDGPULegalizerInfo(const GCNSubtarget &ST, getActionDefinitionsBuilder({G_FADD, G_FMUL, G_FNEG, G_FABS, G_FMA}) .legalFor({S32, S64}) - .fewerElementsIf( - [=](const LegalityQuery &Query) { return Query.Types[0].isVector(); }, - [=](const LegalityQuery &Query) { return scalarize(Query, 0); }) + .scalarize(0) .clampScalar(0, S32, S64); getActionDefinitionsBuilder(G_FPTRUNC) @@ -161,9 +155,7 @@ AMDGPULegalizerInfo::AMDGPULegalizerInfo(const GCNSubtarget &ST, .legalFor({S32}) // Must use fadd + fneg .lowerFor({S64, S16, V2S16}) - .fewerElementsIf( - [=](const LegalityQuery &Query) { return Query.Types[0].isVector(); }, - [=](const LegalityQuery &Query) { return scalarize(Query, 0); }) + .scalarize(0) .clampScalar(0, S32, S64); setAction({G_FCMP, S1}, Legal); @@ -272,7 +264,8 @@ AMDGPULegalizerInfo::AMDGPULegalizerInfo(const GCNSubtarget &ST, // TODO: Pointer types, any 32-bit or 64-bit vector getActionDefinitionsBuilder(G_SELECT) .legalFor({{S32, S1}, {S64, S1}, {V2S32, S1}, {V2S16, S1}}) - .clampScalar(0, S32, S64); + .clampScalar(0, S32, S64) + .scalarize(0); // TODO: Only the low 4/5/6 bits of the shift amount are observed, so we can // be more flexible with the shift amount type. @@ -367,10 +360,10 @@ AMDGPULegalizerInfo::AMDGPULegalizerInfo(const GCNSubtarget &ST, // Break up vectors with weird elements into scalars .fewerElementsIf( [=](const LegalityQuery &Query) { return notValidElt(Query, 0); }, - [=](const LegalityQuery &Query) { return scalarize(Query, 0); }) + scalarize(0)) .fewerElementsIf( [=](const LegalityQuery &Query) { return notValidElt(Query, 1); }, - [=](const LegalityQuery &Query) { return scalarize(Query, 1); }) + scalarize(1)) .clampScalar(BigTyIdx, S32, S512) .widenScalarIf( [=](const LegalityQuery &Query) { @@ -410,21 +403,8 @@ AMDGPULegalizerInfo::AMDGPULegalizerInfo(const GCNSubtarget &ST, BigTy.getSizeInBits() <= 512; }) // Any vectors left are the wrong size. Scalarize them. - .fewerElementsIf([](const LegalityQuery &Query) { - return Query.Types[0].isVector(); - }, - [](const LegalityQuery &Query) { - return std::make_pair( - 0, Query.Types[0].getElementType()); - }) - .fewerElementsIf([](const LegalityQuery &Query) { - return Query.Types[1].isVector(); - }, - [](const LegalityQuery &Query) { - return std::make_pair( - 1, Query.Types[1].getElementType()); - }); - + .scalarize(0) + .scalarize(1); } computeTables(); |