[llvm] [X86] Try to shrink signed i64 compares if the input has enough one bits (PR #149719)
Simon Pilgrim via llvm-commits
llvm-commits at lists.llvm.org
Sun Jul 20 09:40:08 PDT 2025
================
@@ -23489,6 +23488,23 @@ static SDValue EmitCmp(SDValue Op0, SDValue Op1, X86::CondCode X86CC,
Op1 = DAG.getNode(ISD::TRUNCATE, dl, CmpVT, Op1);
}
+ // Try to shrink signed i64 compares if the input has enough one bits.
+ // Or the input is sign extended from a 32-bit value.
+ // TODO: Should we peek through freeze?
+ // TODO: Is SIGN_EXTEND_INREG needed here?
+ if (CmpVT == MVT::i64 && isX86CCSigned(X86CC) &&
+ Op0.hasOneUse() && // Hacky way to not break CSE opportunities with sub.
+ (DAG.MaskedValueIsAllOnes(Op1, APInt::getHighBitsSet(64, 32)) ||
+ Op1.getOpcode() == ISD::SIGN_EXTEND ||
+ Op1.getOpcode() == ISD::SIGN_EXTEND_INREG) &&
+ (DAG.MaskedValueIsAllOnes(Op0, APInt::getHighBitsSet(64, 32)) ||
+ Op0.getOpcode() == ISD::SIGN_EXTEND ||
+ Op0.getOpcode() == ISD::SIGN_EXTEND_INREG)) {
----------------
RKSimon wrote:
We need to use ComputeNumSignBits > 32
https://github.com/llvm/llvm-project/pull/149719
More information about the llvm-commits
mailing list