[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