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"
32 #include "llvm/Support/Compiler.h"
35 STATISTIC(NumFastStores
, "Number of stores deleted");
36 STATISTIC(NumFastOther
, "Number of other instrs removed");
39 struct VISIBILITY_HIDDEN DSE
: public FunctionPass
{
42 static char ID
; // Pass identification, replacement for typeid
43 DSE() : FunctionPass(&ID
) {}
45 virtual bool runOnFunction(Function
&F
) {
47 for (Function::iterator I
= F
.begin(), E
= F
.end(); I
!= E
; ++I
)
48 Changed
|= runOnBasicBlock(*I
);
52 bool runOnBasicBlock(BasicBlock
&BB
);
53 bool handleFreeWithNonTrivialDependency(FreeInst
*F
, MemDepResult Dep
);
54 bool handleEndBlock(BasicBlock
&BB
);
55 bool RemoveUndeadPointers(Value
* Ptr
, uint64_t killPointerSize
,
56 BasicBlock::iterator
& BBI
,
57 SmallPtrSet
<Value
*, 64>& deadPointers
);
58 void DeleteDeadInstruction(Instruction
*I
,
59 SmallPtrSet
<Value
*, 64> *deadPointers
= 0);
62 // getAnalysisUsage - We require post dominance frontiers (aka Control
64 virtual void getAnalysisUsage(AnalysisUsage
&AU
) const {
66 AU
.addRequired
<DominatorTree
>();
67 AU
.addRequired
<AliasAnalysis
>();
68 AU
.addRequired
<MemoryDependenceAnalysis
>();
69 AU
.addPreserved
<DominatorTree
>();
70 AU
.addPreserved
<AliasAnalysis
>();
71 AU
.addPreserved
<MemoryDependenceAnalysis
>();
77 static RegisterPass
<DSE
> X("dse", "Dead Store Elimination");
79 FunctionPass
*llvm::createDeadStoreEliminationPass() { return new DSE(); }
81 bool DSE::runOnBasicBlock(BasicBlock
&BB
) {
82 MemoryDependenceAnalysis
& MD
= getAnalysis
<MemoryDependenceAnalysis
>();
83 TD
= getAnalysisIfAvailable
<TargetData
>();
85 bool MadeChange
= false;
87 // Do a top-down walk on the BB
88 for (BasicBlock::iterator BBI
= BB
.begin(), BBE
= BB
.end(); BBI
!= BBE
; ) {
89 Instruction
*Inst
= BBI
++;
91 // If we find a store or a free, get its memory dependence.
92 if (!isa
<StoreInst
>(Inst
) && !isa
<FreeInst
>(Inst
))
95 // Don't molest volatile stores or do queries that will return "clobber".
96 if (StoreInst
*SI
= dyn_cast
<StoreInst
>(Inst
))
100 MemDepResult InstDep
= MD
.getDependency(Inst
);
102 // Ignore non-local stores.
103 // FIXME: cross-block DSE would be fun. :)
104 if (InstDep
.isNonLocal()) continue;
106 // Handle frees whose dependencies are non-trivial.
107 if (FreeInst
*FI
= dyn_cast
<FreeInst
>(Inst
)) {
108 MadeChange
|= handleFreeWithNonTrivialDependency(FI
, InstDep
);
112 StoreInst
*SI
= cast
<StoreInst
>(Inst
);
114 // If not a definite must-alias dependency, ignore it.
115 if (!InstDep
.isDef())
118 // If this is a store-store dependence, then the previous store is dead so
119 // long as this store is at least as big as it.
120 if (StoreInst
*DepStore
= dyn_cast
<StoreInst
>(InstDep
.getInst()))
122 TD
->getTypeStoreSize(DepStore
->getOperand(0)->getType()) <=
123 TD
->getTypeStoreSize(SI
->getOperand(0)->getType())) {
124 // Delete the store and now-dead instructions that feed it.
125 DeleteDeadInstruction(DepStore
);
129 if (BBI
!= BB
.begin())
134 // If we're storing the same value back to a pointer that we just
135 // loaded from, then the store can be removed.
136 if (LoadInst
*DepLoad
= dyn_cast
<LoadInst
>(InstDep
.getInst())) {
137 if (SI
->getPointerOperand() == DepLoad
->getPointerOperand() &&
138 SI
->getOperand(0) == DepLoad
) {
139 DeleteDeadInstruction(SI
);
140 if (BBI
!= BB
.begin())
149 // If this block ends in a return, unwind, or unreachable, all allocas are
150 // dead at its end, which means stores to them are also dead.
151 if (BB
.getTerminator()->getNumSuccessors() == 0)
152 MadeChange
|= handleEndBlock(BB
);
157 /// handleFreeWithNonTrivialDependency - Handle frees of entire structures whose
158 /// dependency is a store to a field of that structure.
159 bool DSE::handleFreeWithNonTrivialDependency(FreeInst
*F
, MemDepResult Dep
) {
160 AliasAnalysis
&AA
= getAnalysis
<AliasAnalysis
>();
162 StoreInst
*Dependency
= dyn_cast_or_null
<StoreInst
>(Dep
.getInst());
163 if (!Dependency
|| Dependency
->isVolatile())
166 Value
*DepPointer
= Dependency
->getPointerOperand()->getUnderlyingObject();
168 // Check for aliasing.
169 if (AA
.alias(F
->getPointerOperand(), 1, DepPointer
, 1) !=
170 AliasAnalysis::MustAlias
)
173 // DCE instructions only used to calculate that store
174 DeleteDeadInstruction(Dependency
);
179 /// handleEndBlock - Remove dead stores to stack-allocated locations in the
180 /// function end block. Ex:
183 /// store i32 1, i32* %A
185 bool DSE::handleEndBlock(BasicBlock
&BB
) {
186 AliasAnalysis
&AA
= getAnalysis
<AliasAnalysis
>();
188 bool MadeChange
= false;
190 // Pointers alloca'd in this function are dead in the end block
191 SmallPtrSet
<Value
*, 64> deadPointers
;
193 // Find all of the alloca'd pointers in the entry block.
194 BasicBlock
*Entry
= BB
.getParent()->begin();
195 for (BasicBlock::iterator I
= Entry
->begin(), E
= Entry
->end(); I
!= E
; ++I
)
196 if (AllocaInst
*AI
= dyn_cast
<AllocaInst
>(I
))
197 deadPointers
.insert(AI
);
199 // Treat byval arguments the same, stores to them are dead at the end of the
201 for (Function::arg_iterator AI
= BB
.getParent()->arg_begin(),
202 AE
= BB
.getParent()->arg_end(); AI
!= AE
; ++AI
)
203 if (AI
->hasByValAttr())
204 deadPointers
.insert(AI
);
206 // Scan the basic block backwards
207 for (BasicBlock::iterator BBI
= BB
.end(); BBI
!= BB
.begin(); ){
210 // If we find a store whose pointer is dead.
211 if (StoreInst
* S
= dyn_cast
<StoreInst
>(BBI
)) {
212 if (!S
->isVolatile()) {
213 // See through pointer-to-pointer bitcasts
214 Value
* pointerOperand
= S
->getPointerOperand()->getUnderlyingObject();
216 // Alloca'd pointers or byval arguments (which are functionally like
217 // alloca's) are valid candidates for removal.
218 if (deadPointers
.count(pointerOperand
)) {
219 // DCE instructions only used to calculate that store.
221 DeleteDeadInstruction(S
, &deadPointers
);
230 // We can also remove memcpy's to local variables at the end of a function.
231 if (MemCpyInst
*M
= dyn_cast
<MemCpyInst
>(BBI
)) {
232 Value
*dest
= M
->getDest()->getUnderlyingObject();
234 if (deadPointers
.count(dest
)) {
236 DeleteDeadInstruction(M
, &deadPointers
);
242 // Because a memcpy is also a load, we can't skip it if we didn't remove
246 Value
* killPointer
= 0;
247 uint64_t killPointerSize
= ~0UL;
249 // If we encounter a use of the pointer, it is no longer considered dead
250 if (LoadInst
*L
= dyn_cast
<LoadInst
>(BBI
)) {
251 // However, if this load is unused and not volatile, we can go ahead and
252 // remove it, and not have to worry about it making our pointer undead!
253 if (L
->use_empty() && !L
->isVolatile()) {
255 DeleteDeadInstruction(L
, &deadPointers
);
261 killPointer
= L
->getPointerOperand();
262 } else if (VAArgInst
* V
= dyn_cast
<VAArgInst
>(BBI
)) {
263 killPointer
= V
->getOperand(0);
264 } else if (isa
<MemCpyInst
>(BBI
) &&
265 isa
<ConstantInt
>(cast
<MemCpyInst
>(BBI
)->getLength())) {
266 killPointer
= cast
<MemCpyInst
>(BBI
)->getSource();
267 killPointerSize
= cast
<ConstantInt
>(
268 cast
<MemCpyInst
>(BBI
)->getLength())->getZExtValue();
269 } else if (AllocaInst
* A
= dyn_cast
<AllocaInst
>(BBI
)) {
270 deadPointers
.erase(A
);
272 // Dead alloca's can be DCE'd when we reach them
273 if (A
->use_empty()) {
275 DeleteDeadInstruction(A
, &deadPointers
);
281 } else if (CallSite::get(BBI
).getInstruction() != 0) {
282 // If this call does not access memory, it can't
283 // be undeadifying any of our pointers.
284 CallSite CS
= CallSite::get(BBI
);
285 if (AA
.doesNotAccessMemory(CS
))
291 // Remove any pointers made undead by the call from the dead set
292 std::vector
<Value
*> dead
;
293 for (SmallPtrSet
<Value
*, 64>::iterator I
= deadPointers
.begin(),
294 E
= deadPointers
.end(); I
!= E
; ++I
) {
295 // HACK: if we detect that our AA is imprecise, it's not
296 // worth it to scan the rest of the deadPointers set. Just
297 // assume that the AA will return ModRef for everything, and
298 // go ahead and bail.
299 if (modRef
>= 16 && other
== 0) {
300 deadPointers
.clear();
304 // Get size information for the alloca
305 unsigned pointerSize
= ~0U;
307 if (AllocaInst
* A
= dyn_cast
<AllocaInst
>(*I
)) {
308 if (ConstantInt
* C
= dyn_cast
<ConstantInt
>(A
->getArraySize()))
309 pointerSize
= C
->getZExtValue() *
310 TD
->getTypeAllocSize(A
->getAllocatedType());
312 const PointerType
* PT
= cast
<PointerType
>(
313 cast
<Argument
>(*I
)->getType());
314 pointerSize
= TD
->getTypeAllocSize(PT
->getElementType());
318 // See if the call site touches it
319 AliasAnalysis::ModRefResult A
= AA
.getModRefInfo(CS
, *I
, pointerSize
);
321 if (A
== AliasAnalysis::ModRef
)
326 if (A
== AliasAnalysis::ModRef
|| A
== AliasAnalysis::Ref
)
330 for (std::vector
<Value
*>::iterator I
= dead
.begin(), E
= dead
.end();
332 deadPointers
.erase(*I
);
335 } else if (isInstructionTriviallyDead(BBI
)) {
336 // For any non-memory-affecting non-terminators, DCE them as we reach them
337 Instruction
*Inst
= BBI
;
339 DeleteDeadInstruction(Inst
, &deadPointers
);
348 killPointer
= killPointer
->getUnderlyingObject();
350 // Deal with undead pointers
351 MadeChange
|= RemoveUndeadPointers(killPointer
, killPointerSize
, BBI
,
358 /// RemoveUndeadPointers - check for uses of a pointer that make it
359 /// undead when scanning for dead stores to alloca's.
360 bool DSE::RemoveUndeadPointers(Value
* killPointer
, uint64_t killPointerSize
,
361 BasicBlock::iterator
&BBI
,
362 SmallPtrSet
<Value
*, 64>& deadPointers
) {
363 AliasAnalysis
&AA
= getAnalysis
<AliasAnalysis
>();
365 // If the kill pointer can be easily reduced to an alloca,
366 // don't bother doing extraneous AA queries.
367 if (deadPointers
.count(killPointer
)) {
368 deadPointers
.erase(killPointer
);
372 // A global can't be in the dead pointer set.
373 if (isa
<GlobalValue
>(killPointer
))
376 bool MadeChange
= false;
378 SmallVector
<Value
*, 16> undead
;
380 for (SmallPtrSet
<Value
*, 64>::iterator I
= deadPointers
.begin(),
381 E
= deadPointers
.end(); I
!= E
; ++I
) {
382 // Get size information for the alloca.
383 unsigned pointerSize
= ~0U;
385 if (AllocaInst
* A
= dyn_cast
<AllocaInst
>(*I
)) {
386 if (ConstantInt
* C
= dyn_cast
<ConstantInt
>(A
->getArraySize()))
387 pointerSize
= C
->getZExtValue() *
388 TD
->getTypeAllocSize(A
->getAllocatedType());
390 const PointerType
* PT
= cast
<PointerType
>(cast
<Argument
>(*I
)->getType());
391 pointerSize
= TD
->getTypeAllocSize(PT
->getElementType());
395 // See if this pointer could alias it
396 AliasAnalysis::AliasResult A
= AA
.alias(*I
, pointerSize
,
397 killPointer
, killPointerSize
);
399 // If it must-alias and a store, we can delete it
400 if (isa
<StoreInst
>(BBI
) && A
== AliasAnalysis::MustAlias
) {
401 StoreInst
* S
= cast
<StoreInst
>(BBI
);
405 DeleteDeadInstruction(S
, &deadPointers
);
411 // Otherwise, it is undead
412 } else if (A
!= AliasAnalysis::NoAlias
)
413 undead
.push_back(*I
);
416 for (SmallVector
<Value
*, 16>::iterator I
= undead
.begin(), E
= undead
.end();
418 deadPointers
.erase(*I
);
423 /// DeleteDeadInstruction - Delete this instruction. Before we do, go through
424 /// and zero out all the operands of this instruction. If any of them become
425 /// dead, delete them and the computation tree that feeds them.
427 /// If ValueSet is non-null, remove any deleted instructions from it as well.
429 void DSE::DeleteDeadInstruction(Instruction
*I
,
430 SmallPtrSet
<Value
*, 64> *ValueSet
) {
431 SmallVector
<Instruction
*, 32> NowDeadInsts
;
433 NowDeadInsts
.push_back(I
);
436 // Before we touch this instruction, remove it from memdep!
437 MemoryDependenceAnalysis
&MDA
= getAnalysis
<MemoryDependenceAnalysis
>();
438 while (!NowDeadInsts
.empty()) {
439 Instruction
*DeadInst
= NowDeadInsts
.back();
440 NowDeadInsts
.pop_back();
444 // This instruction is dead, zap it, in stages. Start by removing it from
445 // MemDep, which needs to know the operands and needs it to be in the
447 MDA
.removeInstruction(DeadInst
);
449 for (unsigned op
= 0, e
= DeadInst
->getNumOperands(); op
!= e
; ++op
) {
450 Value
*Op
= DeadInst
->getOperand(op
);
451 DeadInst
->setOperand(op
, 0);
453 // If this operand just became dead, add it to the NowDeadInsts list.
454 if (!Op
->use_empty()) continue;
456 if (Instruction
*OpI
= dyn_cast
<Instruction
>(Op
))
457 if (isInstructionTriviallyDead(OpI
))
458 NowDeadInsts
.push_back(OpI
);
461 DeadInst
->eraseFromParent();
463 if (ValueSet
) ValueSet
->erase(DeadInst
);