[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