-
Notifications
You must be signed in to change notification settings - Fork 0
/
IROptimizer.h
32 lines (27 loc) · 985 Bytes
/
IROptimizer.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#pragma once
#include <llvm/Analysis/AliasAnalysis.h>
#include <llvm/Analysis/CGSCCPassManager.h>
#include <llvm/Analysis/LoopAnalysisManager.h>
#include <llvm/Passes/OptimizationLevel.h>
#include <llvm/Passes/PassBuilder.h>
#include "../CompilerPass.h"
#include "../SourceFile.h"
class IROptimizer : private CompilerPass {
public:
// Constructors
IROptimizer(SourceFile *sourceFile, llvm::TargetMachine *targetMachine)
: CompilerPass(sourceFile), llvmModule(sourceFile->llvmModule.get()), targetMachine(targetMachine) {}
// Public methods
void prepare();
void optimize();
[[nodiscard]] std::string getIRString() const;
private:
// Private members
llvm::LoopAnalysisManager loopAnalysisMgr;
llvm::FunctionAnalysisManager functionAnalysisMgr;
llvm::CGSCCAnalysisManager cgsccAnalysisMgr;
llvm::ModuleAnalysisManager moduleAnalysisMgr;
std::unique_ptr<llvm::PassBuilder> passBuilder;
llvm::Module *llvmModule;
llvm::TargetMachine *targetMachine;
};