diff options
| author | Rafael Espindola <rafael.espindola@gmail.com> | 2013-05-06 01:48:55 +0000 | 
|---|---|---|
| committer | Rafael Espindola <rafael.espindola@gmail.com> | 2013-05-06 01:48:55 +0000 | 
| commit | c229a4fff4f5814e761fa6153408a3d28a0c539e (patch) | |
| tree | 4922a756eb50cae63c14644f7104049095c9983b /llvm/lib/Transforms | |
| parent | d74b1606a6b5fc3913f815773e2c2955943b33cd (diff) | |
| download | bcm5719-llvm-c229a4fff4f5814e761fa6153408a3d28a0c539e.tar.gz bcm5719-llvm-c229a4fff4f5814e761fa6153408a3d28a0c539e.zip | |
Fix const merging when an alias of a const is llvm.used.
We used to disable constant merging not only if a constant is llvm.used, but
also if an alias of a constant is llvm.used. This change fixes that.
llvm-svn: 181175
Diffstat (limited to 'llvm/lib/Transforms')
| -rw-r--r-- | llvm/lib/Transforms/IPO/ConstantMerge.cpp | 10 | 
1 files changed, 6 insertions, 4 deletions
| diff --git a/llvm/lib/Transforms/IPO/ConstantMerge.cpp b/llvm/lib/Transforms/IPO/ConstantMerge.cpp index b63495b9685..a7bf18896b5 100644 --- a/llvm/lib/Transforms/IPO/ConstantMerge.cpp +++ b/llvm/lib/Transforms/IPO/ConstantMerge.cpp @@ -27,6 +27,7 @@  #include "llvm/IR/DataLayout.h"  #include "llvm/IR/DerivedTypes.h"  #include "llvm/IR/Module.h" +#include "llvm/IR/Operator.h"  #include "llvm/Pass.h"  using namespace llvm; @@ -68,10 +69,11 @@ static void FindUsedValues(GlobalVariable *LLVMUsed,    if (LLVMUsed == 0) return;    ConstantArray *Inits = cast<ConstantArray>(LLVMUsed->getInitializer()); -  for (unsigned i = 0, e = Inits->getNumOperands(); i != e; ++i) -    if (GlobalValue *GV =  -        dyn_cast<GlobalValue>(Inits->getOperand(i)->stripPointerCasts())) -      UsedValues.insert(GV); +  for (unsigned i = 0, e = Inits->getNumOperands(); i != e; ++i) { +    Value *Operand = Inits->getOperand(i)->stripPointerCastsNoFollowAliases(); +    GlobalValue *GV = cast<GlobalValue>(Operand); +    UsedValues.insert(GV); +  }  }  // True if A is better than B. | 

