[llvm] r346340 - [MachineOutliner] Don't store outlined function numberings on OutlinedFunction
Jessica Paquette via llvm-commits
llvm-commits at lists.llvm.org
Wed Nov 7 10:36:43 PST 2018
Author: paquette
Date: Wed Nov 7 10:36:43 2018
New Revision: 346340
URL: http://llvm.org/viewvc/llvm-project?rev=346340&view=rev
Log:
[MachineOutliner] Don't store outlined function numberings on OutlinedFunction
NFC-ish. This doesn't change the behaviour of the outliner, but does make sure
that you won't end up with say
OUTLINED_FUNCTION_2:
...
ret
OUTLINED_FUNCTION_248:
...
ret
as the only outlined functions in your module. Those should really be
OUTLINED_FUNCTION_0:
...
ret
OUTLINED_FUNCTION_1:
...
ret
If we produce outlined functions, they probably should have sequential numbers
attached to them. This makes it a bit easier+stable to write outliner tests.
The point of this is to move towards a bit more stability in outlined function
names. By doing this, we at least don't rely on the traversal order of the
suffix tree. Instead, we rely on the order of the candidate list, which is
*far* more consistent. The candidate list is ordered by the end indices of
candidates, so we're more likely to get a stable ordering. This is still
susceptible to changes in the cost model though (like, if we suddenly find new
candidates, for example).
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=346340&r1=346339&r2=346340&view=diff
==============================================================================
--- llvm/trunk/include/llvm/CodeGen/MachineOutliner.h (original)
+++ llvm/trunk/include/llvm/CodeGen/MachineOutliner.h Wed Nov 7 10:36:43 2018
@@ -169,9 +169,6 @@ public:
/// This is initialized after we go through and create the actual function.
MachineFunction *MF = nullptr;
- /// A number assigned to this function which appears at the end of its name.
- unsigned Name;
-
/// The sequence of integers corresponding to the instructions in this
/// function.
std::vector<unsigned> Sequence;
Modified: llvm/trunk/lib/CodeGen/MachineOutliner.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachineOutliner.cpp?rev=346340&r1=346339&r2=346340&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/MachineOutliner.cpp (original)
+++ llvm/trunk/lib/CodeGen/MachineOutliner.cpp Wed Nov 7 10:36:43 2018
@@ -801,7 +801,8 @@ struct MachineOutliner : public ModulePa
/// Creates a function for \p OF and inserts it into the module.
MachineFunction *createOutlinedFunction(Module &M, const OutlinedFunction &OF,
- InstructionMapper &Mapper);
+ InstructionMapper &Mapper,
+ unsigned Name);
/// Find potential outlining candidates and store them in \p CandidateList.
///
@@ -1035,7 +1036,6 @@ unsigned MachineOutliner::findCandidates
for (unsigned i = StartIdx; i < StartIdx + StringLen; i++)
Seq.push_back(ST.Str[i]);
OF.Sequence = Seq;
- OF.Name = FunctionList.size();
// Is it better to outline this candidate than not?
if (OF.getBenefit() < 1) {
@@ -1190,13 +1190,16 @@ unsigned MachineOutliner::buildCandidate
MachineFunction *
MachineOutliner::createOutlinedFunction(Module &M, const OutlinedFunction &OF,
- InstructionMapper &Mapper) {
+ InstructionMapper &Mapper,
+ unsigned Name) {
// Create the function name. This should be unique. For now, just hash the
// module name and include it in the function name plus the number of this
// function.
std::ostringstream NameStream;
- NameStream << "OUTLINED_FUNCTION_" << OF.Name;
+ // FIXME: We should have a better naming scheme. This should be stable,
+ // regardless of changes to the outliner's cost model/traversal order.
+ NameStream << "OUTLINED_FUNCTION_" << Name;
// Create the function using an IR-level function.
LLVMContext &C = M.getContext();
@@ -1295,6 +1298,10 @@ bool MachineOutliner::outline(
std::vector<OutlinedFunction> &FunctionList, InstructionMapper &Mapper) {
bool OutlinedSomething = false;
+
+ // Number to append to the current outlined function.
+ unsigned OutlinedFunctionNum = 0;
+
// Replace the candidates with calls to their respective outlined functions.
for (const std::shared_ptr<Candidate> &Cptr : CandidateList) {
Candidate &C = *Cptr;
@@ -1311,9 +1318,10 @@ bool MachineOutliner::outline(
// Does this candidate have a function yet?
if (!OF.MF) {
- OF.MF = createOutlinedFunction(M, OF, Mapper);
+ OF.MF = createOutlinedFunction(M, OF, Mapper, OutlinedFunctionNum);
emitOutlinedFunctionRemark(OF);
FunctionsCreated++;
+ OutlinedFunctionNum++; // Created a function, move to the next name.
}
MachineFunction *MF = OF.MF;
More information about the llvm-commits
mailing list