@@ -13804,17 +13804,15 @@ static SDValue performCONCAT_VECTORSCombine(SDNode *N, SelectionDAG &DAG,
1380413804 Align = std::min(Align, Ld->getAlign());
1380513805 }
1380613806
13807- using PtrDiff = std::pair<SDValue, bool>;
13808- auto GetPtrDiff = [&DAG, &DL ](LoadSDNode *Ld1,
13809- LoadSDNode *Ld2) -> std::optional<PtrDiff> {
13807+ using PtrDiff = std::pair<std::variant<int64_t, SDValue> , bool>;
13808+ auto GetPtrDiff = [&DAG](LoadSDNode *Ld1,
13809+ LoadSDNode *Ld2) -> std::optional<PtrDiff> {
1381013810 // If the load ptrs can be decomposed into a common (Base + Index) with a
1381113811 // common constant stride, then return the constant stride.
1381213812 BaseIndexOffset BIO1 = BaseIndexOffset::match(Ld1, DAG);
1381313813 BaseIndexOffset BIO2 = BaseIndexOffset::match(Ld2, DAG);
1381413814 if (BIO1.equalBaseIndex(BIO2, DAG))
13815- return {{DAG.getConstant(BIO2.getOffset() - BIO1.getOffset(), DL,
13816- Ld1->getOffset().getValueType()),
13817- false}};
13815+ return {{BIO2.getOffset() - BIO1.getOffset(), false}};
1381813816
1381913817 // Otherwise try to match (add LastPtr, Stride) or (add NextPtr, Stride)
1382013818 SDValue P1 = Ld1->getBasePtr();
@@ -13855,7 +13853,11 @@ static SDValue performCONCAT_VECTORSCombine(SDNode *N, SelectionDAG &DAG,
1385513853 if (!TLI.isLegalStridedLoadStore(WideVecVT, Align))
1385613854 return SDValue();
1385713855
13858- auto [Stride, MustNegateStride] = *BaseDiff;
13856+ auto [StrideVariant, MustNegateStride] = *BaseDiff;
13857+ SDValue Stride = std::holds_alternative<SDValue>(StrideVariant)
13858+ ? std::get<SDValue>(StrideVariant)
13859+ : DAG.getConstant(std::get<int64_t>(StrideVariant), DL,
13860+ Lds[0]->getOffset().getValueType());
1385913861 if (MustNegateStride)
1386013862 Stride = DAG.getNegative(Stride, DL, Stride.getValueType());
1386113863
0 commit comments