Skip to content

Commit 0ffff6d

Browse files
committed
Use SmallVector to handle both trampoline sequence
1 parent 55b3510 commit 0ffff6d

File tree

1 file changed

+7
-19
lines changed

1 file changed

+7
-19
lines changed

llvm/lib/Target/RISCV/RISCVISelLowering.cpp

Lines changed: 7 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -8390,12 +8390,7 @@ SDValue RISCVTargetLowering::lowerINIT_TRAMPOLINE(SDValue Op,
83908390
return Encoding;
83918391
};
83928392

8393-
SDValue OutChains[6];
8394-
SDValue OutChainsLPAD[7];
8395-
if (HasCFBranch)
8396-
assert(std::size(OutChainsLPAD) == StaticChainIdx + 2);
8397-
else
8398-
assert(std::size(OutChains) == StaticChainIdx + 2);
8393+
SmallVector<SDValue> OutChains;
83998394

84008395
SmallVector<uint32_t> Encodings;
84018396
if (!HasCFBranch) {
@@ -8451,16 +8446,14 @@ SDValue RISCVTargetLowering::lowerINIT_TRAMPOLINE(SDValue Op,
84518446
.addImm(0))});
84528447
}
84538448

8454-
SDValue *OutChainsUsed = HasCFBranch ? OutChainsLPAD : OutChains;
8455-
84568449
// Store encoded instructions.
84578450
for (auto [Idx, Encoding] : llvm::enumerate(Encodings)) {
84588451
SDValue Addr = Idx > 0 ? DAG.getNode(ISD::ADD, dl, MVT::i64, Trmp,
84598452
DAG.getConstant(Idx * 4, dl, MVT::i64))
84608453
: Trmp;
8461-
OutChainsUsed[Idx] = DAG.getTruncStore(
8454+
OutChains.push_back(DAG.getTruncStore(
84628455
Root, dl, DAG.getConstant(Encoding, dl, MVT::i64), Addr,
8463-
MachinePointerInfo(TrmpAddr, Idx * 4), MVT::i32);
8456+
MachinePointerInfo(TrmpAddr, Idx * 4), MVT::i32));
84648457
}
84658458

84668459
// Now store the variable part of the trampoline.
@@ -8476,21 +8469,16 @@ SDValue RISCVTargetLowering::lowerINIT_TRAMPOLINE(SDValue Op,
84768469
{StaticChainOffset, StaticChain},
84778470
{FunctionAddressOffset, FunctionAddress},
84788471
};
8479-
for (auto [Idx, OffsetValue] : llvm::enumerate(OffsetValues)) {
8472+
for (auto &OffsetValue : OffsetValues) {
84808473
SDValue Addr =
84818474
DAG.getNode(ISD::ADD, dl, MVT::i64, Trmp,
84828475
DAG.getConstant(OffsetValue.Offset, dl, MVT::i64));
84838476
OffsetValue.Addr = Addr;
8484-
OutChainsUsed[Idx + StaticChainIdx] =
8485-
DAG.getStore(Root, dl, OffsetValue.Value, Addr,
8486-
MachinePointerInfo(TrmpAddr, OffsetValue.Offset));
8477+
OutChains.push_back(DAG.getStore(Root, dl, OffsetValue.Value, Addr,
8478+
MachinePointerInfo(TrmpAddr, OffsetValue.Offset)));
84878479
}
84888480

8489-
SDValue StoreToken;
8490-
if (HasCFBranch)
8491-
StoreToken = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, OutChainsLPAD);
8492-
else
8493-
StoreToken = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, OutChains);
8481+
SDValue StoreToken = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, OutChains);
84948482

84958483
// The end of instructions of trampoline is the same as the static chain
84968484
// address that we computed earlier.

0 commit comments

Comments
 (0)