summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/Scalar/BDCE.cpp
diff options
context:
space:
mode:
authorDavide Italiano <davide@freebsd.org>2016-12-07 21:47:32 +0000
committerDavide Italiano <davide@freebsd.org>2016-12-07 21:47:32 +0000
commit1ed5396304ff6c29a043bed467f375efbff83d25 (patch)
tree1e1208133139937a51509c8ec9309699abef5a1b /llvm/lib/Transforms/Scalar/BDCE.cpp
parent26d060fbf9fe5525f06f13c398ad1c564528fe57 (diff)
downloadbcm5719-llvm-1ed5396304ff6c29a043bed467f375efbff83d25.tar.gz
bcm5719-llvm-1ed5396304ff6c29a043bed467f375efbff83d25.zip
[BDCE] Skip metadata while replacing uses.
The fix committed in r288851 doesn't cover all the cases. In particular, if we have an instruction with side effects which has a no non-dbg use not depending on the bits, we still perform RAUW destroying the dbg.value's first argument. Prevent metadata from being replaced here to avoid the issue. Differential Revision: https://reviews.llvm.org/D27534 llvm-svn: 288987
Diffstat (limited to 'llvm/lib/Transforms/Scalar/BDCE.cpp')
-rw-r--r--llvm/lib/Transforms/Scalar/BDCE.cpp5
1 files changed, 3 insertions, 2 deletions
diff --git a/llvm/lib/Transforms/Scalar/BDCE.cpp b/llvm/lib/Transforms/Scalar/BDCE.cpp
index 1baade43e85..251b3870776 100644
--- a/llvm/lib/Transforms/Scalar/BDCE.cpp
+++ b/llvm/lib/Transforms/Scalar/BDCE.cpp
@@ -40,7 +40,8 @@ static bool bitTrackingDCE(Function &F, DemandedBits &DB) {
bool Changed = false;
for (Instruction &I : instructions(F)) {
// If the instruction has side effects and no non-dbg uses,
- // BDCE should skip it.
+ // skip it. This way we avoid computing known bits on an instruction
+ // that will not help us.
if (I.mayHaveSideEffects() && I.use_empty())
continue;
@@ -55,7 +56,7 @@ static bool bitTrackingDCE(Function &F, DemandedBits &DB) {
// undef, poison, etc.
Value *Zero = ConstantInt::get(I.getType(), 0);
++NumSimplified;
- I.replaceAllUsesWith(Zero);
+ I.replaceNonMetadataUsesWith(Zero);
Changed = true;
}
if (!DB.isInstructionDead(&I))
OpenPOWER on IntegriCloud