/// \file CompileModule.cpp /// \brief The compile module pipe transforma llvm module into a object file // // This file is distributed under the MIT License. See LICENSE.md for details. // #include #include "llvm/Analysis/TargetLibraryInfo.h" #include "llvm/CodeGen/CommandFlags.h" #include "llvm/CodeGen/MachineModuleInfo.h" #include "llvm/IR/AutoUpgrade.h" #include "llvm/IR/LegacyPassManager.h" #include "llvm/Option/OptTable.h" #include "llvm/Support/CodeGen.h" #include "llvm/Support/TargetRegistry.h" #include "llvm/Support/raw_os_ostream.h" #include "llvm/Target/TargetMachine.h" #include "revng/Pipeline/AllRegistries.h" #include "revng/Pipeline/LLVMContainer.h" #include "revng/Pipes/CompileModulePipe.h" #include "revng/Support/Assert.h" #include "revng/Support/IRAnnotators.h" #include "revng/Support/OriginalAssemblyAnnotationWriter.h" using namespace llvm; using namespace llvm::codegen; using namespace std; using namespace pipeline; using namespace ::revng::pipes; using namespace sys; using namespace cl; static cl::opt OptLevel("compile-opt-level", cl::desc("Optimization level. [-O0, -O1, -O2, or " "-O3] " "(default = '-O2')"), cl::Prefix, cl::ZeroOrMore, cl::init(' ')); static void compileModuleRunImpl(LLVMContainer &Module, FileContainer &TargetBinary) { StringMap