Skip to content

Commit f51ff71

Browse files
committed
lambda
1 parent b80ad03 commit f51ff71

File tree

2 files changed

+16
-19
lines changed

2 files changed

+16
-19
lines changed

llvm/lib/Target/NVPTX/NVPTXISelDAGToDAG.cpp

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2478,26 +2478,26 @@ bool NVPTXDAGToDAGISel::SelectDirectAddr(SDValue N, SDValue &Address) {
24782478
return false;
24792479
}
24802480

2481-
std::optional<uint64_t>
2482-
NVPTXDAGToDAGISel::FindRootAddressAndTotalOffset(SDValue Addr, SDValue &Base,
2483-
uint64_t AccumulatedOffset) {
2484-
if (isAddLike(Addr)) {
2485-
if (ConstantSDNode *CN = dyn_cast<ConstantSDNode>(Addr.getOperand(1))) {
2486-
SDValue base = Addr.getOperand(0);
2487-
AccumulatedOffset += CN->getZExtValue();
2488-
if (SelectDirectAddr(base, Base))
2489-
return AccumulatedOffset;
2490-
return FindRootAddressAndTotalOffset(base, Base, AccumulatedOffset);
2491-
}
2492-
}
2493-
return std::nullopt;
2494-
}
2495-
24962481
// symbol+offset
24972482
bool NVPTXDAGToDAGISel::SelectADDRsi_imp(SDNode *OpNode, SDValue Addr,
24982483
SDValue &Base, SDValue &Offset,
24992484
MVT mvt) {
2500-
if (auto AccumulatedOffset = FindRootAddressAndTotalOffset(Addr, Base, 0)) {
2485+
std::function<std::optional<uint64_t>(SDValue, uint64_t)>
2486+
FindRootAddressAndTotalOffset =
2487+
[&](SDValue Addr,
2488+
uint64_t AccumulatedOffset) -> std::optional<uint64_t> {
2489+
if (isAddLike(Addr)) {
2490+
if (ConstantSDNode *CN = dyn_cast<ConstantSDNode>(Addr.getOperand(1))) {
2491+
SDValue base = Addr.getOperand(0);
2492+
AccumulatedOffset += CN->getZExtValue();
2493+
if (SelectDirectAddr(base, Base))
2494+
return AccumulatedOffset;
2495+
return FindRootAddressAndTotalOffset(base, AccumulatedOffset);
2496+
}
2497+
}
2498+
return std::nullopt;
2499+
};
2500+
if (auto AccumulatedOffset = FindRootAddressAndTotalOffset(Addr, 0)) {
25012501
Offset = CurDAG->getTargetConstant(*AccumulatedOffset, SDLoc(OpNode), mvt);
25022502
return true;
25032503
}

llvm/lib/Target/NVPTX/NVPTXISelDAGToDAG.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -97,9 +97,6 @@ class LLVM_LIBRARY_VISIBILITY NVPTXDAGToDAGISel : public SelectionDAGISel {
9797
void SelectCpAsyncBulkTensorPrefetchCommon(SDNode *N, bool IsIm2Col = false);
9898
void SelectCpAsyncBulkTensorReduceCommon(SDNode *N, unsigned RedOp,
9999
bool IsIm2Col = false);
100-
std::optional<uint64_t>
101-
FindRootAddressAndTotalOffset(SDValue Addr, SDValue &Base,
102-
uint64_t AccumulatedOffset);
103100

104101
inline SDValue getI32Imm(unsigned Imm, const SDLoc &DL) {
105102
return CurDAG->getTargetConstant(Imm, DL, MVT::i32);

0 commit comments

Comments
 (0)