[llvm-commits] CVS: llvm/lib/Transforms/IPO/ConstantMerge.cpp

2007-04-14 Thread Chris Lattner


Changes in directory llvm/lib/Transforms/IPO:

ConstantMerge.cpp updated: 1.38 -> 1.39
---
Log message:

avoid iterator invalidation.


---
Diffs of the changes:  (+4 -2)

 ConstantMerge.cpp |6 --
 1 files changed, 4 insertions(+), 2 deletions(-)


Index: llvm/lib/Transforms/IPO/ConstantMerge.cpp
diff -u llvm/lib/Transforms/IPO/ConstantMerge.cpp:1.38 
llvm/lib/Transforms/IPO/ConstantMerge.cpp:1.39
--- llvm/lib/Transforms/IPO/ConstantMerge.cpp:1.38  Sat Apr 14 12:18:29 2007
+++ llvm/lib/Transforms/IPO/ConstantMerge.cpp   Sat Apr 14 13:06:52 2007
@@ -60,8 +60,10 @@
 // because doing so may cause initializers of other globals to be 
rewritten,
 // invalidating the Constant* pointers in CMap.
 //
-for (Module::global_iterator GV = M.global_begin(), E = M.global_end();
- GV != E; ++GV) {
+for (Module::global_iterator GVI = M.global_begin(), E = M.global_end();
+ GVI != E; ) {
+  GlobalVariable *GV = GVI++;
+  
   // If this GV is dead, remove it.
   GV->removeDeadConstantUsers();
   if (GV->use_empty() && GV->hasInternalLinkage()) {



___
llvm-commits mailing list
[EMAIL PROTECTED]
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/Transforms/IPO/ConstantMerge.cpp

2007-04-14 Thread Jeff Cohen


Changes in directory llvm/lib/Transforms/IPO:

ConstantMerge.cpp updated: 1.37 -> 1.38
---
Log message:

An even better fix.

---
Diffs of the changes:  (+2 -3)

 ConstantMerge.cpp |5 ++---
 1 files changed, 2 insertions(+), 3 deletions(-)


Index: llvm/lib/Transforms/IPO/ConstantMerge.cpp
diff -u llvm/lib/Transforms/IPO/ConstantMerge.cpp:1.37 
llvm/lib/Transforms/IPO/ConstantMerge.cpp:1.38
--- llvm/lib/Transforms/IPO/ConstantMerge.cpp:1.37  Sat Apr 14 11:55:19 2007
+++ llvm/lib/Transforms/IPO/ConstantMerge.cpp   Sat Apr 14 12:18:29 2007
@@ -65,9 +65,8 @@
   // If this GV is dead, remove it.
   GV->removeDeadConstantUsers();
   if (GV->use_empty() && GV->hasInternalLinkage()) {
-(GV++)->eraseFromParent();
-if (GV == E)
-  break;
+GV->eraseFromParent();
+continue;
   }
   
   // Only process constants with initializers.



___
llvm-commits mailing list
[EMAIL PROTECTED]
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/Transforms/IPO/ConstantMerge.cpp

2007-04-14 Thread Jeff Cohen


Changes in directory llvm/lib/Transforms/IPO:

ConstantMerge.cpp updated: 1.36 -> 1.37
---
Log message:

Fix recent regression that broke several llvm-tests.

---
Diffs of the changes:  (+2 -0)

 ConstantMerge.cpp |2 ++
 1 files changed, 2 insertions(+)


Index: llvm/lib/Transforms/IPO/ConstantMerge.cpp
diff -u llvm/lib/Transforms/IPO/ConstantMerge.cpp:1.36 
llvm/lib/Transforms/IPO/ConstantMerge.cpp:1.37
--- llvm/lib/Transforms/IPO/ConstantMerge.cpp:1.36  Fri Apr 13 20:11:54 2007
+++ llvm/lib/Transforms/IPO/ConstantMerge.cpp   Sat Apr 14 11:55:19 2007
@@ -66,6 +66,8 @@
   GV->removeDeadConstantUsers();
   if (GV->use_empty() && GV->hasInternalLinkage()) {
 (GV++)->eraseFromParent();
+if (GV == E)
+  break;
   }
   
   // Only process constants with initializers.



___
llvm-commits mailing list
[EMAIL PROTECTED]
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/Transforms/IPO/ConstantMerge.cpp

2007-04-13 Thread Chris Lattner


Changes in directory llvm/lib/Transforms/IPO:

ConstantMerge.cpp updated: 1.35 -> 1.36
---
Log message:

in addition to merging, constantmerge should also delete trivially dead globals,
in order to clean up after simplifylibcalls.


---
Diffs of the changes:  (+8 -1)

 ConstantMerge.cpp |9 -
 1 files changed, 8 insertions(+), 1 deletion(-)


Index: llvm/lib/Transforms/IPO/ConstantMerge.cpp
diff -u llvm/lib/Transforms/IPO/ConstantMerge.cpp:1.35 
llvm/lib/Transforms/IPO/ConstantMerge.cpp:1.36
--- llvm/lib/Transforms/IPO/ConstantMerge.cpp:1.35  Mon Feb  5 17:32:05 2007
+++ llvm/lib/Transforms/IPO/ConstantMerge.cpp   Fri Apr 13 20:11:54 2007
@@ -61,7 +61,13 @@
 // invalidating the Constant* pointers in CMap.
 //
 for (Module::global_iterator GV = M.global_begin(), E = M.global_end();
- GV != E; ++GV)
+ GV != E; ++GV) {
+  // If this GV is dead, remove it.
+  GV->removeDeadConstantUsers();
+  if (GV->use_empty() && GV->hasInternalLinkage()) {
+(GV++)->eraseFromParent();
+  }
+  
   // Only process constants with initializers.
   if (GV->isConstant() && GV->hasInitializer()) {
 Constant *Init = GV->getInitializer();
@@ -80,6 +86,7 @@
   Slot = GV;
 }
   }
+}
 
 if (Replacements.empty())
   return MadeChange;



___
llvm-commits mailing list
[EMAIL PROTECTED]
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/Transforms/IPO/ConstantMerge.cpp

2006-03-07 Thread Chris Lattner


Changes in directory llvm/lib/Transforms/IPO:

ConstantMerge.cpp updated: 1.30 -> 1.31
---
Log message:

Fix ConstantMerge/2006-03-07-DontMergeDiffSections.ll, a problem Jim 
hypotheticalized about, where we would incorrectly merge two globals in
different sections.


---
Diffs of the changes:  (+14 -11)

 ConstantMerge.cpp |   25 ++---
 1 files changed, 14 insertions(+), 11 deletions(-)


Index: llvm/lib/Transforms/IPO/ConstantMerge.cpp
diff -u llvm/lib/Transforms/IPO/ConstantMerge.cpp:1.30 
llvm/lib/Transforms/IPO/ConstantMerge.cpp:1.31
--- llvm/lib/Transforms/IPO/ConstantMerge.cpp:1.30  Thu Apr 21 18:39:37 2005
+++ llvm/lib/Transforms/IPO/ConstantMerge.cpp   Tue Mar  7 11:56:59 2006
@@ -39,7 +39,9 @@
 ModulePass *llvm::createConstantMergePass() { return new ConstantMerge(); }
 
 bool ConstantMerge::runOnModule(Module &M) {
-  std::map CMap;
+  // Map unique constant/section pairs to globals.  We don't want to merge
+  // globals in different sections.
+  std::map, GlobalVariable*> CMap;
 
   // Replacements - This vector contains a list of replacements to perform.
   std::vector > Replacements;
@@ -56,23 +58,24 @@
 // because doing so may cause initializers of other globals to be 
rewritten,
 // invalidating the Constant* pointers in CMap.
 //
-for (Module::global_iterator GV = M.global_begin(), E = M.global_end(); GV 
!= E; ++GV)
-  // Only process constants with initializers
+for (Module::global_iterator GV = M.global_begin(), E = M.global_end();
+ GV != E; ++GV)
+  // Only process constants with initializers.
   if (GV->isConstant() && GV->hasInitializer()) {
 Constant *Init = GV->getInitializer();
 
-// Check to see if the initializer is already known...
-std::map::iterator I = CMap.find(Init);
+// Check to see if the initializer is already known.
+GlobalVariable *&Slot = CMap[std::make_pair(Init, GV->getSection())];
 
-if (I == CMap.end()) {// Nope, add it to the map
-  CMap.insert(I, std::make_pair(Init, GV));
+if (Slot == 0) {// Nope, add it to the map.
+  Slot = GV;
 } else if (GV->hasInternalLinkage()) {// Yup, this is a duplicate!
   // Make all uses of the duplicate constant use the canonical version.
-  Replacements.push_back(std::make_pair(GV, I->second));
-} else if (I->second->hasInternalLinkage()) {
+  Replacements.push_back(std::make_pair(GV, Slot));
+} else if (GV->hasInternalLinkage()) {
   // Make all uses of the duplicate constant use the canonical version.
-  Replacements.push_back(std::make_pair(I->second, GV));
-  I->second = GV;
+  Replacements.push_back(std::make_pair(Slot, GV));
+  Slot = GV;
 }
   }
 



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits