@@ -13804,17 +13804,15 @@ static SDValue performCONCAT_VECTORSCombine(SDNode *N, SelectionDAG &DAG,
13804
13804
Align = std::min(Align, Ld->getAlign());
13805
13805
}
13806
13806
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> {
13810
13810
// If the load ptrs can be decomposed into a common (Base + Index) with a
13811
13811
// common constant stride, then return the constant stride.
13812
13812
BaseIndexOffset BIO1 = BaseIndexOffset::match(Ld1, DAG);
13813
13813
BaseIndexOffset BIO2 = BaseIndexOffset::match(Ld2, DAG);
13814
13814
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}};
13818
13816
13819
13817
// Otherwise try to match (add LastPtr, Stride) or (add NextPtr, Stride)
13820
13818
SDValue P1 = Ld1->getBasePtr();
@@ -13855,7 +13853,11 @@ static SDValue performCONCAT_VECTORSCombine(SDNode *N, SelectionDAG &DAG,
13855
13853
if (!TLI.isLegalStridedLoadStore(WideVecVT, Align))
13856
13854
return SDValue();
13857
13855
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());
13859
13861
if (MustNegateStride)
13860
13862
Stride = DAG.getNegative(Stride, DL, Stride.getValueType());
13861
13863
0 commit comments