aboutsummaryrefslogtreecommitdiff
path: root/bolt/lib/Rewrite/BinaryPassManager.cpp
diff options
context:
space:
mode:
authorMaksim Panchenko <maks@fb.com>2021-12-01 13:57:50 -0800
committerMaksim Panchenko <maks@fb.com>2021-12-01 13:57:50 -0800
commitcbf530bf417ef8ea119cd3acebefc9cbbab98a0b (patch)
treeabad4f69e8134c78d4b98c4c6830c71c14a16984 /bolt/lib/Rewrite/BinaryPassManager.cpp
parentfd71cc51639f28c51c9af709855139d42e250e30 (diff)
downloadllvm-cbf530bf417ef8ea119cd3acebefc9cbbab98a0b.zip
llvm-cbf530bf417ef8ea119cd3acebefc9cbbab98a0b.tar.gz
llvm-cbf530bf417ef8ea119cd3acebefc9cbbab98a0b.tar.bz2
[BOLT] Add pass to normalize CFG
Summary: Some optimizations may remove all instructions in a basic block. The pass will cleanup the CFG afterwards by removing empty basic blocks and merging duplicate CFG edges. The normalized CFG is printed under '-print-normalized' option. (cherry picked from FBD32774360)
Diffstat (limited to 'bolt/lib/Rewrite/BinaryPassManager.cpp')
-rw-r--r--bolt/lib/Rewrite/BinaryPassManager.cpp9
1 files changed, 9 insertions, 0 deletions
diff --git a/bolt/lib/Rewrite/BinaryPassManager.cpp b/bolt/lib/Rewrite/BinaryPassManager.cpp
index ab8a8d2..8a5d70d 100644
--- a/bolt/lib/Rewrite/BinaryPassManager.cpp
+++ b/bolt/lib/Rewrite/BinaryPassManager.cpp
@@ -148,6 +148,13 @@ PrintICP("print-icp",
cl::cat(BoltOptCategory));
static cl::opt<bool>
+PrintNormalized("print-normalized",
+ cl::desc("print functions after CFG is normalized"),
+ cl::ZeroOrMore,
+ cl::Hidden,
+ cl::cat(BoltCategory));
+
+static cl::opt<bool>
PrintRegReAssign("print-regreassign",
cl::desc("print functions after regreassign pass"),
cl::ZeroOrMore,
@@ -409,6 +416,8 @@ void BinaryFunctionPassManager::runAllPasses(BinaryContext &BC) {
Manager.registerPass(std::make_unique<ValidateInternalCalls>(NeverPrint));
+ Manager.registerPass(std::make_unique<NormalizeCFG>(PrintNormalized));
+
Manager.registerPass(std::make_unique<StripRepRet>(NeverPrint),
opts::StripRepRet);