[llvm] r348427 - [MachineOutliner][NFC] Candidates don't need to be shared_ptrs anymore
Jessica Paquette via llvm-commits
llvm-commits at lists.llvm.org
Wed Dec 5 15:24:22 PST 2018
Author: paquette
Date: Wed Dec 5 15:24:22 2018
New Revision: 348427
URL: http://llvm.org/viewvc/llvm-project?rev=348427&view=rev
Log:
[MachineOutliner][NFC] Candidates don't need to be shared_ptrs anymore
More refactoring.
After the changes to the pruning logic, and removing CandidateList, there's
no reason for Candiates to be shared_ptrs (or pointers at all).
std::shared_ptr<Candidate> -> Candidate.
Modified:
llvm/trunk/include/llvm/CodeGen/MachineOutliner.h
llvm/trunk/lib/CodeGen/MachineOutliner.cpp
Modified: llvm/trunk/include/llvm/CodeGen/MachineOutliner.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/MachineOutliner.h?rev=348427&r1=348426&r2=348427&view=diff
==============================================================================
--- llvm/trunk/include/llvm/CodeGen/MachineOutliner.h (original)
+++ llvm/trunk/include/llvm/CodeGen/MachineOutliner.h Wed Dec 5 15:24:22 2018
@@ -164,7 +164,7 @@ public:
struct OutlinedFunction {
public:
- std::vector<std::shared_ptr<Candidate>> Candidates;
+ std::vector<Candidate> Candidates;
/// The actual outlined function created.
/// This is initialized after we go through and create the actual function.
@@ -187,8 +187,8 @@ public:
/// function.
unsigned getOutliningCost() const {
unsigned CallOverhead = 0;
- for (const std::shared_ptr<Candidate> &C : Candidates)
- CallOverhead += C->getCallOverhead();
+ for (const Candidate &C : Candidates)
+ CallOverhead += C.getCallOverhead();
return CallOverhead + SequenceSize + FrameOverhead;
}
@@ -207,19 +207,15 @@ public:
}
/// Return the number of instructions in this sequence.
- unsigned getNumInstrs() const { return Candidates[0]->getLength(); }
-
- OutlinedFunction(std::vector<Candidate> &Cands,
- unsigned SequenceSize, unsigned FrameOverhead,
- unsigned FrameConstructionID)
- : SequenceSize(SequenceSize), FrameOverhead(FrameOverhead),
- FrameConstructionID(FrameConstructionID) {
- for (Candidate &C : Cands)
- Candidates.push_back(std::make_shared<outliner::Candidate>(C));
+ unsigned getNumInstrs() const { return Candidates[0].getLength(); }
+ OutlinedFunction(std::vector<Candidate> &Candidates, unsigned SequenceSize,
+ unsigned FrameOverhead, unsigned FrameConstructionID)
+ : Candidates(Candidates), SequenceSize(SequenceSize),
+ FrameOverhead(FrameOverhead), FrameConstructionID(FrameConstructionID) {
const unsigned B = getBenefit();
- for (std::shared_ptr<Candidate> &C : Candidates)
- C->Benefit = B;
+ for (Candidate &C : Candidates)
+ C.Benefit = B;
}
OutlinedFunction() {}
Modified: llvm/trunk/lib/CodeGen/MachineOutliner.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachineOutliner.cpp?rev=348427&r1=348426&r2=348427&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/MachineOutliner.cpp (original)
+++ llvm/trunk/lib/CodeGen/MachineOutliner.cpp Wed Dec 5 15:24:22 2018
@@ -904,7 +904,7 @@ struct MachineOutliner : public ModulePa
InstructionMapper &Mapper);
/// Creates a function for \p OF and inserts it into the module.
- MachineFunction *createOutlinedFunction(Module &M, const OutlinedFunction &OF,
+ MachineFunction *createOutlinedFunction(Module &M, OutlinedFunction &OF,
InstructionMapper &Mapper,
unsigned Name);
@@ -931,8 +931,8 @@ struct MachineOutliner : public ModulePa
/// function for remark emission.
DISubprogram *getSubprogramOrNull(const OutlinedFunction &OF) {
DISubprogram *SP;
- for (const std::shared_ptr<Candidate> &C : OF.Candidates)
- if (C && C->getMF() && (SP = C->getMF()->getFunction().getSubprogram()))
+ for (const Candidate &C : OF.Candidates)
+ if (C.getMF() && (SP = C.getMF()->getFunction().getSubprogram()))
return SP;
return nullptr;
}
@@ -1021,7 +1021,7 @@ void MachineOutliner::emitOutlinedFuncti
for (size_t i = 0, e = OF.Candidates.size(); i < e; i++) {
R << NV((Twine("StartLoc") + Twine(i)).str(),
- OF.Candidates[i]->front()->getDebugLoc());
+ OF.Candidates[i].front()->getDebugLoc());
if (i != e - 1)
R << ", ";
}
@@ -1134,7 +1134,7 @@ unsigned MachineOutliner::buildCandidate
}
MachineFunction *
-MachineOutliner::createOutlinedFunction(Module &M, const OutlinedFunction &OF,
+MachineOutliner::createOutlinedFunction(Module &M, OutlinedFunction &OF,
InstructionMapper &Mapper,
unsigned Name) {
@@ -1169,7 +1169,7 @@ MachineOutliner::createOutlinedFunction(
// function. This makes sure the outlined function knows what kinds of
// instructions are going into it. This is fine, since all parent functions
// must necessarily support the instructions that are in the outlined region.
- Candidate &FirstCand = *OF.Candidates.front();
+ Candidate &FirstCand = OF.Candidates.front();
const Function &ParentFn = FirstCand.getMF()->getFunction();
if (ParentFn.hasFnAttribute("target-features"))
F->addFnAttr(ParentFn.getFnAttribute("target-features"));
@@ -1259,10 +1259,10 @@ bool MachineOutliner::outline(Module &M,
for (OutlinedFunction &OF : FunctionList) {
// If we outlined something that overlapped with a candidate in a previous
// step, then we can't outline from it.
- erase_if(OF.Candidates, [&Mapper](std::shared_ptr<Candidate> &C) {
+ erase_if(OF.Candidates, [&Mapper](Candidate &C) {
return std::any_of(
- Mapper.UnsignedVec.begin() + C->getStartIdx(),
- Mapper.UnsignedVec.begin() + C->getEndIdx() + 1,
+ Mapper.UnsignedVec.begin() + C.getStartIdx(),
+ Mapper.UnsignedVec.begin() + C.getEndIdx() + 1,
[](unsigned I) { return (I == static_cast<unsigned>(-1)); });
});
@@ -1281,8 +1281,7 @@ bool MachineOutliner::outline(Module &M,
const TargetInstrInfo &TII = *STI.getInstrInfo();
// Replace occurrences of the sequence with calls to the new function.
- for (std::shared_ptr<Candidate> &Cptr : OF.Candidates) {
- Candidate &C = *Cptr;
+ for (Candidate &C : OF.Candidates) {
MachineBasicBlock &MBB = *C.getMBB();
MachineBasicBlock::iterator StartIt = C.front();
MachineBasicBlock::iterator EndIt = C.back();
More information about the llvm-commits
mailing list