Author: dpatel Date: Wed Feb 13 13:12:16 2008 New Revision: 47080 URL: http://llvm.org/viewvc/llvm-project?rev=47080&view=rev Log: Add hook to dump .bc file before module level optimizer is run. This helps investigate optimizer and code generator bugs which are not easily reproducible using standalone 'opt' and 'llc' tools.
Modified: llvm-gcc-4.2/trunk/gcc/common.opt llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp Modified: llvm-gcc-4.2/trunk/gcc/common.opt URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/common.opt?rev=47080&r1=47079&r2=47080&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/common.opt (original) +++ llvm-gcc-4.2/trunk/gcc/common.opt Wed Feb 13 13:12:16 2008 @@ -233,6 +233,10 @@ fdebug-pass-arguments Common Report Var(flag_debug_pass_arguments) Print pass manager arguments + +fdebug-llvm-module-opt +Common Report Var(flag_debug_llvm_module_opt) +Help debug llvm module-level optimizer ; LLVM LOCAL end ; The version of the C++ ABI in use. The following values are allowed: Modified: llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp?rev=47080&r1=47079&r2=47080&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp (original) +++ llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp Wed Feb 13 13:12:16 2008 @@ -79,6 +79,7 @@ TargetMachine *TheTarget = 0; TypeConverter *TheTypeConverter = 0; llvm::OStream *AsmOutFile = 0; +llvm::OStream *AsmIntermediateOutFile = 0; /// DisableLLVMOptimizations - Allow the user to specify: /// "-mllvm -disable-llvm-optzns" on the llvm-gcc command line to force llvm @@ -210,6 +211,7 @@ } oFILEstream *AsmOutStream = 0; +oFILEstream *AsmIntermediateOutStream = 0; /// Read bytecode from PCH file. Initialize TheModule and setup /// LTypes vector. @@ -556,7 +558,31 @@ // Finish off the per-function pass. if (PerFunctionPasses) PerFunctionPasses->doFinalization(); + + // Emit intermediate .bc file before module level optimization passes are run. + if (emit_llvm_bc && flag_debug_llvm_module_opt) { + static PassManager *IntermediatePM = new PassManager(); + IntermediatePM->add(new TargetData(*TheTarget->getTargetData())); + + // Emit an LLVM .bc file to the output. This is used when passed + // -emit-llvm -c to the GCC driver. + + char asm_intermediate_out_filename[MAXPATHLEN]; + strcpy(&asm_intermediate_out_filename[0], asm_file_name); + strcat(&asm_intermediate_out_filename[0],".0"); + FILE *asm_intermediate_out_file = fopen(asm_intermediate_out_filename, "w+b"); + AsmIntermediateOutStream = new oFILEstream(asm_intermediate_out_file); + AsmIntermediateOutFile = new OStream(*AsmIntermediateOutStream); + IntermediatePM->add(CreateBitcodeWriterPass(*AsmIntermediateOutStream)); + IntermediatePM->run(*TheModule); + AsmIntermediateOutStream->flush(); + fflush(asm_intermediate_out_file); + delete AsmIntermediateOutStream; + AsmIntermediateOutStream = 0; + delete AsmIntermediateOutFile; + AsmIntermediateOutFile = 0; + } // Run module-level optimizers, if any are present. if (PerModulePasses) PerModulePasses->run(*TheModule); _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits