1 //===- DeadStoreElimination.cpp - Fast Dead Store Elimination -------------===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This file implements a trivial dead store elimination that only considers
11 // basic-block local redundant stores.
13 // FIXME: This should eventually be extended to be a post-dominator tree
14 // traversal. Doing so would be pretty trivial.
16 //===----------------------------------------------------------------------===//
18 #define DEBUG_TYPE "dse"
19 #include "llvm/Transforms/Scalar.h"
20 #include "llvm/Constants.h"
21 #include "llvm/Function.h"
22 #include "llvm/Instructions.h"
23 #include "llvm/IntrinsicInst.h"
24 #include "llvm/Pass.h"
25 #include "llvm/ADT/SmallPtrSet.h"
26 #include "llvm/ADT/Statistic.h"
27 #include "llvm/Analysis/AliasAnalysis.h"
28 #include "llvm/Analysis/Dominators.h"
29 #include "llvm/Analysis/MemoryDependenceAnalysis.h"
30 #include "llvm/Target/TargetData.h"
31 #include "llvm/Transforms/Utils/Local.h"
34 STATISTIC(NumFastStores
, "Number of stores deleted");
35 STATISTIC(NumFastOther
, "Number of other instrs removed");
38 struct DSE
: public FunctionPass
{
41 static char ID
; // Pass identification, replacement for typeid
42 DSE() : FunctionPass(&ID
) {}
44 virtual bool runOnFunction(Function
&F
) {
46 for (Function::iterator I
= F
.begin(), E
= F
.end(); I
!= E
; ++I
)
47 Changed
|= runOnBasicBlock(*I
);
51 bool runOnBasicBlock(BasicBlock
&BB
);
52 bool handleFreeWithNonTrivialDependency(FreeInst
*F
, MemDepResult Dep
);
53 bool handleEndBlock(BasicBlock
&BB
);
54 bool RemoveUndeadPointers(Value
* Ptr
, uint64_t killPointerSize
,
55 BasicBlock::iterator
& BBI
,
56 SmallPtrSet
<Value
*, 64>& deadPointers
);
57 void DeleteDeadInstruction(Instruction
*I
,
58 SmallPtrSet
<Value
*, 64> *deadPointers
= 0);
61 // getAnalysisUsage - We require post dominance frontiers (aka Control
63 virtual void getAnalysisUsage(AnalysisUsage
&AU
) const {
65 AU
.addRequired
<DominatorTree
>();
66 AU
.addRequired
<AliasAnalysis
>();
67 AU
.addRequired
<MemoryDependenceAnalysis
>();
68 AU
.addPreserved
<DominatorTree
>();
69 AU
.addPreserved
<AliasAnalysis
>();
70 AU
.addPreserved
<MemoryDependenceAnalysis
>();
76 static RegisterPass
<DSE
> X("dse", "Dead Store Elimination");
78 FunctionPass
*llvm::createDeadStoreEliminationPass() { return new DSE(); }
80 bool DSE::runOnBasicBlock(BasicBlock
&BB
) {
81 MemoryDependenceAnalysis
& MD
= getAnalysis
<MemoryDependenceAnalysis
>();
82 TD
= getAnalysisIfAvailable
<TargetData
>();
84 bool MadeChange
= false;
86 // Do a top-down walk on the BB.
87 for (BasicBlock::iterator BBI
= BB
.begin(), BBE
= BB
.end(); BBI
!= BBE
; ) {
88 Instruction
*Inst
= BBI
++;
90 // If we find a store or a free, get its memory dependence.
91 if (!isa
<StoreInst
>(Inst
) && !isa
<FreeInst
>(Inst
))
94 // Don't molest volatile stores or do queries that will return "clobber".
95 if (StoreInst
*SI
= dyn_cast
<StoreInst
>(Inst
))
99 MemDepResult InstDep
= MD
.getDependency(Inst
);
101 // Ignore non-local stores.
102 // FIXME: cross-block DSE would be fun. :)
103 if (InstDep
.isNonLocal()) continue;
105 // Handle frees whose dependencies are non-trivial.
106 if (FreeInst
*FI
= dyn_cast
<FreeInst
>(Inst
)) {
107 MadeChange
|= handleFreeWithNonTrivialDependency(FI
, InstDep
);
111 StoreInst
*SI
= cast
<StoreInst
>(Inst
);
113 // If not a definite must-alias dependency, ignore it.
114 if (!InstDep
.isDef())
117 // If this is a store-store dependence, then the previous store is dead so
118 // long as this store is at least as big as it.
119 if (StoreInst
*DepStore
= dyn_cast
<StoreInst
>(InstDep
.getInst()))
121 TD
->getTypeStoreSize(DepStore
->getOperand(0)->getType()) <=
122 TD
->getTypeStoreSize(SI
->getOperand(0)->getType())) {
123 // Delete the store and now-dead instructions that feed it.
124 DeleteDeadInstruction(DepStore
);
128 // DeleteDeadInstruction can delete the current instruction in loop
131 if (BBI
!= BB
.begin())
136 // If we're storing the same value back to a pointer that we just
137 // loaded from, then the store can be removed.
138 if (LoadInst
*DepLoad
= dyn_cast
<LoadInst
>(InstDep
.getInst())) {
139 if (SI
->getPointerOperand() == DepLoad
->getPointerOperand() &&
140 SI
->getOperand(0) == DepLoad
) {
141 // DeleteDeadInstruction can delete the current instruction. Save BBI
142 // in case we need it.
143 WeakVH
NextInst(BBI
);
145 DeleteDeadInstruction(SI
);
147 if (NextInst
== 0) // Next instruction deleted.
149 else if (BBI
!= BB
.begin()) // Revisit this instruction if possible.
158 // If this block ends in a return, unwind, or unreachable, all allocas are
159 // dead at its end, which means stores to them are also dead.
160 if (BB
.getTerminator()->getNumSuccessors() == 0)
161 MadeChange
|= handleEndBlock(BB
);
166 /// handleFreeWithNonTrivialDependency - Handle frees of entire structures whose
167 /// dependency is a store to a field of that structure.
168 bool DSE::handleFreeWithNonTrivialDependency(FreeInst
*F
, MemDepResult Dep
) {
169 AliasAnalysis
&AA
= getAnalysis
<AliasAnalysis
>();
171 StoreInst
*Dependency
= dyn_cast_or_null
<StoreInst
>(Dep
.getInst());
172 if (!Dependency
|| Dependency
->isVolatile())
175 Value
*DepPointer
= Dependency
->getPointerOperand()->getUnderlyingObject();
177 // Check for aliasing.
178 if (AA
.alias(F
->getPointerOperand(), 1, DepPointer
, 1) !=
179 AliasAnalysis::MustAlias
)
182 // DCE instructions only used to calculate that store
183 DeleteDeadInstruction(Dependency
);
188 /// handleEndBlock - Remove dead stores to stack-allocated locations in the
189 /// function end block. Ex:
192 /// store i32 1, i32* %A
194 bool DSE::handleEndBlock(BasicBlock
&BB
) {
195 AliasAnalysis
&AA
= getAnalysis
<AliasAnalysis
>();
197 bool MadeChange
= false;
199 // Pointers alloca'd in this function are dead in the end block
200 SmallPtrSet
<Value
*, 64> deadPointers
;
202 // Find all of the alloca'd pointers in the entry block.
203 BasicBlock
*Entry
= BB
.getParent()->begin();
204 for (BasicBlock::iterator I
= Entry
->begin(), E
= Entry
->end(); I
!= E
; ++I
)
205 if (AllocaInst
*AI
= dyn_cast
<AllocaInst
>(I
))
206 deadPointers
.insert(AI
);
208 // Treat byval arguments the same, stores to them are dead at the end of the
210 for (Function::arg_iterator AI
= BB
.getParent()->arg_begin(),
211 AE
= BB
.getParent()->arg_end(); AI
!= AE
; ++AI
)
212 if (AI
->hasByValAttr())
213 deadPointers
.insert(AI
);
215 // Scan the basic block backwards
216 for (BasicBlock::iterator BBI
= BB
.end(); BBI
!= BB
.begin(); ){
219 // If we find a store whose pointer is dead.
220 if (StoreInst
* S
= dyn_cast
<StoreInst
>(BBI
)) {
221 if (!S
->isVolatile()) {
222 // See through pointer-to-pointer bitcasts
223 Value
* pointerOperand
= S
->getPointerOperand()->getUnderlyingObject();
225 // Alloca'd pointers or byval arguments (which are functionally like
226 // alloca's) are valid candidates for removal.
227 if (deadPointers
.count(pointerOperand
)) {
228 // DCE instructions only used to calculate that store.
230 DeleteDeadInstruction(S
, &deadPointers
);
239 // We can also remove memcpy's to local variables at the end of a function.
240 if (MemCpyInst
*M
= dyn_cast
<MemCpyInst
>(BBI
)) {
241 Value
*dest
= M
->getDest()->getUnderlyingObject();
243 if (deadPointers
.count(dest
)) {
245 DeleteDeadInstruction(M
, &deadPointers
);
251 // Because a memcpy is also a load, we can't skip it if we didn't remove
255 Value
* killPointer
= 0;
256 uint64_t killPointerSize
= ~0UL;
258 // If we encounter a use of the pointer, it is no longer considered dead
259 if (LoadInst
*L
= dyn_cast
<LoadInst
>(BBI
)) {
260 // However, if this load is unused and not volatile, we can go ahead and
261 // remove it, and not have to worry about it making our pointer undead!
262 if (L
->use_empty() && !L
->isVolatile()) {
264 DeleteDeadInstruction(L
, &deadPointers
);
270 killPointer
= L
->getPointerOperand();
271 } else if (VAArgInst
* V
= dyn_cast
<VAArgInst
>(BBI
)) {
272 killPointer
= V
->getOperand(0);
273 } else if (isa
<MemCpyInst
>(BBI
) &&
274 isa
<ConstantInt
>(cast
<MemCpyInst
>(BBI
)->getLength())) {
275 killPointer
= cast
<MemCpyInst
>(BBI
)->getSource();
276 killPointerSize
= cast
<ConstantInt
>(
277 cast
<MemCpyInst
>(BBI
)->getLength())->getZExtValue();
278 } else if (AllocaInst
* A
= dyn_cast
<AllocaInst
>(BBI
)) {
279 deadPointers
.erase(A
);
281 // Dead alloca's can be DCE'd when we reach them
282 if (A
->use_empty()) {
284 DeleteDeadInstruction(A
, &deadPointers
);
290 } else if (CallSite::get(BBI
).getInstruction() != 0) {
291 // If this call does not access memory, it can't
292 // be undeadifying any of our pointers.
293 CallSite CS
= CallSite::get(BBI
);
294 if (AA
.doesNotAccessMemory(CS
))
300 // Remove any pointers made undead by the call from the dead set
301 std::vector
<Value
*> dead
;
302 for (SmallPtrSet
<Value
*, 64>::iterator I
= deadPointers
.begin(),
303 E
= deadPointers
.end(); I
!= E
; ++I
) {
304 // HACK: if we detect that our AA is imprecise, it's not
305 // worth it to scan the rest of the deadPointers set. Just
306 // assume that the AA will return ModRef for everything, and
307 // go ahead and bail.
308 if (modRef
>= 16 && other
== 0) {
309 deadPointers
.clear();
313 // Get size information for the alloca
314 unsigned pointerSize
= ~0U;
316 if (AllocaInst
* A
= dyn_cast
<AllocaInst
>(*I
)) {
317 if (ConstantInt
* C
= dyn_cast
<ConstantInt
>(A
->getArraySize()))
318 pointerSize
= C
->getZExtValue() *
319 TD
->getTypeAllocSize(A
->getAllocatedType());
321 const PointerType
* PT
= cast
<PointerType
>(
322 cast
<Argument
>(*I
)->getType());
323 pointerSize
= TD
->getTypeAllocSize(PT
->getElementType());
327 // See if the call site touches it
328 AliasAnalysis::ModRefResult A
= AA
.getModRefInfo(CS
, *I
, pointerSize
);
330 if (A
== AliasAnalysis::ModRef
)
335 if (A
== AliasAnalysis::ModRef
|| A
== AliasAnalysis::Ref
)
339 for (std::vector
<Value
*>::iterator I
= dead
.begin(), E
= dead
.end();
341 deadPointers
.erase(*I
);
344 } else if (isInstructionTriviallyDead(BBI
)) {
345 // For any non-memory-affecting non-terminators, DCE them as we reach them
346 Instruction
*Inst
= BBI
;
348 DeleteDeadInstruction(Inst
, &deadPointers
);
357 killPointer
= killPointer
->getUnderlyingObject();
359 // Deal with undead pointers
360 MadeChange
|= RemoveUndeadPointers(killPointer
, killPointerSize
, BBI
,
367 /// RemoveUndeadPointers - check for uses of a pointer that make it
368 /// undead when scanning for dead stores to alloca's.
369 bool DSE::RemoveUndeadPointers(Value
* killPointer
, uint64_t killPointerSize
,
370 BasicBlock::iterator
&BBI
,
371 SmallPtrSet
<Value
*, 64>& deadPointers
) {
372 AliasAnalysis
&AA
= getAnalysis
<AliasAnalysis
>();
374 // If the kill pointer can be easily reduced to an alloca,
375 // don't bother doing extraneous AA queries.
376 if (deadPointers
.count(killPointer
)) {
377 deadPointers
.erase(killPointer
);
381 // A global can't be in the dead pointer set.
382 if (isa
<GlobalValue
>(killPointer
))
385 bool MadeChange
= false;
387 SmallVector
<Value
*, 16> undead
;
389 for (SmallPtrSet
<Value
*, 64>::iterator I
= deadPointers
.begin(),
390 E
= deadPointers
.end(); I
!= E
; ++I
) {
391 // Get size information for the alloca.
392 unsigned pointerSize
= ~0U;
394 if (AllocaInst
* A
= dyn_cast
<AllocaInst
>(*I
)) {
395 if (ConstantInt
* C
= dyn_cast
<ConstantInt
>(A
->getArraySize()))
396 pointerSize
= C
->getZExtValue() *
397 TD
->getTypeAllocSize(A
->getAllocatedType());
399 const PointerType
* PT
= cast
<PointerType
>(cast
<Argument
>(*I
)->getType());
400 pointerSize
= TD
->getTypeAllocSize(PT
->getElementType());
404 // See if this pointer could alias it
405 AliasAnalysis::AliasResult A
= AA
.alias(*I
, pointerSize
,
406 killPointer
, killPointerSize
);
408 // If it must-alias and a store, we can delete it
409 if (isa
<StoreInst
>(BBI
) && A
== AliasAnalysis::MustAlias
) {
410 StoreInst
* S
= cast
<StoreInst
>(BBI
);
414 DeleteDeadInstruction(S
, &deadPointers
);
420 // Otherwise, it is undead
421 } else if (A
!= AliasAnalysis::NoAlias
)
422 undead
.push_back(*I
);
425 for (SmallVector
<Value
*, 16>::iterator I
= undead
.begin(), E
= undead
.end();
427 deadPointers
.erase(*I
);
432 /// DeleteDeadInstruction - Delete this instruction. Before we do, go through
433 /// and zero out all the operands of this instruction. If any of them become
434 /// dead, delete them and the computation tree that feeds them.
436 /// If ValueSet is non-null, remove any deleted instructions from it as well.
438 void DSE::DeleteDeadInstruction(Instruction
*I
,
439 SmallPtrSet
<Value
*, 64> *ValueSet
) {
440 SmallVector
<Instruction
*, 32> NowDeadInsts
;
442 NowDeadInsts
.push_back(I
);
445 // Before we touch this instruction, remove it from memdep!
446 MemoryDependenceAnalysis
&MDA
= getAnalysis
<MemoryDependenceAnalysis
>();
447 while (!NowDeadInsts
.empty()) {
448 Instruction
*DeadInst
= NowDeadInsts
.back();
449 NowDeadInsts
.pop_back();
453 // This instruction is dead, zap it, in stages. Start by removing it from
454 // MemDep, which needs to know the operands and needs it to be in the
456 MDA
.removeInstruction(DeadInst
);
458 for (unsigned op
= 0, e
= DeadInst
->getNumOperands(); op
!= e
; ++op
) {
459 Value
*Op
= DeadInst
->getOperand(op
);
460 DeadInst
->setOperand(op
, 0);
462 // If this operand just became dead, add it to the NowDeadInsts list.
463 if (!Op
->use_empty()) continue;
465 if (Instruction
*OpI
= dyn_cast
<Instruction
>(Op
))
466 if (isInstructionTriviallyDead(OpI
))
467 NowDeadInsts
.push_back(OpI
);
470 DeadInst
->eraseFromParent();
472 if (ValueSet
) ValueSet
->erase(DeadInst
);