Skip to content

Commit 2fc3593

Browse files
authored
[CIR] Merge two copies of CIRGenAction.h (#1085)
We have both clang/include/clang/CIRFrontendAction/CIRGenAction.h and clang/include/clang/cir/FrontendAction/CIRGenAction.h, which is a historical artifact. The latter is what's being upstreamed, so merge the former into it to avoid any confusion.
1 parent 0c77b27 commit 2fc3593

File tree

4 files changed

+138
-197
lines changed

4 files changed

+138
-197
lines changed

clang/include/clang/CIR/FrontendAction/CIRGenAction.h

Lines changed: 136 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,52 +9,181 @@
99
#ifndef LLVM_CLANG_CIR_CIRGENACTION_H
1010
#define LLVM_CLANG_CIR_CIRGENACTION_H
1111

12+
#include "clang/CodeGen/CodeGenAction.h"
1213
#include "clang/Frontend/FrontendAction.h"
14+
#include <memory>
1315

14-
#include "mlir/IR/BuiltinOps.h"
15-
#include "mlir/IR/OwningOpRef.h"
16+
namespace llvm {
17+
class LLVMIRContext;
18+
class Module;
19+
} // namespace llvm
1620

1721
namespace mlir {
1822
class MLIRContext;
1923
class ModuleOp;
24+
template <typename T> class OwningOpRef;
2025
} // namespace mlir
2126

2227
namespace cir {
2328
class CIRGenConsumer;
29+
class CIRGenerator;
2430

2531
class CIRGenAction : public clang::ASTFrontendAction {
2632
public:
2733
enum class OutputType {
34+
EmitAssembly,
2835
EmitCIR,
36+
EmitCIRFlat,
37+
EmitLLVM,
38+
EmitBC,
39+
EmitMLIR,
40+
EmitObj,
41+
None
2942
};
3043

3144
private:
3245
friend class CIRGenConsumer;
3346

34-
mlir::OwningOpRef<mlir::ModuleOp> MLIRMod;
47+
// TODO: this is redundant but just using the OwningModuleRef requires more of
48+
// clang against MLIR. Hide this somewhere else.
49+
std::unique_ptr<mlir::OwningOpRef<mlir::ModuleOp>> mlirModule;
50+
std::unique_ptr<llvm::Module> llvmModule;
3551

36-
mlir::MLIRContext *MLIRCtx;
52+
mlir::MLIRContext *mlirContext;
53+
54+
mlir::OwningOpRef<mlir::ModuleOp> loadModule(llvm::MemoryBufferRef mbRef);
3755

3856
protected:
39-
CIRGenAction(OutputType Action, mlir::MLIRContext *MLIRCtx = nullptr);
57+
CIRGenAction(OutputType action, mlir::MLIRContext *_MLIRContext = nullptr);
4058

4159
std::unique_ptr<clang::ASTConsumer>
4260
CreateASTConsumer(clang::CompilerInstance &CI,
4361
llvm::StringRef InFile) override;
4462

63+
void ExecuteAction() override;
64+
65+
void EndSourceFileAction() override;
66+
4567
public:
4668
~CIRGenAction() override;
4769

48-
OutputType Action;
70+
virtual bool hasCIRSupport() const override { return true; }
71+
72+
CIRGenConsumer *cgConsumer;
73+
OutputType action;
4974
};
5075

5176
class EmitCIRAction : public CIRGenAction {
5277
virtual void anchor();
5378

5479
public:
55-
EmitCIRAction(mlir::MLIRContext *MLIRCtx = nullptr);
80+
EmitCIRAction(mlir::MLIRContext *mlirCtx = nullptr);
81+
};
82+
83+
class EmitCIRFlatAction : public CIRGenAction {
84+
virtual void anchor();
85+
86+
public:
87+
EmitCIRFlatAction(mlir::MLIRContext *mlirCtx = nullptr);
88+
};
89+
90+
class EmitCIROnlyAction : public CIRGenAction {
91+
virtual void anchor();
92+
93+
public:
94+
EmitCIROnlyAction(mlir::MLIRContext *mlirCtx = nullptr);
95+
};
96+
97+
class EmitMLIRAction : public CIRGenAction {
98+
virtual void anchor();
99+
100+
public:
101+
EmitMLIRAction(mlir::MLIRContext *mlirCtx = nullptr);
102+
};
103+
104+
class EmitLLVMAction : public CIRGenAction {
105+
virtual void anchor();
106+
107+
public:
108+
EmitLLVMAction(mlir::MLIRContext *mlirCtx = nullptr);
109+
};
110+
111+
class EmitBCAction : public CIRGenAction {
112+
virtual void anchor();
113+
114+
public:
115+
EmitBCAction(mlir::MLIRContext *mlirCtx = nullptr);
56116
};
57117

118+
class EmitAssemblyAction : public CIRGenAction {
119+
virtual void anchor();
120+
121+
public:
122+
EmitAssemblyAction(mlir::MLIRContext *mlirCtx = nullptr);
123+
};
124+
125+
class EmitObjAction : public CIRGenAction {
126+
virtual void anchor();
127+
128+
public:
129+
EmitObjAction(mlir::MLIRContext *mlirCtx = nullptr);
130+
};
131+
132+
// Used for -fclangir-analysis-only: use CIR analysis but still use original
133+
// LLVM codegen path
134+
class AnalysisOnlyActionBase : public clang::CodeGenAction {
135+
virtual void anchor();
136+
137+
protected:
138+
std::unique_ptr<clang::ASTConsumer>
139+
CreateASTConsumer(clang::CompilerInstance &CI,
140+
llvm::StringRef InFile) override;
141+
142+
AnalysisOnlyActionBase(unsigned _Act,
143+
llvm::LLVMContext *_VMContext = nullptr);
144+
};
145+
146+
class AnalysisOnlyAndEmitAssemblyAction : public AnalysisOnlyActionBase {
147+
virtual void anchor() override;
148+
149+
public:
150+
AnalysisOnlyAndEmitAssemblyAction(llvm::LLVMContext *_VMContext = nullptr);
151+
};
152+
153+
class AnalysisOnlyAndEmitBCAction : public AnalysisOnlyActionBase {
154+
virtual void anchor() override;
155+
156+
public:
157+
AnalysisOnlyAndEmitBCAction(llvm::LLVMContext *_VMContext = nullptr);
158+
};
159+
160+
class AnalysisOnlyAndEmitLLVMAction : public AnalysisOnlyActionBase {
161+
virtual void anchor() override;
162+
163+
public:
164+
AnalysisOnlyAndEmitLLVMAction(llvm::LLVMContext *_VMContext = nullptr);
165+
};
166+
167+
class AnalysisOnlyAndEmitLLVMOnlyAction : public AnalysisOnlyActionBase {
168+
virtual void anchor() override;
169+
170+
public:
171+
AnalysisOnlyAndEmitLLVMOnlyAction(llvm::LLVMContext *_VMContext = nullptr);
172+
};
173+
174+
class AnalysisOnlyAndEmitCodeGenOnlyAction : public AnalysisOnlyActionBase {
175+
virtual void anchor() override;
176+
177+
public:
178+
AnalysisOnlyAndEmitCodeGenOnlyAction(llvm::LLVMContext *_VMContext = nullptr);
179+
};
180+
181+
class AnalysisOnlyAndEmitObjAction : public AnalysisOnlyActionBase {
182+
virtual void anchor() override;
183+
184+
public:
185+
AnalysisOnlyAndEmitObjAction(llvm::LLVMContext *_VMContext = nullptr);
186+
};
58187
} // namespace cir
59188

60189
#endif

clang/include/clang/CIRFrontendAction/CIRGenAction.h

Lines changed: 0 additions & 188 deletions
This file was deleted.

clang/lib/CIR/FrontendAction/CIRGenAction.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
//
77
//===----------------------------------------------------------------------===//
88

9-
#include "clang/CIRFrontendAction/CIRGenAction.h"
9+
#include "clang/CIR/FrontendAction/CIRGenAction.h"
1010
#include "mlir/Dialect/Func/IR/FuncOps.h"
1111
#include "mlir/Dialect/MemRef/IR/MemRef.h"
1212
#include "mlir/IR/BuiltinOps.h"

clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
#include "mlir/IR/MLIRContext.h"
3838
#include "mlir/Pass/PassManager.h"
3939
#include "clang/CIR/Dialect/Passes.h"
40-
#include "clang/CIRFrontendAction/CIRGenAction.h"
40+
#include "clang/CIR/FrontendAction/CIRGenAction.h"
4141
#endif
4242

4343
using namespace clang;

0 commit comments

Comments
 (0)