[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