enum BackendAction {
Backend_EmitAssembly, ///< Emit native assembly files
Backend_EmitBC, ///< Emit LLVM bitcode files
- Backend_EmitBCVerify, ///< Emit LLVM bitcode files and verify
Backend_EmitLL, ///< Emit human-readable LLVM assembly
Backend_EmitNothing, ///< Don't emit anything (benchmarking mode)
Backend_EmitMCNull, ///< Run CodeGen, but don't emit anything
EmitBCAction(llvm::LLVMContext *_VMContext = 0);
};
-class EmitBCVerifyAction : public CodeGenAction {
-public:
- EmitBCVerifyAction(llvm::LLVMContext *_VMContext = 0);
-};
-
class EmitLLVMAction : public CodeGenAction {
public:
EmitLLVMAction(llvm::LLVMContext *_VMContext = 0);
HelpText<"Build ASTs then convert to LLVM, emit .ll file">;
def emit_llvm_bc : Flag<"-emit-llvm-bc">,
HelpText<"Build ASTs then convert to LLVM, emit .bc file">;
-def emit_llvm_bc_verify : Flag<"-emit-llvm-bc-verify">,
- HelpText<"Build ASTs then convert to LLVM, emit .bc file"
- " and finally verify bitcode serialization/deserialization">;
def emit_llvm_only : Flag<"-emit-llvm-only">,
HelpText<"Build ASTs and convert to LLVM, discarding output">;
def emit_codegen_only : Flag<"-emit-codegen-only">,
DumpTokens, ///< Dump out preprocessed tokens.
EmitAssembly, ///< Emit a .s file.
EmitBC, ///< Emit a .bc file.
- EmitBCVerify, ///< Emit and verify .bc file.
EmitHTML, ///< Translate input source into HTML.
EmitLLVM, ///< Emit a .ll file.
EmitLLVMOnly, ///< Generate LLVM IR, but do not emit anything.
break;
case Backend_EmitBC:
- case Backend_EmitBCVerify:
getPerModulePasses()->add(createBitcodeWriterPass(*OS));
- if (Action == Backend_EmitBCVerify)
- getPerModulePasses()->add(createBitcodeVerifierPass(*OS));
break;
case Backend_EmitLL:
case Backend_EmitLL:
return CI.createDefaultOutputFile(false, InFile, "ll");
case Backend_EmitBC:
- case Backend_EmitBCVerify:
return CI.createDefaultOutputFile(true, InFile, "bc");
case Backend_EmitNothing:
return 0;
EmitBCAction::EmitBCAction(llvm::LLVMContext *_VMContext)
: CodeGenAction(Backend_EmitBC, _VMContext) {}
-EmitBCVerifyAction::EmitBCVerifyAction(llvm::LLVMContext *_VMContext)
- : CodeGenAction(Backend_EmitBCVerify, _VMContext) {}
-
EmitLLVMAction::EmitLLVMAction(llvm::LLVMContext *_VMContext)
: CodeGenAction(Backend_EmitLL, _VMContext) {}
case frontend::DumpTokens: return "-dump-tokens";
case frontend::EmitAssembly: return "-S";
case frontend::EmitBC: return "-emit-llvm-bc";
- case frontend::EmitBCVerify: return "-emit-llvm-bc-verify";
case frontend::EmitHTML: return "-emit-html";
case frontend::EmitLLVM: return "-emit-llvm";
case frontend::EmitLLVMOnly: return "-emit-llvm-only";
Opts.ProgramAction = frontend::EmitAssembly; break;
case OPT_emit_llvm_bc:
Opts.ProgramAction = frontend::EmitBC; break;
- case OPT_emit_llvm_bc_verify:
- Opts.ProgramAction = frontend::EmitBCVerify; break;
case OPT_emit_html:
Opts.ProgramAction = frontend::EmitHTML; break;
case OPT_emit_llvm:
case DumpTokens: return new DumpTokensAction();
case EmitAssembly: return new EmitAssemblyAction();
case EmitBC: return new EmitBCAction();
- case EmitBCVerify: return new EmitBCVerifyAction();
case EmitHTML: return new HTMLPrintAction();
case EmitLLVM: return new EmitLLVMAction();
case EmitLLVMOnly: return new EmitLLVMOnlyAction();