[llvm] b4f5913 - [DAG] visitSHL - move SimplifyDemandedBits after all standard folds to give them a chance to match
Simon Pilgrim via llvm-commits
llvm-commits at lists.llvm.org
Mon Oct 2 08:09:49 PDT 2023
Author: Simon Pilgrim
Date: 2023-10-02T16:09:35+01:00
New Revision: b4f591363c834a0914da9ede2c581eafc0743936
URL: https://github.com/llvm/llvm-project/commit/b4f591363c834a0914da9ede2c581eafc0743936
DIFF: https://github.com/llvm/llvm-project/commit/b4f591363c834a0914da9ede2c581eafc0743936.diff
LOG: [DAG] visitSHL - move SimplifyDemandedBits after all standard folds to give them a chance to match
Pulled out of D155472
Added:
Modified:
llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
llvm/test/CodeGen/AArch64/ushl_sat.ll
Removed:
################################################################################
diff --git a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
index 542ed37f904ba89..05a19ed989befdd 100644
--- a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
@@ -9857,9 +9857,6 @@ SDValue DAGCombiner::visitSHL(SDNode *N) {
return DAG.getNode(ISD::SHL, SDLoc(N), VT, N0, NewOp1);
}
- if (SimplifyDemandedBits(SDValue(N, 0)))
- return SDValue(N, 0);
-
// fold (shl (shl x, c1), c2) -> 0 or (shl x, (add c1, c2))
if (N0.getOpcode() == ISD::SHL) {
auto MatchOutOfRange = [OpSizeInBits](ConstantSDNode *LHS,
@@ -10077,6 +10074,9 @@ SDValue DAGCombiner::visitSHL(SDNode *N) {
if (SDValue NewSHL = visitShiftByConstant(N))
return NewSHL;
+ if (SimplifyDemandedBits(SDValue(N, 0)))
+ return SDValue(N, 0);
+
// Fold (shl (vscale * C0), C1) to (vscale * (C0 << C1)).
if (N0.getOpcode() == ISD::VSCALE && N1C) {
const APInt &C0 = N0.getConstantOperandAPInt(0);
diff --git a/llvm/test/CodeGen/AArch64/ushl_sat.ll b/llvm/test/CodeGen/AArch64/ushl_sat.ll
index a86803e50261129..870f80545f99933 100644
--- a/llvm/test/CodeGen/AArch64/ushl_sat.ll
+++ b/llvm/test/CodeGen/AArch64/ushl_sat.ll
@@ -128,9 +128,9 @@ define i16 @combine_shlsat_to_shl(i16 %x) nounwind {
define i16 @combine_shlsat_to_shl_no_fold(i16 %x) nounwind {
; CHECK-LABEL: combine_shlsat_to_shl_no_fold:
; CHECK: // %bb.0:
-; CHECK-NEXT: and w8, w0, #0xfffc
-; CHECK-NEXT: lsl w9, w8, #17
-; CHECK-NEXT: lsl w8, w8, #14
+; CHECK-NEXT: lsl w8, w0, #14
+; CHECK-NEXT: and w8, w8, #0x3fff0000
+; CHECK-NEXT: lsl w9, w8, #3
; CHECK-NEXT: cmp w8, w9, lsr #3
; CHECK-NEXT: csinv w8, w9, wzr, eq
; CHECK-NEXT: lsr w0, w8, #16
More information about the llvm-commits
mailing list