mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-08 21:32:39 +00:00
Before promoting a malloc type, remove dead uses. This makes instcombine
more effective at promoting these allocations, catching them earlier in the compile process. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@23959 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
b3f8397a3d
commit
b53c2382a9
@ -3769,6 +3769,26 @@ Instruction *InstCombiner::PromoteCastOfAllocation(CastInst &CI,
|
||||
const PointerType *PTy = dyn_cast<PointerType>(CI.getType());
|
||||
if (AI.isArrayAllocation() || !PTy) return 0;
|
||||
|
||||
// Remove any uses of AI that are dead.
|
||||
assert(!CI.use_empty() && "Dead instructions should be removed earlier!");
|
||||
std::vector<Instruction*> DeadUsers;
|
||||
for (Value::use_iterator UI = AI.use_begin(), E = AI.use_end(); UI != E; ) {
|
||||
Instruction *User = cast<Instruction>(*UI++);
|
||||
if (isInstructionTriviallyDead(User)) {
|
||||
while (UI != E && *UI == User)
|
||||
++UI; // If this instruction uses AI more than once, don't break UI.
|
||||
|
||||
// Add operands to the worklist.
|
||||
AddUsesToWorkList(*User);
|
||||
++NumDeadInst;
|
||||
DEBUG(std::cerr << "IC: DCE: " << *User);
|
||||
|
||||
User->eraseFromParent();
|
||||
removeFromWorkList(User);
|
||||
}
|
||||
}
|
||||
|
||||
// Finally, if the instruction now has one use, delete it.
|
||||
if (!AI.hasOneUse()) return 0;
|
||||
|
||||
// Get the type really allocated and the type casted to.
|
||||
|
Loading…
x
Reference in New Issue
Block a user