I checked in following patch today. First step as part of GCC PCH integration work.
- Devang Index: gcc/toplev.c =================================================================== --- gcc/toplev.c (revision 123268) +++ gcc/toplev.c (working copy) @@ -1163,7 +1163,8 @@ compile_file (void) #ifndef ENABLE_LLVM targetm.asm_out.file_end (); #else - llvm_asm_file_end(); + if (!flag_pch_file) + llvm_asm_file_end(); #endif /* APPLE LOCAL end LLVM */ } @@ -1563,7 +1564,10 @@ init_asm_output (const char *name) #ifndef ENABLE_LLVM targetm.asm_out.file_start (); #else - llvm_asm_file_start(); + if (flag_pch_file) + llvm_pch_write_init(); + else + llvm_asm_file_start(); #endif /* APPLE LOCAL end LLVM */ Index: gcc/llvm.h =================================================================== --- gcc/llvm.h (revision 123268) +++ gcc/llvm.h (working copy) @@ -80,6 +80,9 @@ void llvm_emit_typedef(union tree_node*) */ void print_llvm(FILE *file, void *LLVM); +/* Init pch writing. */ +void llvm_pch_write_init(void); + /* llvm_asm_file_start - Start the .s file. */ void llvm_asm_file_start(void); Index: gcc/cp/decl2.c =================================================================== --- gcc/cp/decl2.c (revision 123268) +++ gcc/cp/decl2.c (working copy) @@ -2846,8 +2846,12 @@ cp_finish_file (void) if (! global_bindings_p () || current_class_type || decl_namespace_list) return; - if (pch_file) + /* APPLE LOCAL begin LLVM */ + if (pch_file) { c_common_write_pch (); + return; + } + /* APPLE LOCAL end LLVM */ #ifdef USE_MAPPED_LOCATION /* FIXME - huh? */ Index: gcc/llvm-backend.cpp =================================================================== --- gcc/llvm-backend.cpp (revision 123268) +++ gcc/llvm-backend.cpp (working copy) @@ -183,6 +183,26 @@ void llvm_lang_dependent_init(const char oFILEstream *AsmOutStream = 0; +// Initialize PCH writing. +void llvm_pch_write_init(void) { + timevar_push(TV_LLVM_INIT); + AsmOutStream = new oFILEstream(asm_out_file); + AsmOutFile = new OStream(*AsmOutStream); + + PerModulePasses = new PassManager(); + PerModulePasses->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. + PerModulePasses->add(new WriteBytecodePass(AsmOutFile)); + + // Disable emission of .ident into the output file... which is completely + // wrong for llvm/.bc emission cases. + flag_no_ident = 1; + + timevar_pop(TV_LLVM_INIT); +} + // llvm_asm_file_start - Start the .s file. void llvm_asm_file_start(void) { timevar_push(TV_LLVM_INIT); Index: gcc/c-pch.c =================================================================== --- gcc/c-pch.c (revision 123268) +++ gcc/c-pch.c (working copy) @@ -193,6 +193,11 @@ c_common_write_pch (void) long written; struct c_pch_header h; + /* APPLE LOCAL begin LLVM */ +#ifdef ENABLE_LLVM + llvm_asm_file_end(); +#endif + /* APPLE LOCAL end LLVM */ (*debug_hooks->handle_pch) (1); cpp_write_pch_deps (parse_in, pch_outfile); _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits