[llvm] 00d1966 - [X86] matchIndexRecursively - don't peek through SIGN_EXTEND for vector indices
Simon Pilgrim via llvm-commits
llvm-commits at lists.llvm.org
Fri Aug 25 02:48:26 PDT 2023
Author: Simon Pilgrim
Date: 2023-08-25T10:48:16+01:00
New Revision: 00d19664b2ce82294e621e72041dc4294f53fe7c
URL: https://github.com/llvm/llvm-project/commit/00d19664b2ce82294e621e72041dc4294f53fe7c
DIFF: https://github.com/llvm/llvm-project/commit/00d19664b2ce82294e621e72041dc4294f53fe7c.diff
LOG: [X86] matchIndexRecursively - don't peek through SIGN_EXTEND for vector indices
Don't rely on implicit extension for gather/scatter ops
Added:
Modified:
llvm/lib/Target/X86/X86ISelDAGToDAG.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Target/X86/X86ISelDAGToDAG.cpp b/llvm/lib/Target/X86/X86ISelDAGToDAG.cpp
index aeaa926e72fcbd..fa5530d56512d9 100644
--- a/llvm/lib/Target/X86/X86ISelDAGToDAG.cpp
+++ b/llvm/lib/Target/X86/X86ISelDAGToDAG.cpp
@@ -2225,6 +2225,8 @@ SDValue X86DAGToDAGISel::matchIndexRecursively(SDValue N,
if (Depth >= SelectionDAG::MaxRecursionDepth)
return N;
+ EVT VT = N.getValueType();
+
// index: add(x,c) -> index: x, disp + c
if (CurDAG->isBaseWithConstantOffset(N)) {
auto *AddVal = cast<ConstantSDNode>(N.getOperand(1));
@@ -2253,7 +2255,7 @@ SDValue X86DAGToDAGISel::matchIndexRecursively(SDValue N,
// index: sext(add_nsw(x,c)) -> index: sext(x), disp + sext(c)
// TODO: call matchIndexRecursively(AddSrc) if we won't corrupt sext?
- if (N.getOpcode() == ISD::SIGN_EXTEND) {
+ if (N.getOpcode() == ISD::SIGN_EXTEND && !VT.isVector()) {
SDValue Src = N.getOperand(0);
if (Src.getOpcode() == ISD::ADD && Src->getFlags().hasNoSignedWrap()) {
if (CurDAG->isBaseWithConstantOffset(Src)) {
@@ -2262,7 +2264,6 @@ SDValue X86DAGToDAGISel::matchIndexRecursively(SDValue N,
uint64_t Offset = (uint64_t)AddVal->getSExtValue() * AM.Scale;
if (!foldOffsetIntoAddress(Offset, AM)) {
SDLoc DL(N);
- EVT VT = N.getValueType();
SDValue ExtSrc = CurDAG->getNode(ISD::SIGN_EXTEND, DL, VT, AddSrc);
SDValue ExtVal = CurDAG->getConstant(AddVal->getSExtValue(), DL, VT);
SDValue ExtAdd = CurDAG->getNode(ISD::ADD, DL, VT, ExtSrc, ExtVal);
More information about the llvm-commits
mailing list