diff options
author | Matt Arsenault <Matthew.Arsenault@amd.com> | 2019-01-30 04:19:31 +0000 |
---|---|---|
committer | Matt Arsenault <Matthew.Arsenault@amd.com> | 2019-01-30 04:19:31 +0000 |
commit | dc6c78596b76856d98830060359467483e58d36e (patch) | |
tree | c24011d3e40a0c942f36151def609ce286e97b7a /llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp | |
parent | a8710a6e7ea8bca33f25b0af796c34cf88bde066 (diff) | |
download | bcm5719-llvm-dc6c78596b76856d98830060359467483e58d36e.tar.gz bcm5719-llvm-dc6c78596b76856d98830060359467483e58d36e.zip |
GlobalISel: Implement fewerElementsVector for select
llvm-svn: 352601
Diffstat (limited to 'llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp')
-rw-r--r-- | llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp b/llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp index 0da46072702..d665ffbb146 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp @@ -314,7 +314,26 @@ AMDGPULegalizerInfo::AMDGPULegalizerInfo(const GCNSubtarget &ST, getActionDefinitionsBuilder(G_SELECT) .legalFor({{S32, S1}, {S64, S1}, {V2S32, S1}, {V2S16, S1}}) .clampScalar(0, S32, S64) - .scalarize(0); + .fewerElementsIf( + [=](const LegalityQuery &Query) { + if (Query.Types[1].isVector()) + return true; + + LLT Ty = Query.Types[0]; + + // FIXME: Hack until odd splits handled + return Ty.isVector() && + (Ty.getScalarSizeInBits() > 32 || Ty.getNumElements() % 2 != 0); + }, + scalarize(0)) + // FIXME: Handle 16-bit vectors better + .fewerElementsIf( + [=](const LegalityQuery &Query) { + return Query.Types[0].isVector() && + Query.Types[0].getElementType().getSizeInBits() < 32;}, + scalarize(0)) + .scalarize(1) + .clampMaxNumElements(0, S32, 2); // 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. |