1 //===- SimplifyCFGPass.cpp - CFG Simplification Pass ----------------------===//
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 dead code elimination and basic block merging, along
11 // with a collection of other peephole control flow optimizations. For example:
13 // * Removes basic blocks with no predecessors.
14 // * Merges a basic block into its predecessor if there is only one and the
15 // predecessor only has one successor.
16 // * Eliminates PHI nodes for basic blocks with a single predecessor.
17 // * Eliminates a basic block that only contains an unconditional branch.
18 // * Changes invoke instructions to nounwind functions to be calls.
19 // * Change things like "if (x) if (y)" into "if (x&y)".
22 //===----------------------------------------------------------------------===//
24 #define DEBUG_TYPE "simplifycfg"
25 #include "llvm/Transforms/Scalar.h"
26 #include "llvm/Transforms/Utils/Local.h"
27 #include "llvm/Constants.h"
28 #include "llvm/Instructions.h"
29 #include "llvm/IntrinsicInst.h"
30 #include "llvm/Module.h"
31 #include "llvm/Attributes.h"
32 #include "llvm/Support/CFG.h"
33 #include "llvm/Pass.h"
34 #include "llvm/Target/TargetData.h"
35 #include "llvm/ADT/SmallVector.h"
36 #include "llvm/ADT/SmallPtrSet.h"
37 #include "llvm/ADT/Statistic.h"
40 STATISTIC(NumSimpl
, "Number of blocks simplified");
43 struct CFGSimplifyPass
: public FunctionPass
{
44 static char ID
; // Pass identification, replacement for typeid
45 CFGSimplifyPass() : FunctionPass(ID
) {
46 initializeCFGSimplifyPassPass(*PassRegistry::getPassRegistry());
49 virtual bool runOnFunction(Function
&F
);
53 char CFGSimplifyPass::ID
= 0;
54 INITIALIZE_PASS(CFGSimplifyPass
, "simplifycfg",
55 "Simplify the CFG", false, false)
57 // Public interface to the CFGSimplification pass
58 FunctionPass
*llvm::createCFGSimplificationPass() {
59 return new CFGSimplifyPass();
62 /// ChangeToUnreachable - Insert an unreachable instruction before the specified
63 /// instruction, making it and the rest of the code in the block dead.
64 static void ChangeToUnreachable(Instruction
*I
, bool UseLLVMTrap
) {
65 BasicBlock
*BB
= I
->getParent();
66 // Loop over all of the successors, removing BB's entry from any PHI
68 for (succ_iterator SI
= succ_begin(BB
), SE
= succ_end(BB
); SI
!= SE
; ++SI
)
69 (*SI
)->removePredecessor(BB
);
71 // Insert a call to llvm.trap right before this. This turns the undefined
72 // behavior into a hard fail instead of falling through into random code.
75 Intrinsic::getDeclaration(BB
->getParent()->getParent(), Intrinsic::trap
);
76 CallInst::Create(TrapFn
, "", I
);
78 new UnreachableInst(I
->getContext(), I
);
80 // All instructions after this are dead.
81 BasicBlock::iterator BBI
= I
, BBE
= BB
->end();
83 if (!BBI
->use_empty())
84 BBI
->replaceAllUsesWith(UndefValue::get(BBI
->getType()));
85 BB
->getInstList().erase(BBI
++);
89 /// ChangeToCall - Convert the specified invoke into a normal call.
90 static void ChangeToCall(InvokeInst
*II
) {
91 BasicBlock
*BB
= II
->getParent();
92 SmallVector
<Value
*, 8> Args(II
->op_begin(), II
->op_end() - 3);
93 CallInst
*NewCall
= CallInst::Create(II
->getCalledValue(), Args
.begin(),
95 NewCall
->takeName(II
);
96 NewCall
->setCallingConv(II
->getCallingConv());
97 NewCall
->setAttributes(II
->getAttributes());
98 II
->replaceAllUsesWith(NewCall
);
100 // Follow the call by a branch to the normal destination.
101 BranchInst::Create(II
->getNormalDest(), II
);
103 // Update PHI nodes in the unwind destination
104 II
->getUnwindDest()->removePredecessor(BB
);
105 BB
->getInstList().erase(II
);
108 static bool MarkAliveBlocks(BasicBlock
*BB
,
109 SmallPtrSet
<BasicBlock
*, 128> &Reachable
) {
111 SmallVector
<BasicBlock
*, 128> Worklist
;
112 Worklist
.push_back(BB
);
113 bool Changed
= false;
115 BB
= Worklist
.pop_back_val();
117 if (!Reachable
.insert(BB
))
120 // Do a quick scan of the basic block, turning any obviously unreachable
121 // instructions into LLVM unreachable insts. The instruction combining pass
122 // canonicalizes unreachable insts into stores to null or undef.
123 for (BasicBlock::iterator BBI
= BB
->begin(), E
= BB
->end(); BBI
!= E
;++BBI
){
124 if (CallInst
*CI
= dyn_cast
<CallInst
>(BBI
)) {
125 if (CI
->doesNotReturn()) {
126 // If we found a call to a no-return function, insert an unreachable
127 // instruction after it. Make sure there isn't *already* one there
130 if (!isa
<UnreachableInst
>(BBI
)) {
131 // Don't insert a call to llvm.trap right before the unreachable.
132 ChangeToUnreachable(BBI
, false);
139 // Store to undef and store to null are undefined and used to signal that
140 // they should be changed to unreachable by passes that can't modify the
142 if (StoreInst
*SI
= dyn_cast
<StoreInst
>(BBI
)) {
143 // Don't touch volatile stores.
144 if (SI
->isVolatile()) continue;
146 Value
*Ptr
= SI
->getOperand(1);
148 if (isa
<UndefValue
>(Ptr
) ||
149 (isa
<ConstantPointerNull
>(Ptr
) &&
150 SI
->getPointerAddressSpace() == 0)) {
151 ChangeToUnreachable(SI
, true);
158 // Turn invokes that call 'nounwind' functions into ordinary calls.
159 if (InvokeInst
*II
= dyn_cast
<InvokeInst
>(BB
->getTerminator()))
160 if (II
->doesNotThrow()) {
165 Changed
|= ConstantFoldTerminator(BB
);
166 for (succ_iterator SI
= succ_begin(BB
), SE
= succ_end(BB
); SI
!= SE
; ++SI
)
167 Worklist
.push_back(*SI
);
168 } while (!Worklist
.empty());
172 /// RemoveUnreachableBlocksFromFn - Remove blocks that are not reachable, even
173 /// if they are in a dead cycle. Return true if a change was made, false
175 static bool RemoveUnreachableBlocksFromFn(Function
&F
) {
176 SmallPtrSet
<BasicBlock
*, 128> Reachable
;
177 bool Changed
= MarkAliveBlocks(F
.begin(), Reachable
);
179 // If there are unreachable blocks in the CFG...
180 if (Reachable
.size() == F
.size())
183 assert(Reachable
.size() < F
.size());
184 NumSimpl
+= F
.size()-Reachable
.size();
186 // Loop over all of the basic blocks that are not reachable, dropping all of
187 // their internal references...
188 for (Function::iterator BB
= ++F
.begin(), E
= F
.end(); BB
!= E
; ++BB
) {
189 if (Reachable
.count(BB
))
192 for (succ_iterator SI
= succ_begin(BB
), SE
= succ_end(BB
); SI
!= SE
; ++SI
)
193 if (Reachable
.count(*SI
))
194 (*SI
)->removePredecessor(BB
);
195 BB
->dropAllReferences();
198 for (Function::iterator I
= ++F
.begin(); I
!= F
.end();)
199 if (!Reachable
.count(I
))
200 I
= F
.getBasicBlockList().erase(I
);
207 /// MergeEmptyReturnBlocks - If we have more than one empty (other than phi
208 /// node) return blocks, merge them together to promote recursive block merging.
209 static bool MergeEmptyReturnBlocks(Function
&F
) {
210 bool Changed
= false;
212 BasicBlock
*RetBlock
= 0;
214 // Scan all the blocks in the function, looking for empty return blocks.
215 for (Function::iterator BBI
= F
.begin(), E
= F
.end(); BBI
!= E
; ) {
216 BasicBlock
&BB
= *BBI
++;
218 // Only look at return blocks.
219 ReturnInst
*Ret
= dyn_cast
<ReturnInst
>(BB
.getTerminator());
220 if (Ret
== 0) continue;
222 // Only look at the block if it is empty or the only other thing in it is a
223 // single PHI node that is the operand to the return.
224 if (Ret
!= &BB
.front()) {
225 // Check for something else in the block.
226 BasicBlock::iterator I
= Ret
;
228 // Skip over debug info.
229 while (isa
<DbgInfoIntrinsic
>(I
) && I
!= BB
.begin())
231 if (!isa
<DbgInfoIntrinsic
>(I
) &&
232 (!isa
<PHINode
>(I
) || I
!= BB
.begin() ||
233 Ret
->getNumOperands() == 0 ||
234 Ret
->getOperand(0) != I
))
238 // If this is the first returning block, remember it and keep going.
244 // Otherwise, we found a duplicate return block. Merge the two.
247 // Case when there is no input to the return or when the returned values
248 // agree is trivial. Note that they can't agree if there are phis in the
250 if (Ret
->getNumOperands() == 0 ||
251 Ret
->getOperand(0) ==
252 cast
<ReturnInst
>(RetBlock
->getTerminator())->getOperand(0)) {
253 BB
.replaceAllUsesWith(RetBlock
);
254 BB
.eraseFromParent();
258 // If the canonical return block has no PHI node, create one now.
259 PHINode
*RetBlockPHI
= dyn_cast
<PHINode
>(RetBlock
->begin());
260 if (RetBlockPHI
== 0) {
261 Value
*InVal
= cast
<ReturnInst
>(RetBlock
->getTerminator())->getOperand(0);
262 pred_iterator PB
= pred_begin(RetBlock
), PE
= pred_end(RetBlock
);
263 RetBlockPHI
= PHINode::Create(Ret
->getOperand(0)->getType(),
264 std::distance(PB
, PE
), "merge",
267 for (pred_iterator PI
= PB
; PI
!= PE
; ++PI
)
268 RetBlockPHI
->addIncoming(InVal
, *PI
);
269 RetBlock
->getTerminator()->setOperand(0, RetBlockPHI
);
272 // Turn BB into a block that just unconditionally branches to the return
273 // block. This handles the case when the two return blocks have a common
274 // predecessor but that return different things.
275 RetBlockPHI
->addIncoming(Ret
->getOperand(0), &BB
);
276 BB
.getTerminator()->eraseFromParent();
277 BranchInst::Create(RetBlock
, &BB
);
283 /// IterativeSimplifyCFG - Call SimplifyCFG on all the blocks in the function,
284 /// iterating until no more changes are made.
285 static bool IterativeSimplifyCFG(Function
&F
, const TargetData
*TD
) {
286 bool Changed
= false;
287 bool LocalChange
= true;
288 while (LocalChange
) {
291 // Loop over all of the basic blocks and remove them if they are unneeded...
293 for (Function::iterator BBIt
= F
.begin(); BBIt
!= F
.end(); ) {
294 if (SimplifyCFG(BBIt
++, TD
)) {
299 Changed
|= LocalChange
;
304 // It is possible that we may require multiple passes over the code to fully
307 bool CFGSimplifyPass::runOnFunction(Function
&F
) {
308 const TargetData
*TD
= getAnalysisIfAvailable
<TargetData
>();
309 bool EverChanged
= RemoveUnreachableBlocksFromFn(F
);
310 EverChanged
|= MergeEmptyReturnBlocks(F
);
311 EverChanged
|= IterativeSimplifyCFG(F
, TD
);
313 // If neither pass changed anything, we're done.
314 if (!EverChanged
) return false;
316 // IterativeSimplifyCFG can (rarely) make some loops dead. If this happens,
317 // RemoveUnreachableBlocksFromFn is needed to nuke them, which means we should
318 // iterate between the two optimizations. We structure the code like this to
319 // avoid reruning IterativeSimplifyCFG if the second pass of
320 // RemoveUnreachableBlocksFromFn doesn't do anything.
321 if (!RemoveUnreachableBlocksFromFn(F
))
325 EverChanged
= IterativeSimplifyCFG(F
, TD
);
326 EverChanged
|= RemoveUnreachableBlocksFromFn(F
);
327 } while (EverChanged
);