[llvm] [X86] Attempt to fold trunc(srl(load(p), amt) -> load(p+amt/8) (PR #165266)
Phoebe Wang via llvm-commits
llvm-commits at lists.llvm.org
Mon Oct 27 20:04:43 PDT 2025
================
@@ -54652,6 +54653,39 @@ static SDValue combineTruncate(SDNode *N, SelectionDAG &DAG,
if (SDValue V = combinePMULH(Src, VT, DL, DAG, Subtarget))
return V;
+ // Fold trunc(srl(load(p),amt) -> load(p+amt/8)
+ // If we're shifting down whole byte+pow2 aligned bit chunks from a larger
+ // load for truncation, see if we can convert the shift into a pointer
+ // offset instead. Limit this to normal (non-ext) scalar integer loads.
+ if (SrcVT.isScalarInteger() && Src.getOpcode() == ISD::SRL &&
+ Src.hasOneUse() && Src.getOperand(0).hasOneUse() &&
+ ISD::isNormalLoad(Src.getOperand(0).getNode())) {
+ auto *Ld = cast<LoadSDNode>(Src.getOperand(0));
+ if (Ld->isSimple() && VT.isByteSized() &&
+ isPowerOf2_64(VT.getSizeInBits())) {
+ SDValue ShAmt = Src.getOperand(1);
----------------
phoebewang wrote:
Should we check `ShAmt` is octuple?
https://github.com/llvm/llvm-project/pull/165266
More information about the llvm-commits
mailing list