diff options
author | Matt Arsenault <Matthew.Arsenault@amd.com> | 2019-10-06 01:37:35 +0000 |
---|---|---|
committer | Matt Arsenault <Matthew.Arsenault@amd.com> | 2019-10-06 01:37:35 +0000 |
commit | a5b9c756745ea88631277ab00c1b26f45f9d7e11 (patch) | |
tree | 4526c93d087e512d31dec71c716423b6db1071a6 /llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp | |
parent | 69c65a86097f11450a50af0c8213a0ee47983145 (diff) | |
download | bcm5719-llvm-a5b9c756745ea88631277ab00c1b26f45f9d7e11.tar.gz bcm5719-llvm-a5b9c756745ea88631277ab00c1b26f45f9d7e11.zip |
GlobalISel: Partially implement lower for G_EXTRACT
Turn into shift and truncate. Doesn't yet handle pointers.
llvm-svn: 373838
Diffstat (limited to 'llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp')
-rw-r--r-- | llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp b/llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp index f61c9753d2a..ff029e5491c 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp @@ -48,6 +48,12 @@ static LegalityPredicate isMultiple32(unsigned TypeIdx, }; } +static LegalityPredicate sizeIs(unsigned TypeIdx, unsigned Size) { + return [=](const LegalityQuery &Query) { + return Query.Types[TypeIdx].getSizeInBits() == Size; + }; +} + static LegalityPredicate isSmallOddVector(unsigned TypeIdx) { return [=](const LegalityQuery &Query) { const LLT Ty = Query.Types[TypeIdx]; @@ -903,7 +909,13 @@ AMDGPULegalizerInfo::AMDGPULegalizerInfo(const GCNSubtarget &ST_, unsigned LitTyIdx = Op == G_EXTRACT ? 0 : 1; // FIXME: Doesn't handle extract of illegal sizes. - getActionDefinitionsBuilder(Op) + auto &Builder = getActionDefinitionsBuilder(Op); + + // FIXME: Cleanup when G_INSERT lowering implemented. + if (Op == G_EXTRACT) + Builder.lowerIf(all(typeIs(LitTyIdx, S16), sizeIs(BigTyIdx, 32))); + + Builder .legalIf([=](const LegalityQuery &Query) { const LLT BigTy = Query.Types[BigTyIdx]; const LLT LitTy = Query.Types[LitTyIdx]; |