[PATCH] D103323: [DAGCombiner] Add support for mulhi const folding in DAGCombiner
David Stuttard via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri May 28 08:42:55 PDT 2021
dstuttard created this revision.
Herald added subscribers: ecnelises, hiraditya.
dstuttard requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D103323
Files:
llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
===================================================================
--- llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
+++ llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
@@ -5085,6 +5085,18 @@
if (!C2.getBoolValue())
break;
return C1.srem(C2);
+ case ISD::MULHS: {
+ unsigned FullWidth = C1.getBitWidth() * 2;
+ APInt C1Ext = C1.sextOrTrunc(FullWidth);
+ APInt C2Ext = C2.sextOrTrunc(FullWidth);
+ return (C1Ext * C2Ext).getHiBits(C1.getBitWidth()).trunc(C1.getBitWidth());
+ }
+ case ISD::MULHU: {
+ unsigned FullWidth = C1.getBitWidth() * 2;
+ APInt C1Ext = C1.zextOrTrunc(FullWidth);
+ APInt C2Ext = C2.zextOrTrunc(FullWidth);
+ return (C1Ext * C2Ext).getHiBits(C1.getBitWidth()).trunc(C1.getBitWidth());
+ }
}
return llvm::None;
}
Index: llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
===================================================================
--- llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
+++ llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
@@ -4450,6 +4450,11 @@
return DAG.getConstant(0, DL, VT);
}
+ // fold (mulhs c1, c2)
+ if (SDValue C =
+ DAG.FoldConstantArithmetic(ISD::MULHS, SDLoc(N), VT, {N0, N1}))
+ return C;
+
// fold (mulhs x, 0) -> 0
if (isNullConstant(N1))
return N1;
@@ -4498,6 +4503,11 @@
return DAG.getConstant(0, DL, VT);
}
+ // fold (mulhu c1, c2)
+ if (SDValue C =
+ DAG.FoldConstantArithmetic(ISD::MULHU, SDLoc(N), VT, {N0, N1}))
+ return C;
+
// fold (mulhu x, 0) -> 0
if (isNullConstant(N1))
return N1;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D103323.348540.patch
Type: text/x-patch
Size: 1624 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210528/39ecb947/attachment.bin>
More information about the llvm-commits
mailing list