aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/CodeGen/MachineOutliner.cpp
diff options
context:
space:
mode:
authorJessica Paquette <jpaquette@apple.com>2022-02-17 18:12:39 -0800
committerJessica Paquette <jpaquette@apple.com>2022-02-17 18:25:51 -0800
commit12389e375811d46ce41d949857f8b469d6563114 (patch)
treebf01c248b025d993d7f7cf44d295b0416968922d /llvm/lib/CodeGen/MachineOutliner.cpp
parentc046cff1cf11d63aa0f5483b758464f989fbc029 (diff)
downloadllvm-12389e375811d46ce41d949857f8b469d6563114.zip
llvm-12389e375811d46ce41d949857f8b469d6563114.tar.gz
llvm-12389e375811d46ce41d949857f8b469d6563114.tar.bz2
[MachineOutliner] Add statistics for unsigned vector size
Useful for debugging + evaluating improvements to the outliner. Stats are the number of illegal, legal, and invisible instructions in the unsigned vector, and it's total length.
Diffstat (limited to 'llvm/lib/CodeGen/MachineOutliner.cpp')
-rw-r--r--llvm/lib/CodeGen/MachineOutliner.cpp16
1 files changed, 16 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/MachineOutliner.cpp b/llvm/lib/CodeGen/MachineOutliner.cpp
index d7d0982..7ce655d 100644
--- a/llvm/lib/CodeGen/MachineOutliner.cpp
+++ b/llvm/lib/CodeGen/MachineOutliner.cpp
@@ -82,9 +82,17 @@ using namespace llvm;
using namespace ore;
using namespace outliner;
+// Statistics for outlined functions.
STATISTIC(NumOutlined, "Number of candidates outlined");
STATISTIC(FunctionsCreated, "Number of functions created");
+// Statistics for instruction mapping.
+STATISTIC(NumLegalInUnsignedVec, "Number of legal instrs in unsigned vector");
+STATISTIC(NumIllegalInUnsignedVec,
+ "Number of illegal instrs in unsigned vector");
+STATISTIC(NumInvisible, "Number of invisible instrs in unsigned vector");
+STATISTIC(UnsignedVecSize, "Size of unsigned vector");
+
// Set to true if the user wants the outliner to run on linkonceodr linkage
// functions. This is false by default because the linker can dedupe linkonceodr
// functions. Since the outliner is confined to a single module (modulo LTO),
@@ -188,6 +196,8 @@ struct InstructionMapper {
assert(LegalInstrNumber != DenseMapInfo<unsigned>::getTombstoneKey() &&
"Tried to assign DenseMap tombstone or empty key to instruction.");
+ // Statistics.
+ ++NumLegalInUnsignedVec;
return MINumber;
}
@@ -215,6 +225,8 @@ struct InstructionMapper {
InstrListForMBB.push_back(It);
UnsignedVecForMBB.push_back(IllegalInstrNumber);
IllegalInstrNumber--;
+ // Statistics.
+ ++NumIllegalInUnsignedVec;
assert(LegalInstrNumber < IllegalInstrNumber &&
"Instruction mapping overflow!");
@@ -293,6 +305,7 @@ struct InstructionMapper {
case InstrType::Invisible:
// Normally this is set by mapTo(Blah)Unsigned, but we just want to
// skip this instruction. So, unset the flag here.
+ ++NumInvisible;
AddedIllegalLastTime = false;
break;
}
@@ -905,6 +918,9 @@ void MachineOutliner::populateMapper(InstructionMapper &Mapper, Module &M,
// MBB is suitable for outlining. Map it to a list of unsigneds.
Mapper.convertToUnsignedVec(MBB, *TII);
}
+
+ // Statistics.
+ UnsignedVecSize = Mapper.UnsignedVec.size();
}
}