[PATCH] D151029: [DAG] Combine insert(shuffle(load), load, 0) into a single load

Simon Pilgrim via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Sat May 20 09:53:02 PDT 2023


RKSimon added inline comments.


================
Comment at: llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp:20944
+
+  if (Scalar.getOpcode() != ISD::LOAD)
+    return SDValue();
----------------
```
auto *ScalarLoad = dyn_cast<LoadSDNode>(Scalar);
if (!ScalarLoad)
  return SDValue();
```


================
Comment at: llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp:20955
+      Vec.getValueType().getScalarType() != Scalar.getValueType())
+    return SDValue();
+
----------------
```
auto *VecLoad = dyn_cast<LoadSDNode>(Vec);
if (!VecLoad ||
      Vec.getValueType().getScalarType() != Scalar.getValueType())
    return SDValue();
```


================
Comment at: llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp:20973
+  int64_t Offset = 0;
+  if (EltSize % 8 != 0 || EltSize == 0 ||
+      !VecOffset.equalBaseIndex(ScalarOffset, DAG, Offset) ||
----------------
You might be able to use DAG.areNonVolatileConsecutiveLoads for some/all of these checks?


================
Comment at: llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp:20993
+  SDValue Ptr = ScalarLoad->getBasePtr();
+  if (InsIndex != 0)
+    Ptr = DAG.getNode(ISD::ADD, DL, Ptr.getValueType(), VecLoad->getBasePtr(),
----------------
Is all this correct for big-endian?


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D151029/new/

https://reviews.llvm.org/D151029



More information about the llvm-commits mailing list