[llvm-commits] CVS: llvm/lib/VMCore/Pass.cpp

Chris Lattner lattner at cs.uiuc.edu
Mon Oct 13 00:34:02 PDT 2003


Changes in directory llvm/lib/VMCore:

Pass.cpp updated: 1.49 -> 1.50

---
Log message:

* Remove extraneous #includes
* 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.


---
Diffs of the changes:  (+9 -7)

Index: llvm/lib/VMCore/Pass.cpp
diff -u llvm/lib/VMCore/Pass.cpp:1.49 llvm/lib/VMCore/Pass.cpp:1.50
--- llvm/lib/VMCore/Pass.cpp:1.49	Sun Oct 12 13:52:12 2003
+++ llvm/lib/VMCore/Pass.cpp	Mon Oct 13 00:33:01 2003
@@ -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 @@
 //   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 @@
   // that only depend on the CFG (like dominators, loop info, etc...)
   //
   Preserved.insert(Preserved.end(),
-                   CFGOnlyAnalyses.begin(), CFGOnlyAnalyses.end());
+                   getCFGOnlyAnalyses().begin(), getCFGOnlyAnalyses().end());
 }
 
 





More information about the llvm-commits mailing list