@@ -27,8 +27,14 @@ getBackendActionFromOutputType(CIRGenAction::OutputType Action) {
2727 assert (false &&
2828 " Unsupported output type for getBackendActionFromOutputType!" );
2929 break ; // Unreachable, but fall through to report that
30+ case CIRGenAction::OutputType::EmitAssembly:
31+ return BackendAction::Backend_EmitAssembly;
32+ case CIRGenAction::OutputType::EmitBC:
33+ return BackendAction::Backend_EmitBC;
3034 case CIRGenAction::OutputType::EmitLLVM:
3135 return BackendAction::Backend_EmitLL;
36+ case CIRGenAction::OutputType::EmitObj:
37+ return BackendAction::Backend_EmitObj;
3238 }
3339 // We should only get here if a non-enum value is passed in or we went through
3440 // the assert(false) case above
@@ -84,7 +90,10 @@ class CIRGenConsumer : public clang::ASTConsumer {
8490 MlirModule->print (*OutputStream, Flags);
8591 }
8692 break ;
87- case CIRGenAction::OutputType::EmitLLVM: {
93+ case CIRGenAction::OutputType::EmitLLVM:
94+ case CIRGenAction::OutputType::EmitBC:
95+ case CIRGenAction::OutputType::EmitObj:
96+ case CIRGenAction::OutputType::EmitAssembly: {
8897 llvm::LLVMContext LLVMCtx;
8998 std::unique_ptr<llvm::Module> LLVMModule =
9099 lowerFromCIRToLLVMIR (MlirModule, LLVMCtx);
@@ -111,10 +120,16 @@ static std::unique_ptr<raw_pwrite_stream>
111120getOutputStream (CompilerInstance &CI, StringRef InFile,
112121 CIRGenAction::OutputType Action) {
113122 switch (Action) {
123+ case CIRGenAction::OutputType::EmitAssembly:
124+ return CI.createDefaultOutputFile (false , InFile, " s" );
114125 case CIRGenAction::OutputType::EmitCIR:
115126 return CI.createDefaultOutputFile (false , InFile, " cir" );
116127 case CIRGenAction::OutputType::EmitLLVM:
117128 return CI.createDefaultOutputFile (false , InFile, " ll" );
129+ case CIRGenAction::OutputType::EmitBC:
130+ return CI.createDefaultOutputFile (true , InFile, " bc" );
131+ case CIRGenAction::OutputType::EmitObj:
132+ return CI.createDefaultOutputFile (true , InFile, " o" );
118133 }
119134 llvm_unreachable (" Invalid CIRGenAction::OutputType" );
120135}
@@ -132,10 +147,22 @@ CIRGenAction::CreateASTConsumer(CompilerInstance &CI, StringRef InFile) {
132147 return Result;
133148}
134149
150+ void EmitAssemblyAction::anchor () {}
151+ EmitAssemblyAction::EmitAssemblyAction (mlir::MLIRContext *MLIRCtx)
152+ : CIRGenAction(OutputType::EmitAssembly, MLIRCtx) {}
153+
135154void EmitCIRAction::anchor () {}
136155EmitCIRAction::EmitCIRAction (mlir::MLIRContext *MLIRCtx)
137156 : CIRGenAction(OutputType::EmitCIR, MLIRCtx) {}
138157
139158void EmitLLVMAction::anchor () {}
140159EmitLLVMAction::EmitLLVMAction (mlir::MLIRContext *MLIRCtx)
141160 : CIRGenAction(OutputType::EmitLLVM, MLIRCtx) {}
161+
162+ void EmitBCAction::anchor () {}
163+ EmitBCAction::EmitBCAction (mlir::MLIRContext *MLIRCtx)
164+ : CIRGenAction(OutputType::EmitBC, MLIRCtx) {}
165+
166+ void EmitObjAction::anchor () {}
167+ EmitObjAction::EmitObjAction (mlir::MLIRContext *MLIRCtx)
168+ : CIRGenAction(OutputType::EmitObj, MLIRCtx) {}
0 commit comments