// based on llc code, University of Illinois Open Source License static void codegenModule(llvm::TargetMachine &Target, llvm::Module& m, llvm::raw_fd_ostream& out, llvm::TargetMachine::CodeGenFileType fileType) { using namespace llvm; // Build up all of the passes that we want to do to the module. FunctionPassManager Passes(&m); #if LDC_LLVM_VER >= 302 if (const DataLayout *DL = Target.getDataLayout()) Passes.add(new DataLayout(*DL)); else Passes.add(new DataLayout(&m)); #else if (const TargetData *TD = Target.getTargetData()) Passes.add(new TargetData(*TD)); else Passes.add(new TargetData(&m)); #endif #if LDC_LLVM_VER >= 303 Target.addAnalysisPasses(Passes); #endif llvm::formatted_raw_ostream fout(out); if (Target.addPassesToEmitFile(Passes, fout, fileType, codeGenOptLevel())) llvm_unreachable("no support for asm output"); Passes.doInitialization(); // Run our queue of passes all at once now, efficiently. for (llvm::Module::iterator I = m.begin(), E = m.end(); I != E; ++I) if (!I->isDeclaration()) Passes.run(*I); Passes.doFinalization(); }
// based on llc code, University of Illinois Open Source License static void codegenModule(llvm::TargetMachine &Target, llvm::Module& m, llvm::raw_fd_ostream& out, llvm::TargetMachine::CodeGenFileType fileType) { using namespace llvm; // Create a PassManager to hold and optimize the collection of passes we are // about to build. #if LDC_LLVM_VER >= 307 legacy:: #endif PassManager Passes; #if LDC_LLVM_VER >= 307 // The DataLayout is already set at the module (in module.cpp, // method Module::genLLVMModule()) // FIXME: Introduce new command line switch default-data-layout to // override the module data layout #elif LDC_LLVM_VER == 306 Passes.add(new DataLayoutPass()); #elif LDC_LLVM_VER == 305 if (const DataLayout *DL = Target.getDataLayout()) Passes.add(new DataLayoutPass(*DL)); else Passes.add(new DataLayoutPass(&m)); #elif LDC_LLVM_VER >= 302 if (const DataLayout *DL = Target.getDataLayout()) Passes.add(new DataLayout(*DL)); else Passes.add(new DataLayout(&m)); #else if (const TargetData *TD = Target.getTargetData()) Passes.add(new TargetData(*TD)); else Passes.add(new TargetData(&m)); #endif #if LDC_LLVM_VER >= 307 // Add internal analysis passes from the target machine. Passes.add(createTargetTransformInfoWrapperPass(Target.getTargetIRAnalysis())); #elif LDC_LLVM_VER >= 303 Target.addAnalysisPasses(Passes); #endif #if LDC_LLVM_VER < 307 llvm::formatted_raw_ostream fout(out); #endif if (Target.addPassesToEmitFile(Passes, #if LDC_LLVM_VER >= 307 out, #else fout, #endif fileType, codeGenOptLevel())) llvm_unreachable("no support for asm output"); Passes.run(m); }