From 503afda95f36e162ffd43ff348d1706e36b8e1a9 Mon Sep 17 00:00:00 2001 From: Matt Arsenault Date: Mon, 12 Mar 2018 13:35:43 +0000 Subject: AMDGPU/GlobalISel: Make some G_MERGE_VALUEs legal llvm-svn: 327267 --- llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp | 27 ++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'llvm/lib/Target/AMDGPU') diff --git a/llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp b/llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp index 366a2eb887e..5c1359e3161 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp @@ -119,5 +119,32 @@ AMDGPULegalizerInfo::AMDGPULegalizerInfo(const SISubtarget &ST, (Ty1.getSizeInBits() % 32 == 0); }); + // Merge/Unmerge + for (unsigned Op : {G_MERGE_VALUES, G_UNMERGE_VALUES}) { + unsigned BigTyIdx = Op == G_MERGE_VALUES ? 0 : 1; + unsigned LitTyIdx = Op == G_MERGE_VALUES ? 1 : 0; + + getActionDefinitionsBuilder(Op) + .legalIf([=](const LegalityQuery &Query) { + const LLT &BigTy = Query.Types[BigTyIdx]; + const LLT &LitTy = Query.Types[LitTyIdx]; + return BigTy.getSizeInBits() % 32 == 0 && + LitTy.getSizeInBits() % 32 == 0 && + BigTy.getSizeInBits() <= 512; + }) + // Any vectors left are the wrong size. Scalarize them. + .fewerElementsIf([](const LegalityQuery &Query) { return true; }, + [](const LegalityQuery &Query) { + return std::make_pair( + 0, Query.Types[0].getElementType()); + }) + .fewerElementsIf([](const LegalityQuery &Query) { return true; }, + [](const LegalityQuery &Query) { + return std::make_pair( + 1, Query.Types[1].getElementType()); + }); + + } + computeTables(); } -- cgit v1.2.3