Skip to content

Commit 60d5c35

Browse files
Defer construction of constant SDNode
1 parent 23687a3 commit 60d5c35

File tree

1 file changed

+9
-7
lines changed

1 file changed

+9
-7
lines changed

llvm/lib/Target/RISCV/RISCVISelLowering.cpp

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)