@@ -385,17 +385,6 @@ namespace {
385
385
bool getTruncatedStoreValue(StoreSDNode *ST, SDValue &Val);
386
386
bool extendLoadedValueToExtension(LoadSDNode *LD, SDValue &Val);
387
387
388
- /// Replace an ISD::EXTRACT_VECTOR_ELT of a load with a narrowed
389
- /// load.
390
- ///
391
- /// \param EVE ISD::EXTRACT_VECTOR_ELT to be replaced.
392
- /// \param InVecVT type of the input vector to EVE with bitcasts resolved.
393
- /// \param EltNo index of the vector element to load.
394
- /// \param OriginalLoad load that EVE came from to be replaced.
395
- /// \returns EVE on success SDValue() on failure.
396
- SDValue scalarizeExtractedVectorLoad(SDNode *EVE, EVT InVecVT,
397
- SDValue EltNo,
398
- LoadSDNode *OriginalLoad);
399
388
void ReplaceLoadWithPromotedLoad(SDNode *Load, SDNode *ExtLoad);
400
389
SDValue PromoteOperand(SDValue Op, EVT PVT, bool &Replace);
401
390
SDValue SExtPromoteOperand(SDValue Op, EVT PVT);
@@ -22719,81 +22708,6 @@ SDValue DAGCombiner::visitINSERT_VECTOR_ELT(SDNode *N) {
22719
22708
return SDValue();
22720
22709
}
22721
22710
22722
- SDValue DAGCombiner::scalarizeExtractedVectorLoad(SDNode *EVE, EVT InVecVT,
22723
- SDValue EltNo,
22724
- LoadSDNode *OriginalLoad) {
22725
- assert(OriginalLoad->isSimple());
22726
-
22727
- EVT ResultVT = EVE->getValueType(0);
22728
- EVT VecEltVT = InVecVT.getVectorElementType();
22729
-
22730
- // If the vector element type is not a multiple of a byte then we are unable
22731
- // to correctly compute an address to load only the extracted element as a
22732
- // scalar.
22733
- if (!VecEltVT.isByteSized())
22734
- return SDValue();
22735
-
22736
- ISD::LoadExtType ExtTy =
22737
- ResultVT.bitsGT(VecEltVT) ? ISD::EXTLOAD : ISD::NON_EXTLOAD;
22738
- if (!TLI.isOperationLegalOrCustom(ISD::LOAD, VecEltVT) ||
22739
- !TLI.shouldReduceLoadWidth(OriginalLoad, ExtTy, VecEltVT))
22740
- return SDValue();
22741
-
22742
- Align Alignment = OriginalLoad->getAlign();
22743
- MachinePointerInfo MPI;
22744
- SDLoc DL(EVE);
22745
- if (auto *ConstEltNo = dyn_cast<ConstantSDNode>(EltNo)) {
22746
- int Elt = ConstEltNo->getZExtValue();
22747
- unsigned PtrOff = VecEltVT.getSizeInBits() * Elt / 8;
22748
- MPI = OriginalLoad->getPointerInfo().getWithOffset(PtrOff);
22749
- Alignment = commonAlignment(Alignment, PtrOff);
22750
- } else {
22751
- // Discard the pointer info except the address space because the memory
22752
- // operand can't represent this new access since the offset is variable.
22753
- MPI = MachinePointerInfo(OriginalLoad->getPointerInfo().getAddrSpace());
22754
- Alignment = commonAlignment(Alignment, VecEltVT.getSizeInBits() / 8);
22755
- }
22756
-
22757
- unsigned IsFast = 0;
22758
- if (!TLI.allowsMemoryAccess(*DAG.getContext(), DAG.getDataLayout(), VecEltVT,
22759
- OriginalLoad->getAddressSpace(), Alignment,
22760
- OriginalLoad->getMemOperand()->getFlags(),
22761
- &IsFast) ||
22762
- !IsFast)
22763
- return SDValue();
22764
-
22765
- SDValue NewPtr = TLI.getVectorElementPointer(DAG, OriginalLoad->getBasePtr(),
22766
- InVecVT, EltNo);
22767
-
22768
- // We are replacing a vector load with a scalar load. The new load must have
22769
- // identical memory op ordering to the original.
22770
- SDValue Load;
22771
- if (ResultVT.bitsGT(VecEltVT)) {
22772
- // If the result type of vextract is wider than the load, then issue an
22773
- // extending load instead.
22774
- ISD::LoadExtType ExtType =
22775
- TLI.isLoadExtLegal(ISD::ZEXTLOAD, ResultVT, VecEltVT) ? ISD::ZEXTLOAD
22776
- : ISD::EXTLOAD;
22777
- Load = DAG.getExtLoad(ExtType, DL, ResultVT, OriginalLoad->getChain(),
22778
- NewPtr, MPI, VecEltVT, Alignment,
22779
- OriginalLoad->getMemOperand()->getFlags(),
22780
- OriginalLoad->getAAInfo());
22781
- DAG.makeEquivalentMemoryOrdering(OriginalLoad, Load);
22782
- } else {
22783
- // The result type is narrower or the same width as the vector element
22784
- Load = DAG.getLoad(VecEltVT, DL, OriginalLoad->getChain(), NewPtr, MPI,
22785
- Alignment, OriginalLoad->getMemOperand()->getFlags(),
22786
- OriginalLoad->getAAInfo());
22787
- DAG.makeEquivalentMemoryOrdering(OriginalLoad, Load);
22788
- if (ResultVT.bitsLT(VecEltVT))
22789
- Load = DAG.getNode(ISD::TRUNCATE, DL, ResultVT, Load);
22790
- else
22791
- Load = DAG.getBitcast(ResultVT, Load);
22792
- }
22793
- ++OpsNarrowed;
22794
- return Load;
22795
- }
22796
-
22797
22711
/// Transform a vector binary operation into a scalar binary operation by moving
22798
22712
/// the math/logic after an extract element of a vector.
22799
22713
static SDValue scalarizeExtractedBinOp(SDNode *ExtElt, SelectionDAG &DAG,
@@ -23366,7 +23280,7 @@ SDValue DAGCombiner::visitEXTRACT_VECTOR_ELT(SDNode *N) {
23366
23280
if (Elt == -1)
23367
23281
return DAG.getUNDEF(LVT);
23368
23282
23369
- return scalarizeExtractedVectorLoad(N, VecVT, Index, LN0);
23283
+ return TLI. scalarizeExtractedVectorLoad(LVT, DL, VecVT, Index, LN0, DAG );
23370
23284
}
23371
23285
23372
23286
// Simplify (build_vec (ext )) to (bitcast (build_vec ))
0 commit comments