Skip to content

Commit 061b54c

Browse files
committed
lambda
1 parent 29e82fe commit 061b54c

File tree

2 files changed

+16
-19
lines changed

2 files changed

+16
-19
lines changed

llvm/lib/Target/NVPTX/NVPTXISelDAGToDAG.cpp

+16-16
Original file line numberDiff line numberDiff line change
@@ -2472,26 +2472,26 @@ bool NVPTXDAGToDAGISel::SelectDirectAddr(SDValue N, SDValue &Address) {
24722472
return false;
24732473
}
24742474

2475-
std::optional<uint64_t>
2476-
NVPTXDAGToDAGISel::FindRootAddressAndTotalOffset(SDValue Addr, SDValue &Base,
2477-
uint64_t AccumulatedOffset) {
2478-
if (Addr.getOpcode() == ISD::ADD) {
2479-
if (ConstantSDNode *CN = dyn_cast<ConstantSDNode>(Addr.getOperand(1))) {
2480-
SDValue base = Addr.getOperand(0);
2481-
AccumulatedOffset += CN->getZExtValue();
2482-
if (SelectDirectAddr(base, Base))
2483-
return AccumulatedOffset;
2484-
return FindRootAddressAndTotalOffset(base, Base, AccumulatedOffset);
2485-
}
2486-
}
2487-
return std::nullopt;
2488-
}
2489-
24902475
// symbol+offset
24912476
bool NVPTXDAGToDAGISel::SelectADDRsi_imp(SDNode *OpNode, SDValue Addr,
24922477
SDValue &Base, SDValue &Offset,
24932478
MVT mvt) {
2494-
if (auto AccumulatedOffset = FindRootAddressAndTotalOffset(Addr, Base, 0)) {
2479+
std::function<std::optional<uint64_t>(SDValue, uint64_t)>
2480+
FindRootAddressAndTotalOffset =
2481+
[&](SDValue Addr,
2482+
uint64_t AccumulatedOffset) -> std::optional<uint64_t> {
2483+
if (Addr.getOpcode() == ISD::ADD) {
2484+
if (ConstantSDNode *CN = dyn_cast<ConstantSDNode>(Addr.getOperand(1))) {
2485+
SDValue base = Addr.getOperand(0);
2486+
AccumulatedOffset += CN->getZExtValue();
2487+
if (SelectDirectAddr(base, Base))
2488+
return AccumulatedOffset;
2489+
return FindRootAddressAndTotalOffset(base, AccumulatedOffset);
2490+
}
2491+
}
2492+
return std::nullopt;
2493+
};
2494+
if (auto AccumulatedOffset = FindRootAddressAndTotalOffset(Addr, 0)) {
24952495
Offset = CurDAG->getTargetConstant(*AccumulatedOffset, SDLoc(OpNode), mvt);
24962496
return true;
24972497
}

llvm/lib/Target/NVPTX/NVPTXISelDAGToDAG.h

-3
Original file line numberDiff line numberDiff line change
@@ -95,9 +95,6 @@ class LLVM_LIBRARY_VISIBILITY NVPTXDAGToDAGISel : public SelectionDAGISel {
9595
void SelectCpAsyncBulkTensorPrefetchCommon(SDNode *N, bool IsIm2Col = false);
9696
void SelectCpAsyncBulkTensorReduceCommon(SDNode *N, unsigned RedOp,
9797
bool IsIm2Col = false);
98-
std::optional<uint64_t>
99-
FindRootAddressAndTotalOffset(SDValue Addr, SDValue &Base,
100-
uint64_t AccumulatedOffset);
10198

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

0 commit comments

Comments
 (0)