mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-03-07 11:59:09 +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. llvm-svn: 23959
This commit is contained in:
parent
5ad6f085ab
commit
3806b84861
@ -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