summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/Scalar/InstructionCombining.cpp
diff options
context:
space:
mode:
authorDale Johannesen <dalej@apple.com>2009-03-05 00:39:02 +0000
committerDale Johannesen <dalej@apple.com>2009-03-05 00:39:02 +0000
commitad6b47377f6aa8214a900fb66b5caa443b462aae (patch)
tree41812a60838113e04846745b7c6768d31d12bdf6 /llvm/lib/Transforms/Scalar/InstructionCombining.cpp
parent85dfd7443964787521c97fff425fcfbc165f14e9 (diff)
downloadbcm5719-llvm-ad6b47377f6aa8214a900fb66b5caa443b462aae.tar.gz
bcm5719-llvm-ad6b47377f6aa8214a900fb66b5caa443b462aae.zip
Fix another case where a dbg.declare meant something
had 2 uses instead of 1. llvm-svn: 66112
Diffstat (limited to 'llvm/lib/Transforms/Scalar/InstructionCombining.cpp')
-rw-r--r--llvm/lib/Transforms/Scalar/InstructionCombining.cpp19
1 files changed, 13 insertions, 6 deletions
diff --git a/llvm/lib/Transforms/Scalar/InstructionCombining.cpp b/llvm/lib/Transforms/Scalar/InstructionCombining.cpp
index 66ac48181e6..1679b9f4bca 100644
--- a/llvm/lib/Transforms/Scalar/InstructionCombining.cpp
+++ b/llvm/lib/Transforms/Scalar/InstructionCombining.cpp
@@ -7502,8 +7502,10 @@ Instruction *InstCombiner::PromoteCastOfAllocation(BitCastInst &CI,
// If the allocation has multiple uses, only promote it if we are strictly
// increasing the alignment of the resultant allocation. If we keep it the
- // same, we open the door to infinite loops of various kinds.
- if (!AI.hasOneUse() && CastElTyAlign == AllocElTyAlign) return 0;
+ // same, we open the door to infinite loops of various kinds. (A reference
+ // from a dbg.declare doesn't count as a use for this purpose.)
+ if (!AI.hasOneUse() && !hasOneUsePlusDeclare(&AI) &&
+ CastElTyAlign == AllocElTyAlign) return 0;
uint64_t AllocElTySize = TD->getTypePaddedSize(AllocElTy);
uint64_t CastElTySize = TD->getTypePaddedSize(CastElTy);
@@ -7551,10 +7553,15 @@ Instruction *InstCombiner::PromoteCastOfAllocation(BitCastInst &CI,
InsertNewInstBefore(New, AI);
New->takeName(&AI);
- // If the allocation has multiple uses, insert a cast and change all things
- // that used it to use the new cast. This will also hack on CI, but it will
- // die soon.
- if (!AI.hasOneUse()) {
+ // If the allocation has one real use plus a dbg.declare, just remove the
+ // declare.
+ if (DbgDeclareInst *DI = hasOneUsePlusDeclare(&AI)) {
+ EraseInstFromFunction(*DI);
+ }
+ // If the allocation has multiple real uses, insert a cast and change all
+ // things that used it to use the new cast. This will also hack on CI, but it
+ // will die soon.
+ else if (!AI.hasOneUse()) {
AddUsesToWorkList(AI);
// New is the allocation instruction, pointer typed. AI is the original
// allocation instruction, also pointer typed. Thus, cast to use is BitCast.
OpenPOWER on IntegriCloud