[llvm] e72fe65 - [DAGCombiner] Use getShiftAmountConstant in DAGCombiner::foldSelectOfConstants.
Craig Topper via llvm-commits
llvm-commits at lists.llvm.org
Sun Feb 13 19:28:22 PST 2022
Author: Craig Topper
Date: 2022-02-13T19:09:26-08:00
New Revision: e72fe654b72349d93b86a3dae28fc5bcce970f85
URL: https://github.com/llvm/llvm-project/commit/e72fe654b72349d93b86a3dae28fc5bcce970f85
DIFF: https://github.com/llvm/llvm-project/commit/e72fe654b72349d93b86a3dae28fc5bcce970f85.diff
LOG: [DAGCombiner] Use getShiftAmountConstant in DAGCombiner::foldSelectOfConstants.
This enables fshl to be matched earlier on X86
%6 = lshr i32 %3, 1
%7 = select i1 %4, i32 -2147483648, i32 0
%8 = or i32 %6, %7
X86 uses i8 for shift amounts. SelectionDAGBuilder creates the
ISD::SRL with an i8 shift type. DAGCombiner turns the select into
an ISD::SHL. Prior to this patch it would use i32 for the shift
amount. fshl matching failed because the shift amounts have different
types. LegalizeDAG fixes the ISD::SHL shift amount to i8. This
allowed fshl matching to succeed.
With this patch, the ISD::SHL will be created with an i8 shift
amount. This allows the fshl to match immediately.
No test case beause we still end up with a fshl either way.
Added:
Modified:
llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
Removed:
################################################################################
diff --git a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
index dbf2f4e459aa4..8646fabb12620 100644
--- a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
@@ -9765,7 +9765,8 @@ SDValue DAGCombiner::foldSelectOfConstants(SDNode *N) {
if (C1Val.isPowerOf2() && C2Val.isZero()) {
if (VT != MVT::i1)
Cond = DAG.getNode(ISD::ZERO_EXTEND, DL, VT, Cond);
- SDValue ShAmtC = DAG.getConstant(C1Val.exactLogBase2(), DL, VT);
+ SDValue ShAmtC =
+ DAG.getShiftAmountConstant(C1Val.exactLogBase2(), VT, DL);
return DAG.getNode(ISD::SHL, DL, VT, Cond, ShAmtC);
}
More information about the llvm-commits
mailing list