[llvm-commits] [127364] Fix PCH.

dpatel at apple.com dpatel at apple.com
Thu May 17 07:35:47 PDT 2007


Revision: 127364
Author:   dpatel
Date:     2007-05-17 07:35:46 -0700 (Thu, 17 May 2007)

Log Message:
-----------
Fix PCH. Patch by Anton Korobeynikov.

Modified Paths:
--------------
    apple-local/branches/llvm/gcc/llvm-backend.cpp

Modified: apple-local/branches/llvm/gcc/llvm-backend.cpp
===================================================================
--- apple-local/branches/llvm/gcc/llvm-backend.cpp	2007-05-17 09:01:27 UTC (rev 127363)
+++ apple-local/branches/llvm/gcc/llvm-backend.cpp	2007-05-17 14:35:46 UTC (rev 127364)
@@ -88,6 +88,8 @@
 static PassManager *PerModulePasses = 0;
 static FunctionPassManager *CodeGenPasses = 0;
 
+static void createOptimizationPasses();
+
 void llvm_initialize_backend(void) {
   // Initialize LLVM options.
   std::vector<const char*> Args;
@@ -209,13 +211,21 @@
   std::string ErrMsg;
   TheModule = ParseBitcodeFile(MB, &ErrMsg);
   delete MB;
-  
+
   if (!TheModule) {
     cerr << "Error reading bytecodes from PCH file\n";
     cerr << ErrMsg << "\n";
     exit(1);
   }
 
+  if (PerFunctionPasses || PerModulePasses || CodeGenPasses) {
+    delete PerFunctionPasses;
+    delete PerModulePasses;
+    delete CodeGenPasses;
+
+    createOptimizationPasses();
+  }
+    
   // Read LLVM Types string table
   readLLVMTypesStringTable();
   readLLVMValues();
@@ -225,7 +235,6 @@
 
 // Initialize PCH writing. 
 void llvm_pch_write_init(void) {
-
   timevar_push(TV_LLVM_INIT);
   AsmOutStream = new oFILEstream(asm_out_file);
   AsmOutFile = new OStream(*AsmOutStream);
@@ -246,14 +255,7 @@
   timevar_pop(TV_LLVM_INIT);
 }
 
-// llvm_asm_file_start - Start the .s file.
-void llvm_asm_file_start(void) {
-  timevar_push(TV_LLVM_INIT);
-  AsmOutStream = new oFILEstream(asm_out_file);
-  AsmOutFile = new OStream(*AsmOutStream);
-  
-  flag_llvm_pch_read = 0;
-
+static void createOptimizationPasses() {
   // Create and set up the per-function pass manager.
   // FIXME: Move the code generator to be function-at-a-time.
   PerFunctionPasses =
@@ -411,7 +413,19 @@
     delete PerModulePasses;
     PerModulePasses = 0;
   }
+}
+
+
+// llvm_asm_file_start - Start the .s file.
+void llvm_asm_file_start(void) {
+  timevar_push(TV_LLVM_INIT);
+  AsmOutStream = new oFILEstream(asm_out_file);
+  AsmOutFile = new OStream(*AsmOutStream);
   
+  flag_llvm_pch_read = 0;
+
+  createOptimizationPasses();
+  
   timevar_pop(TV_LLVM_INIT);
 }
 
@@ -480,8 +494,9 @@
         CodeGenPasses->run(*I);
     CodeGenPasses->doFinalization();
   }
-  
+
   AsmOutStream->flush();
+  fflush(asm_out_file);
   delete AsmOutStream;
   AsmOutStream = 0;
   delete AsmOutFile;





More information about the llvm-commits mailing list