mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-06 20:32:19 +00:00
Fix another case where a dbg.declare meant something
had 2 uses instead of 1. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@66112 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
85435046ac
commit
a0a6637b25
@ -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.
|
||||
|
Loading…
Reference in New Issue
Block a user