[llvm] r337838 - [MachineOutliner][NFC] Sink some candidate logic into OutlinedFunction

Jessica Paquette via llvm-commits llvm-commits at lists.llvm.org
Tue Jul 24 10:36:13 PDT 2018


Author: paquette
Date: Tue Jul 24 10:36:13 2018
New Revision: 337838

URL: http://llvm.org/viewvc/llvm-project?rev=337838&view=rev
Log:
[MachineOutliner][NFC] Sink some candidate logic into OutlinedFunction

Just some simple gardening to improve clarity.

Before, we had something along the lines of

1) Create a std::vector of Candidates
2) Create an OutlinedFunction
3) Create a std::vector of pointers to Candidates
4) Copy those over to the OutlinedFunction and the Candidate list

Now, OutlinedFunctions create the Candidate pointers. They're still copied
over to the main list of Candidates, but it makes it a bit clearer what's
going on.

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=337838&r1=337837&r2=337838&view=diff
==============================================================================
--- llvm/trunk/include/llvm/CodeGen/MachineOutliner.h (original)
+++ llvm/trunk/include/llvm/CodeGen/MachineOutliner.h Tue Jul 24 10:36:13 2018
@@ -209,10 +209,19 @@ public:
                                             : NotOutlinedCost - OutlinedCost;
   }
 
-  OutlinedFunction(unsigned Name, unsigned OccurrenceCount,
+  OutlinedFunction(unsigned Name, std::vector<Candidate> &Cands,
                    const std::vector<unsigned> &Sequence, TargetCostInfo &TCI)
-      : OccurrenceCount(OccurrenceCount), Name(Name), Sequence(Sequence),
-        TCI(TCI) {}
+      : Name(Name), Sequence(Sequence), TCI(TCI) {
+    OccurrenceCount = Cands.size();
+    for (Candidate &C : Cands)
+      Candidates.push_back(std::make_shared<outliner::Candidate>(C));
+
+    unsigned B = getBenefit();
+    for (std::shared_ptr<Candidate> &C : Candidates) {
+      C->Benefit = B;
+      C->TCI = TCI;
+    }
+  }
 };
 } // namespace outliner
 } // namespace llvm

Modified: llvm/trunk/lib/CodeGen/MachineOutliner.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachineOutliner.cpp?rev=337838&r1=337837&r2=337838&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/MachineOutliner.cpp (original)
+++ llvm/trunk/lib/CodeGen/MachineOutliner.cpp Tue Jul 24 10:36:13 2018
@@ -916,12 +916,11 @@ unsigned MachineOutliner::findCandidates
     std::vector<unsigned> Seq;
     for (unsigned i = Leaf->SuffixIdx; i < Leaf->SuffixIdx + StringLen; i++)
       Seq.push_back(ST.Str[i]);
-    OutlinedFunction OF(FunctionList.size(), CandidatesForRepeatedSeq.size(),
+    OutlinedFunction OF(FunctionList.size(), CandidatesForRepeatedSeq,
                         Seq, TCI);
-    unsigned Benefit = OF.getBenefit();
 
     // Is it better to outline this candidate than not?
-    if (Benefit < 1) {
+    if (OF.getBenefit() < 1) {
       // Outlining this candidate would take more instructions than not
       // outlining.
       // Emit a remark explaining why we didn't outline this candidate.
@@ -958,19 +957,11 @@ unsigned MachineOutliner::findCandidates
     if (StringLen > MaxLen)
       MaxLen = StringLen;
 
-    // At this point, the candidate class is seen as beneficial. Set their
-    // benefit values and save them in the candidate list.
-    std::vector<std::shared_ptr<Candidate>> CandidatesForFn;
-    for (Candidate &C : CandidatesForRepeatedSeq) {
-      C.Benefit = Benefit;
-      C.TCI = TCI;
-      std::shared_ptr<Candidate> Cptr = std::make_shared<Candidate>(C);
-      CandidateList.push_back(Cptr);
-      CandidatesForFn.push_back(Cptr);
-    }
-
+    // The function is beneficial. Save its candidates to the candidate list
+    // for pruning.
+    for (std::shared_ptr<Candidate> &C : OF.Candidates)
+      CandidateList.push_back(C);
     FunctionList.push_back(OF);
-    FunctionList.back().Candidates = CandidatesForFn;
 
     // Move to the next function.
     Parent.IsInTree = false;




More information about the llvm-commits mailing list