* Remove extraneous #includes
authorChris Lattner <sabre@nondot.org>
Mon, 13 Oct 2003 05:33:01 +0000 (05:33 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 13 Oct 2003 05:33:01 +0000 (05:33 +0000)
* Fix a nasty initializer ordering bug.  Any only-CFG passes which registered
  themselves before the CFGOnlyAnalysis vector initialized got forgotten and
  thus got invalidated and recomputed.

In particular, in my compiled version of gccas, the Loop information pass was
being recomputed unnecessarily.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@9074 91177308-0d34-0410-b5e6-96231b3b80d8

lib/VMCore/Pass.cpp

index 0d25afc7698e93d451bc336392de8c3ad1c62441..c9b97c879a600633a2af2fce0ec69a5bd953ffc8 100644 (file)
@@ -1,4 +1,4 @@
-//===- Pass.cpp - LLVM Pass Infrastructure Impementation ------------------===//
+//===- Pass.cpp - LLVM Pass Infrastructure Implementation -----------------===//
 //
 // This file implements the LLVM Pass infrastructure.  It is primarily
 // responsible with ensuring that passes are executed and batched together
@@ -11,9 +11,6 @@
 #include "llvm/Module.h"
 #include "Support/STLExtras.h"
 #include "Support/TypeInfo.h"
-#include "Config/sys/resource.h"
-#include "Config/sys/time.h"
-#include "Config/unistd.h"
 #include <set>
 
 // IncludeFile - Stub function used to help linking out.
@@ -23,10 +20,15 @@ IncludeFile::IncludeFile(void*) {}
 //   AnalysisID Class Implementation
 //
 
-static std::vector<const PassInfo*> CFGOnlyAnalyses;
+// getCFGOnlyAnalyses - A wrapper around the CFGOnlyAnalyses which make it
+// initializer order independent.
+static std::vector<const PassInfo*> &getCFGOnlyAnalyses() {
+  static std::vector<const PassInfo*> CFGOnlyAnalyses;
+  return CFGOnlyAnalyses;
+}
 
 void RegisterPassBase::setOnlyUsesCFG() {
-  CFGOnlyAnalyses.push_back(PIObj);
+  getCFGOnlyAnalyses().push_back(PIObj);
 }
 
 //===----------------------------------------------------------------------===//
@@ -56,7 +58,7 @@ void AnalysisUsage::setPreservesCFG() {
   // that only depend on the CFG (like dominators, loop info, etc...)
   //
   Preserved.insert(Preserved.end(),
-                   CFGOnlyAnalyses.begin(), CFGOnlyAnalyses.end());
+                   getCFGOnlyAnalyses().begin(), getCFGOnlyAnalyses().end());
 }