summaryrefslogtreecommitdiff
path: root/lib/Transforms/Utils
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2014-01-28 16:56:46 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2014-01-28 16:56:46 +0000
commitf611ae40fdd3815367dd8244fff037f68110fae0 (patch)
tree800da7065a895621b41cb4b2d6124542bbb9bd72 /lib/Transforms/Utils
parent7e82200a05d9f8f7d37f3078a40f31ab1be5bf67 (diff)
downloadllvm-f611ae40fdd3815367dd8244fff037f68110fae0.tar.gz
llvm-f611ae40fdd3815367dd8244fff037f68110fae0.tar.bz2
llvm-f611ae40fdd3815367dd8244fff037f68110fae0.tar.xz
Fix pr14893.
When simplifycfg moves an instruction, it must drop metadata it doesn't know is still valid with the preconditions changes. In particular, it must drop the range and tbaa metadata. The patch implements this with an utility function to drop all metadata not in a white list. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200322 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms/Utils')
-rw-r--r--lib/Transforms/Utils/SimplifyCFG.cpp8
1 files changed, 8 insertions, 0 deletions
diff --git a/lib/Transforms/Utils/SimplifyCFG.cpp b/lib/Transforms/Utils/SimplifyCFG.cpp
index 0401b9a7f7..effc08edaa 100644
--- a/lib/Transforms/Utils/SimplifyCFG.cpp
+++ b/lib/Transforms/Utils/SimplifyCFG.cpp
@@ -2154,6 +2154,14 @@ bool llvm::FoldBranchToCommonDest(BranchInst *BI) {
Instruction *NewBonus = 0;
if (BonusInst) {
NewBonus = BonusInst->clone();
+
+ // If we moved a load, we cannot any longer claim any knowledge about
+ // its potential value. The previous information might have been valid
+ // only given the branch precondition.
+ // For an analogous reason, we must also drop all the metadata whose
+ // semantics we don't understand.
+ NewBonus->dropUnknownMetadata(LLVMContext::MD_dbg);
+
PredBlock->getInstList().insert(PBI, NewBonus);
NewBonus->takeName(BonusInst);
BonusInst->setName(BonusInst->getName()+".old");