diff options
| author | Dan Gohman <gohman@apple.com> | 2010-12-15 23:53:55 +0000 |
|---|---|---|
| committer | Dan Gohman <gohman@apple.com> | 2010-12-15 23:53:55 +0000 |
| commit | 4467aa529440c8aeb0b74102d9cc5a53553d66a4 (patch) | |
| tree | f1555c05510236915dadf05229a9d6c2365cc1df /llvm/lib/Transforms | |
| parent | bfef309d11f186f459e64d99767f07d70da5fb4c (diff) | |
| download | bcm5719-llvm-4467aa529440c8aeb0b74102d9cc5a53553d66a4.tar.gz bcm5719-llvm-4467aa529440c8aeb0b74102d9cc5a53553d66a4.zip | |
Preserve TBAA tags when doing load PRE.
llvm-svn: 121921
Diffstat (limited to 'llvm/lib/Transforms')
| -rw-r--r-- | llvm/lib/Transforms/Scalar/GVN.cpp | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/llvm/lib/Transforms/Scalar/GVN.cpp b/llvm/lib/Transforms/Scalar/GVN.cpp index d8629e68b8d..5ac19dc9ebf 100644 --- a/llvm/lib/Transforms/Scalar/GVN.cpp +++ b/llvm/lib/Transforms/Scalar/GVN.cpp @@ -22,6 +22,7 @@ #include "llvm/GlobalVariable.h" #include "llvm/Function.h" #include "llvm/IntrinsicInst.h" +#include "llvm/LLVMContext.h" #include "llvm/Operator.h" #include "llvm/Analysis/AliasAnalysis.h" #include "llvm/Analysis/ConstantFolding.h" @@ -1659,9 +1660,13 @@ bool GVN::processNonLocalLoad(LoadInst *LI, BasicBlock *UnavailablePred = I->first; Value *LoadPtr = I->second; - Value *NewLoad = new LoadInst(LoadPtr, LI->getName()+".pre", false, - LI->getAlignment(), - UnavailablePred->getTerminator()); + Instruction *NewLoad = new LoadInst(LoadPtr, LI->getName()+".pre", false, + LI->getAlignment(), + UnavailablePred->getTerminator()); + + // Transfer the old load's TBAA tag to the new load. + if (MDNode *Tag = LI->getMetadata(LLVMContext::MD_tbaa)) + NewLoad->setMetadata(LLVMContext::MD_tbaa, Tag); // Add the newly created load. ValuesPerBlock.push_back(AvailableValueInBlock::get(UnavailablePred, |

