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
*CallTrap
= CallInst::Create(TrapFn
, "", I
);
77 CallTrap
->setDebugLoc(I
->getDebugLoc());
79 new UnreachableInst(I
->getContext(), I
);
81 // All instructions after this are dead.
82 BasicBlock::iterator BBI
= I
, BBE
= BB
->end();
84 if (!BBI
->use_empty())
85 BBI
->replaceAllUsesWith(UndefValue::get(BBI
->getType()));
86 BB
->getInstList().erase(BBI
++);
90 /// ChangeToCall - Convert the specified invoke into a normal call.
91 static void ChangeToCall(InvokeInst
*II
) {
92 BasicBlock
*BB
= II
->getParent();
93 SmallVector
<Value
*, 8> Args(II
->op_begin(), II
->op_end() - 3);
94 CallInst
*NewCall
= CallInst::Create(II
->getCalledValue(), Args
.begin(),
96 NewCall
->takeName(II
);
97 NewCall
->setCallingConv(II
->getCallingConv());
98 NewCall
->setAttributes(II
->getAttributes());
99 NewCall
->setDebugLoc(II
->getDebugLoc());
100 II
->replaceAllUsesWith(NewCall
);
102 // Follow the call by a branch to the normal destination.
103 BranchInst::Create(II
->getNormalDest(), II
);
105 // Update PHI nodes in the unwind destination
106 II
->getUnwindDest()->removePredecessor(BB
);
107 BB
->getInstList().erase(II
);
110 static bool MarkAliveBlocks(BasicBlock
*BB
,
111 SmallPtrSet
<BasicBlock
*, 128> &Reachable
) {
113 SmallVector
<BasicBlock
*, 128> Worklist
;
114 Worklist
.push_back(BB
);
115 bool Changed
= false;
117 BB
= Worklist
.pop_back_val();
119 if (!Reachable
.insert(BB
))
122 // Do a quick scan of the basic block, turning any obviously unreachable
123 // instructions into LLVM unreachable insts. The instruction combining pass
124 // canonicalizes unreachable insts into stores to null or undef.
125 for (BasicBlock::iterator BBI
= BB
->begin(), E
= BB
->end(); BBI
!= E
;++BBI
){
126 if (CallInst
*CI
= dyn_cast
<CallInst
>(BBI
)) {
127 if (CI
->doesNotReturn()) {
128 // If we found a call to a no-return function, insert an unreachable
129 // instruction after it. Make sure there isn't *already* one there
132 if (!isa
<UnreachableInst
>(BBI
)) {
133 // Don't insert a call to llvm.trap right before the unreachable.
134 ChangeToUnreachable(BBI
, false);
141 // Store to undef and store to null are undefined and used to signal that
142 // they should be changed to unreachable by passes that can't modify the
144 if (StoreInst
*SI
= dyn_cast
<StoreInst
>(BBI
)) {
145 // Don't touch volatile stores.
146 if (SI
->isVolatile()) continue;
148 Value
*Ptr
= SI
->getOperand(1);
150 if (isa
<UndefValue
>(Ptr
) ||
151 (isa
<ConstantPointerNull
>(Ptr
) &&
152 SI
->getPointerAddressSpace() == 0)) {
153 ChangeToUnreachable(SI
, true);
160 // Turn invokes that call 'nounwind' functions into ordinary calls.
161 if (InvokeInst
*II
= dyn_cast
<InvokeInst
>(BB
->getTerminator()))
162 if (II
->doesNotThrow()) {
167 Changed
|= ConstantFoldTerminator(BB
, true);
168 for (succ_iterator SI
= succ_begin(BB
), SE
= succ_end(BB
); SI
!= SE
; ++SI
)
169 Worklist
.push_back(*SI
);
170 } while (!Worklist
.empty());
174 /// RemoveUnreachableBlocksFromFn - Remove blocks that are not reachable, even
175 /// if they are in a dead cycle. Return true if a change was made, false
177 static bool RemoveUnreachableBlocksFromFn(Function
&F
) {
178 SmallPtrSet
<BasicBlock
*, 128> Reachable
;
179 bool Changed
= MarkAliveBlocks(F
.begin(), Reachable
);
181 // If there are unreachable blocks in the CFG...
182 if (Reachable
.size() == F
.size())
185 assert(Reachable
.size() < F
.size());
186 NumSimpl
+= F
.size()-Reachable
.size();
188 // Loop over all of the basic blocks that are not reachable, dropping all of
189 // their internal references...
190 for (Function::iterator BB
= ++F
.begin(), E
= F
.end(); BB
!= E
; ++BB
) {
191 if (Reachable
.count(BB
))
194 for (succ_iterator SI
= succ_begin(BB
), SE
= succ_end(BB
); SI
!= SE
; ++SI
)
195 if (Reachable
.count(*SI
))
196 (*SI
)->removePredecessor(BB
);
197 BB
->dropAllReferences();
200 for (Function::iterator I
= ++F
.begin(); I
!= F
.end();)
201 if (!Reachable
.count(I
))
202 I
= F
.getBasicBlockList().erase(I
);
209 /// MergeEmptyReturnBlocks - If we have more than one empty (other than phi
210 /// node) return blocks, merge them together to promote recursive block merging.
211 static bool MergeEmptyReturnBlocks(Function
&F
) {
212 bool Changed
= false;
214 BasicBlock
*RetBlock
= 0;
216 // Scan all the blocks in the function, looking for empty return blocks.
217 for (Function::iterator BBI
= F
.begin(), E
= F
.end(); BBI
!= E
; ) {
218 BasicBlock
&BB
= *BBI
++;
220 // Only look at return blocks.
221 ReturnInst
*Ret
= dyn_cast
<ReturnInst
>(BB
.getTerminator());
222 if (Ret
== 0) continue;
224 // Only look at the block if it is empty or the only other thing in it is a
225 // single PHI node that is the operand to the return.
226 if (Ret
!= &BB
.front()) {
227 // Check for something else in the block.
228 BasicBlock::iterator I
= Ret
;
230 // Skip over debug info.
231 while (isa
<DbgInfoIntrinsic
>(I
) && I
!= BB
.begin())
233 if (!isa
<DbgInfoIntrinsic
>(I
) &&
234 (!isa
<PHINode
>(I
) || I
!= BB
.begin() ||
235 Ret
->getNumOperands() == 0 ||
236 Ret
->getOperand(0) != I
))
240 // If this is the first returning block, remember it and keep going.
246 // Otherwise, we found a duplicate return block. Merge the two.
249 // Case when there is no input to the return or when the returned values
250 // agree is trivial. Note that they can't agree if there are phis in the
252 if (Ret
->getNumOperands() == 0 ||
253 Ret
->getOperand(0) ==
254 cast
<ReturnInst
>(RetBlock
->getTerminator())->getOperand(0)) {
255 BB
.replaceAllUsesWith(RetBlock
);
256 BB
.eraseFromParent();
260 // If the canonical return block has no PHI node, create one now.
261 PHINode
*RetBlockPHI
= dyn_cast
<PHINode
>(RetBlock
->begin());
262 if (RetBlockPHI
== 0) {
263 Value
*InVal
= cast
<ReturnInst
>(RetBlock
->getTerminator())->getOperand(0);
264 pred_iterator PB
= pred_begin(RetBlock
), PE
= pred_end(RetBlock
);
265 RetBlockPHI
= PHINode::Create(Ret
->getOperand(0)->getType(),
266 std::distance(PB
, PE
), "merge",
269 for (pred_iterator PI
= PB
; PI
!= PE
; ++PI
)
270 RetBlockPHI
->addIncoming(InVal
, *PI
);
271 RetBlock
->getTerminator()->setOperand(0, RetBlockPHI
);
274 // Turn BB into a block that just unconditionally branches to the return
275 // block. This handles the case when the two return blocks have a common
276 // predecessor but that return different things.
277 RetBlockPHI
->addIncoming(Ret
->getOperand(0), &BB
);
278 BB
.getTerminator()->eraseFromParent();
279 BranchInst::Create(RetBlock
, &BB
);
285 /// IterativeSimplifyCFG - Call SimplifyCFG on all the blocks in the function,
286 /// iterating until no more changes are made.
287 static bool IterativeSimplifyCFG(Function
&F
, const TargetData
*TD
) {
288 bool Changed
= false;
289 bool LocalChange
= true;
290 while (LocalChange
) {
293 // Loop over all of the basic blocks and remove them if they are unneeded...
295 for (Function::iterator BBIt
= F
.begin(); BBIt
!= F
.end(); ) {
296 if (SimplifyCFG(BBIt
++, TD
)) {
301 Changed
|= LocalChange
;
306 // It is possible that we may require multiple passes over the code to fully
309 bool CFGSimplifyPass::runOnFunction(Function
&F
) {
310 const TargetData
*TD
= getAnalysisIfAvailable
<TargetData
>();
311 bool EverChanged
= RemoveUnreachableBlocksFromFn(F
);
312 EverChanged
|= MergeEmptyReturnBlocks(F
);
313 EverChanged
|= IterativeSimplifyCFG(F
, TD
);
315 // If neither pass changed anything, we're done.
316 if (!EverChanged
) return false;
318 // IterativeSimplifyCFG can (rarely) make some loops dead. If this happens,
319 // RemoveUnreachableBlocksFromFn is needed to nuke them, which means we should
320 // iterate between the two optimizations. We structure the code like this to
321 // avoid reruning IterativeSimplifyCFG if the second pass of
322 // RemoveUnreachableBlocksFromFn doesn't do anything.
323 if (!RemoveUnreachableBlocksFromFn(F
))
327 EverChanged
= IterativeSimplifyCFG(F
, TD
);
328 EverChanged
|= RemoveUnreachableBlocksFromFn(F
);
329 } while (EverChanged
);