xref: /llvm-project/bolt/lib/Rewrite/MetadataManager.cpp (revision 8ea59ec6077e85c457b27b406a679ab9d5827387)
1c9b1f062SMaksim Panchenko //===- bolt/Rewrite/MetadataManager.cpp -----------------------------------===//
2c9b1f062SMaksim Panchenko //
3c9b1f062SMaksim Panchenko // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4c9b1f062SMaksim Panchenko // See https://llvm.org/LICENSE.txt for license information.
5c9b1f062SMaksim Panchenko // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6c9b1f062SMaksim Panchenko //
7c9b1f062SMaksim Panchenko //===----------------------------------------------------------------------===//
8c9b1f062SMaksim Panchenko 
9c9b1f062SMaksim Panchenko #include "bolt/Rewrite/MetadataManager.h"
10c9b1f062SMaksim Panchenko #include "llvm/Support/Debug.h"
11c9b1f062SMaksim Panchenko 
12c9b1f062SMaksim Panchenko #undef DEBUG_TYPE
13c9b1f062SMaksim Panchenko #define DEBUG_TYPE "bolt-metadata"
14c9b1f062SMaksim Panchenko 
15c9b1f062SMaksim Panchenko using namespace llvm;
16c9b1f062SMaksim Panchenko using namespace bolt;
17c9b1f062SMaksim Panchenko 
registerRewriter(std::unique_ptr<MetadataRewriter> Rewriter)18c9b1f062SMaksim Panchenko void MetadataManager::registerRewriter(
19c9b1f062SMaksim Panchenko     std::unique_ptr<MetadataRewriter> Rewriter) {
20c9b1f062SMaksim Panchenko   Rewriters.emplace_back(std::move(Rewriter));
21c9b1f062SMaksim Panchenko }
22c9b1f062SMaksim Panchenko 
runSectionInitializers()23*8ea59ec6SMaksim Panchenko void MetadataManager::runSectionInitializers() {
24*8ea59ec6SMaksim Panchenko   for (auto &Rewriter : Rewriters) {
25*8ea59ec6SMaksim Panchenko     LLVM_DEBUG(dbgs() << "BOLT-DEBUG: invoking " << Rewriter->getName()
26*8ea59ec6SMaksim Panchenko                       << " after reading sections\n");
27*8ea59ec6SMaksim Panchenko     if (Error E = Rewriter->sectionInitializer()) {
28*8ea59ec6SMaksim Panchenko       errs() << "BOLT-ERROR: while running " << Rewriter->getName()
29*8ea59ec6SMaksim Panchenko              << " after reading sections: " << toString(std::move(E)) << '\n';
30*8ea59ec6SMaksim Panchenko       exit(1);
31*8ea59ec6SMaksim Panchenko     }
32*8ea59ec6SMaksim Panchenko   }
33*8ea59ec6SMaksim Panchenko }
34*8ea59ec6SMaksim Panchenko 
runInitializersPreCFG()35c9b1f062SMaksim Panchenko void MetadataManager::runInitializersPreCFG() {
36c9b1f062SMaksim Panchenko   for (auto &Rewriter : Rewriters) {
37c9b1f062SMaksim Panchenko     LLVM_DEBUG(dbgs() << "BOLT-DEBUG: invoking " << Rewriter->getName()
38c9b1f062SMaksim Panchenko                       << " before CFG construction\n");
39c9b1f062SMaksim Panchenko     if (Error E = Rewriter->preCFGInitializer()) {
40c9b1f062SMaksim Panchenko       errs() << "BOLT-ERROR: while running " << Rewriter->getName()
41c9b1f062SMaksim Panchenko              << " in pre-CFG state: " << toString(std::move(E)) << '\n';
42c9b1f062SMaksim Panchenko       exit(1);
43c9b1f062SMaksim Panchenko     }
44c9b1f062SMaksim Panchenko   }
45c9b1f062SMaksim Panchenko }
46c9b1f062SMaksim Panchenko 
runInitializersPostCFG()47dd630d83SMaksim Panchenko void MetadataManager::runInitializersPostCFG() {
48dd630d83SMaksim Panchenko   for (auto &Rewriter : Rewriters) {
49dd630d83SMaksim Panchenko     LLVM_DEBUG(dbgs() << "BOLT-DEBUG: invoking " << Rewriter->getName()
50dd630d83SMaksim Panchenko                       << " after CFG construction\n");
51dd630d83SMaksim Panchenko     if (Error E = Rewriter->postCFGInitializer()) {
52dd630d83SMaksim Panchenko       errs() << "BOLT-ERROR: while running " << Rewriter->getName()
53dd630d83SMaksim Panchenko              << " in CFG state: " << toString(std::move(E)) << '\n';
54dd630d83SMaksim Panchenko       exit(1);
55dd630d83SMaksim Panchenko     }
56dd630d83SMaksim Panchenko   }
57dd630d83SMaksim Panchenko }
58dd630d83SMaksim Panchenko 
runFinalizersPreEmit()59aa1968c2SMaksim Panchenko void MetadataManager::runFinalizersPreEmit() {
60aa1968c2SMaksim Panchenko   for (auto &Rewriter : Rewriters) {
61aa1968c2SMaksim Panchenko     LLVM_DEBUG(dbgs() << "BOLT-DEBUG: invoking " << Rewriter->getName()
62aa1968c2SMaksim Panchenko                       << " before emitting binary context\n");
63aa1968c2SMaksim Panchenko     if (Error E = Rewriter->preEmitFinalizer()) {
64aa1968c2SMaksim Panchenko       errs() << "BOLT-ERROR: while running " << Rewriter->getName()
65aa1968c2SMaksim Panchenko              << " before emit: " << toString(std::move(E)) << '\n';
66aa1968c2SMaksim Panchenko       exit(1);
67aa1968c2SMaksim Panchenko     }
68aa1968c2SMaksim Panchenko   }
69aa1968c2SMaksim Panchenko }
70aa1968c2SMaksim Panchenko 
runFinalizersAfterEmit()71c9b1f062SMaksim Panchenko void MetadataManager::runFinalizersAfterEmit() {
72c9b1f062SMaksim Panchenko   for (auto &Rewriter : Rewriters) {
73c9b1f062SMaksim Panchenko     LLVM_DEBUG(dbgs() << "BOLT-DEBUG: invoking " << Rewriter->getName()
74c9b1f062SMaksim Panchenko                       << " after emit\n");
75c9b1f062SMaksim Panchenko     if (Error E = Rewriter->postEmitFinalizer()) {
76c9b1f062SMaksim Panchenko       errs() << "BOLT-ERROR: while running " << Rewriter->getName()
77c9b1f062SMaksim Panchenko              << " after emit: " << toString(std::move(E)) << '\n';
78c9b1f062SMaksim Panchenko       exit(1);
79c9b1f062SMaksim Panchenko     }
80c9b1f062SMaksim Panchenko   }
81c9b1f062SMaksim Panchenko }
82