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 | f4177aa0193d9bedc4f919b9322464bf3dee83ab (patch) | |
tree | ae85e0ed2903ab892d8ea591ca56757a07bfa8e4 /lib | |
parent | 3e333637f172c30adf5c8333b592fbde17ff9f78 (diff) | |
download | external_llvm-f4177aa0193d9bedc4f919b9322464bf3dee83ab.zip external_llvm-f4177aa0193d9bedc4f919b9322464bf3dee83ab.tar.gz external_llvm-f4177aa0193d9bedc4f919b9322464bf3dee83ab.tar.bz2 |
Preserve TBAA tags when doing load PRE.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@121921 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Transforms/Scalar/GVN.cpp | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/lib/Transforms/Scalar/GVN.cpp b/lib/Transforms/Scalar/GVN.cpp index d8629e6..5ac19dc 100644 --- a/lib/Transforms/Scalar/GVN.cpp +++ b/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, |