[PATCH] D74189: GlobalISel: Fix narrowing of G_CTPOP
Matt Arsenault via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Feb 6 19:43:52 PST 2020
arsenm created this revision.
arsenm added reviewers: aemerson, aditya_nandakumar, paquette, Petar.Avramovic.
Herald added subscribers: volkan, atanasyan, hiraditya, tpr, rovka, wdng, sdardis.
Herald added a project: LLVM.
The result type is separate from the source type. Tests will be
included in a future AMDGPU patch which uses this from
RegBankSelect/applyMappingImpl.
https://reviews.llvm.org/D74189
Files:
llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp
llvm/lib/Target/Mips/MipsLegalizerInfo.cpp
Index: llvm/lib/Target/Mips/MipsLegalizerInfo.cpp
===================================================================
--- llvm/lib/Target/Mips/MipsLegalizerInfo.cpp
+++ llvm/lib/Target/Mips/MipsLegalizerInfo.cpp
@@ -216,6 +216,7 @@
getActionDefinitionsBuilder(G_CTPOP)
.lowerFor({{s32, s32}})
+ .clampScalar(0, s32, s32)
.clampScalar(1, s32, s32);
// FP instructions
Index: llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp
===================================================================
--- llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp
+++ llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp
@@ -4040,16 +4040,17 @@
if (TypeIdx != 1)
return UnableToLegalize;
+ Register DstReg = MI.getOperand(0).getReg();
+ LLT DstTy = MRI.getType(DstReg);
LLT SrcTy = MRI.getType(MI.getOperand(1).getReg());
unsigned NarrowSize = NarrowTy.getSizeInBits();
if (SrcTy.isScalar() && SrcTy.getSizeInBits() == 2 * NarrowSize) {
auto UnmergeSrc = MIRBuilder.buildUnmerge(NarrowTy, MI.getOperand(1));
- auto LoCTPOP = MIRBuilder.buildCTPOP(NarrowTy, UnmergeSrc.getReg(0));
- auto HiCTPOP = MIRBuilder.buildCTPOP(NarrowTy, UnmergeSrc.getReg(1));
- auto Out = MIRBuilder.buildAdd(NarrowTy, HiCTPOP, LoCTPOP);
- MIRBuilder.buildZExt(MI.getOperand(0), Out);
+ auto LoCTPOP = MIRBuilder.buildCTPOP(DstTy, UnmergeSrc.getReg(0));
+ auto HiCTPOP = MIRBuilder.buildCTPOP(DstTy, UnmergeSrc.getReg(1));
+ MIRBuilder.buildAdd(DstReg, HiCTPOP, LoCTPOP);
MI.eraseFromParent();
return Legalized;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D74189.243069.patch
Type: text/x-patch
Size: 1553 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200207/e90197a1/attachment.bin>
More information about the llvm-commits
mailing list