diff options
| author | Matt Arsenault <Matthew.Arsenault@amd.com> | 2019-02-19 16:30:19 +0000 |
|---|---|---|
| committer | Matt Arsenault <Matthew.Arsenault@amd.com> | 2019-02-19 16:30:19 +0000 |
| commit | 26b7e859efb0dd76028003720594869c7ed64ced (patch) | |
| tree | 362e6c4f9a9fd8d97412f54697c816bb0d081c97 /llvm/lib/Target/AMDGPU | |
| parent | d82914c8d271cc6735d03ec07ce151d568f8b716 (diff) | |
| download | bcm5719-llvm-26b7e859efb0dd76028003720594869c7ed64ced.tar.gz bcm5719-llvm-26b7e859efb0dd76028003720594869c7ed64ced.zip | |
GlobalISel: Implement moreElementsVector for bit ops
llvm-svn: 354345
Diffstat (limited to 'llvm/lib/Target/AMDGPU')
| -rw-r--r-- | llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp b/llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp index 58fd948ccc5..64ef92b3efd 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp @@ -55,6 +55,24 @@ static LegalizeMutation oneMoreElement(unsigned TypeIdx) { }; } +static LegalizeMutation fewerEltsToSize64Vector(unsigned TypeIdx) { + return [=](const LegalityQuery &Query) { + const LLT Ty = Query.Types[TypeIdx]; + const LLT EltTy = Ty.getElementType(); + unsigned Size = Ty.getSizeInBits(); + unsigned Pieces = (Size + 63) / 64; + unsigned NewNumElts = (Ty.getNumElements() + 1) / Pieces; + return std::make_pair(TypeIdx, LLT::scalarOrVector(NewNumElts, EltTy)); + }; +} + +static LegalityPredicate vectorWiderThan(unsigned TypeIdx, unsigned Size) { + return [=](const LegalityQuery &Query) { + const LLT QueryTy = Query.Types[TypeIdx]; + return QueryTy.isVector() && QueryTy.getSizeInBits() > Size; + }; +} + AMDGPULegalizerInfo::AMDGPULegalizerInfo(const GCNSubtarget &ST, const GCNTargetMachine &TM) { @@ -135,6 +153,8 @@ AMDGPULegalizerInfo::AMDGPULegalizerInfo(const GCNSubtarget &ST, getActionDefinitionsBuilder({G_AND, G_OR, G_XOR}) .legalFor({S32, S1, S64, V2S32, V2S16, V4S16}) .clampScalar(0, S32, S64) + .moreElementsIf(isSmallOddVector(0), oneMoreElement(0)) + .fewerElementsIf(vectorWiderThan(0, 32), fewerEltsToSize64Vector(0)) .scalarize(0); getActionDefinitionsBuilder({G_UADDO, G_SADDO, G_USUBO, G_SSUBO, |

