[llvm] [AArch64] Improve index selection for histograms (PR #111150)
Benjamin Maxwell via llvm-commits
llvm-commits at lists.llvm.org
Fri Oct 4 06:56:13 PDT 2024
================
@@ -24079,12 +24079,42 @@ static bool findMoreOptimalIndexType(const MaskedGatherScatterSDNode *N,
static SDValue performMaskedGatherScatterCombine(
SDNode *N, TargetLowering::DAGCombinerInfo &DCI, SelectionDAG &DAG) {
- MaskedGatherScatterSDNode *MGS = cast<MaskedGatherScatterSDNode>(N);
- assert(MGS && "Can only combine gather load or scatter store nodes");
+ MaskedHistogramSDNode *HG;
+ MaskedGatherScatterSDNode *MGS;
+ if (N->getOpcode() == ISD::EXPERIMENTAL_VECTOR_HISTOGRAM) {
+ HG = cast<MaskedHistogramSDNode>(N);
+ } else {
+ MGS = cast<MaskedGatherScatterSDNode>(N);
+ }
+ assert((HG || MGS) &&
+ "Can only combine gather load, scatter store or histogram nodes");
if (!DCI.isBeforeLegalize())
return SDValue();
+ if (N->getOpcode() == ISD::EXPERIMENTAL_VECTOR_HISTOGRAM) {
+ SDLoc DL(HG);
+ SDValue Index = HG->getIndex();
+ if (ISD::isExtOpcode(Index->getOpcode())) {
+ SDValue Chain = HG->getChain();
+ SDValue Inc = HG->getInc();
+ SDValue Mask = HG->getMask();
+ SDValue BasePtr = HG->getBasePtr();
+ SDValue Scale = HG->getScale();
+ SDValue IntID = HG->getIntID();
+ EVT MemVT = HG->getMemoryVT();
+ MachineMemOperand *MMO = HG->getMemOperand();
+ ISD::MemIndexType IndexType = HG->getIndexType();
+ SDValue ExtOp = Index.getOperand(0);
+ auto SrcType = ExtOp.getValueType();
+ auto TruncatedIndex = DAG.getAnyExtOrTrunc(Index, DL, SrcType);
----------------
MacDue wrote:
I may be wrong, but can't you just use `ExtOp` (i.e. the source of the extend) directly as the truncated index?
https://github.com/llvm/llvm-project/pull/111150
More information about the llvm-commits
mailing list