~louis/ubuntu/trusty/clamav/lp799623_fix_logrotate

« back to all changes in this revision

Viewing changes to libclamav/c++/llvm/lib/Transforms/Utils/SimplifyCFG.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Scott Kitterman
  • Date: 2010-03-12 11:30:04 UTC
  • mfrom: (0.41.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20100312113004-b0fop4bkycszdd0z
Tags: 0.96~rc1+dfsg-0ubuntu1
* New upstream RC - FFE (LP: #537636):
  - Add OfficialDatabaseOnly option to clamav-base.postinst.in
  - Add LocalSocketGroup option to clamav-base.postinst.in
  - Add LocalSocketMode option to clamav-base.postinst.in
  - Add CrossFilesystems option to clamav-base.postinst.in
  - Add ClamukoScannerCount option to clamav-base.postinst.in
  - Add BytecodeSecurity opiton to clamav-base.postinst.in
  - Add DetectionStatsHostID option to clamav-freshclam.postinst.in
  - Add Bytecode option to clamav-freshclam.postinst.in
  - Add MilterSocketGroup option to clamav-milter.postinst.in
  - Add MilterSocketMode option to clamav-milter.postinst.in
  - Add ReportHostname option to clamav-milter.postinst.in
  - Bump libclamav SO version to 6.1.0 in libclamav6.install
  - Drop clamdmon from clamav.examples (no longer shipped by upstream)
  - Drop libclamav.a from libclamav-dev.install (not built by upstream)
  - Update SO version for lintian override for libclamav6
  - Add new Bytecode Testing Tool, usr/bin/clambc, to clamav.install
  - Add build-depends on python and python-setuptools for new test suite
  - Update debian/copyright for the embedded copy of llvm (using the system
    llvm is not currently feasible)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
//===- SimplifyCFG.cpp - Code to perform CFG simplification ---------------===//
 
2
//
 
3
//                     The LLVM Compiler Infrastructure
 
4
//
 
5
// This file is distributed under the University of Illinois Open Source
 
6
// License. See LICENSE.TXT for details.
 
7
//
 
8
//===----------------------------------------------------------------------===//
 
9
//
 
10
// Peephole optimize the CFG.
 
11
//
 
12
//===----------------------------------------------------------------------===//
 
13
 
 
14
#define DEBUG_TYPE "simplifycfg"
 
15
#include "llvm/Transforms/Utils/Local.h"
 
16
#include "llvm/Constants.h"
 
17
#include "llvm/Instructions.h"
 
18
#include "llvm/IntrinsicInst.h"
 
19
#include "llvm/Type.h"
 
20
#include "llvm/DerivedTypes.h"
 
21
#include "llvm/GlobalVariable.h"
 
22
#include "llvm/Support/CFG.h"
 
23
#include "llvm/Support/Debug.h"
 
24
#include "llvm/Support/raw_ostream.h"
 
25
#include "llvm/Analysis/ConstantFolding.h"
 
26
#include "llvm/Target/TargetData.h"
 
27
#include "llvm/Transforms/Utils/BasicBlockUtils.h"
 
28
#include "llvm/ADT/DenseMap.h"
 
29
#include "llvm/ADT/SmallVector.h"
 
30
#include "llvm/ADT/SmallPtrSet.h"
 
31
#include "llvm/ADT/Statistic.h"
 
32
#include <algorithm>
 
33
#include <functional>
 
34
#include <set>
 
35
#include <map>
 
36
using namespace llvm;
 
37
 
 
38
STATISTIC(NumSpeculations, "Number of speculative executed instructions");
 
39
 
 
40
namespace {
 
41
class SimplifyCFGOpt {
 
42
  const TargetData *const TD;
 
43
 
 
44
  ConstantInt *GetConstantInt(Value *V);
 
45
  Value *GatherConstantSetEQs(Value *V, std::vector<ConstantInt*> &Values);
 
46
  Value *GatherConstantSetNEs(Value *V, std::vector<ConstantInt*> &Values);
 
47
  bool GatherValueComparisons(Instruction *Cond, Value *&CompVal,
 
48
                              std::vector<ConstantInt*> &Values);
 
49
  Value *isValueEqualityComparison(TerminatorInst *TI);
 
50
  BasicBlock *GetValueEqualityComparisonCases(TerminatorInst *TI,
 
51
    std::vector<std::pair<ConstantInt*, BasicBlock*> > &Cases);
 
52
  bool SimplifyEqualityComparisonWithOnlyPredecessor(TerminatorInst *TI,
 
53
                                                     BasicBlock *Pred);
 
54
  bool FoldValueComparisonIntoPredecessors(TerminatorInst *TI);
 
55
 
 
56
public:
 
57
  explicit SimplifyCFGOpt(const TargetData *td) : TD(td) {}
 
58
  bool run(BasicBlock *BB);
 
59
};
 
60
}
 
61
 
 
62
/// SafeToMergeTerminators - Return true if it is safe to merge these two
 
63
/// terminator instructions together.
 
64
///
 
65
static bool SafeToMergeTerminators(TerminatorInst *SI1, TerminatorInst *SI2) {
 
66
  if (SI1 == SI2) return false;  // Can't merge with self!
 
67
  
 
68
  // It is not safe to merge these two switch instructions if they have a common
 
69
  // successor, and if that successor has a PHI node, and if *that* PHI node has
 
70
  // conflicting incoming values from the two switch blocks.
 
71
  BasicBlock *SI1BB = SI1->getParent();
 
72
  BasicBlock *SI2BB = SI2->getParent();
 
73
  SmallPtrSet<BasicBlock*, 16> SI1Succs(succ_begin(SI1BB), succ_end(SI1BB));
 
74
  
 
75
  for (succ_iterator I = succ_begin(SI2BB), E = succ_end(SI2BB); I != E; ++I)
 
76
    if (SI1Succs.count(*I))
 
77
      for (BasicBlock::iterator BBI = (*I)->begin();
 
78
           isa<PHINode>(BBI); ++BBI) {
 
79
        PHINode *PN = cast<PHINode>(BBI);
 
80
        if (PN->getIncomingValueForBlock(SI1BB) !=
 
81
            PN->getIncomingValueForBlock(SI2BB))
 
82
          return false;
 
83
      }
 
84
        
 
85
  return true;
 
86
}
 
87
 
 
88
/// AddPredecessorToBlock - Update PHI nodes in Succ to indicate that there will
 
89
/// now be entries in it from the 'NewPred' block.  The values that will be
 
90
/// flowing into the PHI nodes will be the same as those coming in from
 
91
/// ExistPred, an existing predecessor of Succ.
 
92
static void AddPredecessorToBlock(BasicBlock *Succ, BasicBlock *NewPred,
 
93
                                  BasicBlock *ExistPred) {
 
94
  assert(std::find(succ_begin(ExistPred), succ_end(ExistPred), Succ) !=
 
95
         succ_end(ExistPred) && "ExistPred is not a predecessor of Succ!");
 
96
  if (!isa<PHINode>(Succ->begin())) return; // Quick exit if nothing to do
 
97
  
 
98
  PHINode *PN;
 
99
  for (BasicBlock::iterator I = Succ->begin();
 
100
       (PN = dyn_cast<PHINode>(I)); ++I)
 
101
    PN->addIncoming(PN->getIncomingValueForBlock(ExistPred), NewPred);
 
102
}
 
103
 
 
104
 
 
105
/// GetIfCondition - Given a basic block (BB) with two predecessors (and
 
106
/// presumably PHI nodes in it), check to see if the merge at this block is due
 
107
/// to an "if condition".  If so, return the boolean condition that determines
 
108
/// which entry into BB will be taken.  Also, return by references the block
 
109
/// that will be entered from if the condition is true, and the block that will
 
110
/// be entered if the condition is false.
 
111
///
 
112
///
 
113
static Value *GetIfCondition(BasicBlock *BB,
 
114
                             BasicBlock *&IfTrue, BasicBlock *&IfFalse) {
 
115
  assert(std::distance(pred_begin(BB), pred_end(BB)) == 2 &&
 
116
         "Function can only handle blocks with 2 predecessors!");
 
117
  BasicBlock *Pred1 = *pred_begin(BB);
 
118
  BasicBlock *Pred2 = *++pred_begin(BB);
 
119
 
 
120
  // We can only handle branches.  Other control flow will be lowered to
 
121
  // branches if possible anyway.
 
122
  if (!isa<BranchInst>(Pred1->getTerminator()) ||
 
123
      !isa<BranchInst>(Pred2->getTerminator()))
 
124
    return 0;
 
125
  BranchInst *Pred1Br = cast<BranchInst>(Pred1->getTerminator());
 
126
  BranchInst *Pred2Br = cast<BranchInst>(Pred2->getTerminator());
 
127
 
 
128
  // Eliminate code duplication by ensuring that Pred1Br is conditional if
 
129
  // either are.
 
130
  if (Pred2Br->isConditional()) {
 
131
    // If both branches are conditional, we don't have an "if statement".  In
 
132
    // reality, we could transform this case, but since the condition will be
 
133
    // required anyway, we stand no chance of eliminating it, so the xform is
 
134
    // probably not profitable.
 
135
    if (Pred1Br->isConditional())
 
136
      return 0;
 
137
 
 
138
    std::swap(Pred1, Pred2);
 
139
    std::swap(Pred1Br, Pred2Br);
 
140
  }
 
141
 
 
142
  if (Pred1Br->isConditional()) {
 
143
    // If we found a conditional branch predecessor, make sure that it branches
 
144
    // to BB and Pred2Br.  If it doesn't, this isn't an "if statement".
 
145
    if (Pred1Br->getSuccessor(0) == BB &&
 
146
        Pred1Br->getSuccessor(1) == Pred2) {
 
147
      IfTrue = Pred1;
 
148
      IfFalse = Pred2;
 
149
    } else if (Pred1Br->getSuccessor(0) == Pred2 &&
 
150
               Pred1Br->getSuccessor(1) == BB) {
 
151
      IfTrue = Pred2;
 
152
      IfFalse = Pred1;
 
153
    } else {
 
154
      // We know that one arm of the conditional goes to BB, so the other must
 
155
      // go somewhere unrelated, and this must not be an "if statement".
 
156
      return 0;
 
157
    }
 
158
 
 
159
    // The only thing we have to watch out for here is to make sure that Pred2
 
160
    // doesn't have incoming edges from other blocks.  If it does, the condition
 
161
    // doesn't dominate BB.
 
162
    if (++pred_begin(Pred2) != pred_end(Pred2))
 
163
      return 0;
 
164
 
 
165
    return Pred1Br->getCondition();
 
166
  }
 
167
 
 
168
  // Ok, if we got here, both predecessors end with an unconditional branch to
 
169
  // BB.  Don't panic!  If both blocks only have a single (identical)
 
170
  // predecessor, and THAT is a conditional branch, then we're all ok!
 
171
  if (pred_begin(Pred1) == pred_end(Pred1) ||
 
172
      ++pred_begin(Pred1) != pred_end(Pred1) ||
 
173
      pred_begin(Pred2) == pred_end(Pred2) ||
 
174
      ++pred_begin(Pred2) != pred_end(Pred2) ||
 
175
      *pred_begin(Pred1) != *pred_begin(Pred2))
 
176
    return 0;
 
177
 
 
178
  // Otherwise, if this is a conditional branch, then we can use it!
 
179
  BasicBlock *CommonPred = *pred_begin(Pred1);
 
180
  if (BranchInst *BI = dyn_cast<BranchInst>(CommonPred->getTerminator())) {
 
181
    assert(BI->isConditional() && "Two successors but not conditional?");
 
182
    if (BI->getSuccessor(0) == Pred1) {
 
183
      IfTrue = Pred1;
 
184
      IfFalse = Pred2;
 
185
    } else {
 
186
      IfTrue = Pred2;
 
187
      IfFalse = Pred1;
 
188
    }
 
189
    return BI->getCondition();
 
190
  }
 
191
  return 0;
 
192
}
 
193
 
 
194
/// DominatesMergePoint - If we have a merge point of an "if condition" as
 
195
/// accepted above, return true if the specified value dominates the block.  We
 
196
/// don't handle the true generality of domination here, just a special case
 
197
/// which works well enough for us.
 
198
///
 
199
/// If AggressiveInsts is non-null, and if V does not dominate BB, we check to
 
200
/// see if V (which must be an instruction) is cheap to compute and is
 
201
/// non-trapping.  If both are true, the instruction is inserted into the set
 
202
/// and true is returned.
 
203
static bool DominatesMergePoint(Value *V, BasicBlock *BB,
 
204
                                std::set<Instruction*> *AggressiveInsts) {
 
205
  Instruction *I = dyn_cast<Instruction>(V);
 
206
  if (!I) {
 
207
    // Non-instructions all dominate instructions, but not all constantexprs
 
208
    // can be executed unconditionally.
 
209
    if (ConstantExpr *C = dyn_cast<ConstantExpr>(V))
 
210
      if (C->canTrap())
 
211
        return false;
 
212
    return true;
 
213
  }
 
214
  BasicBlock *PBB = I->getParent();
 
215
 
 
216
  // We don't want to allow weird loops that might have the "if condition" in
 
217
  // the bottom of this block.
 
218
  if (PBB == BB) return false;
 
219
 
 
220
  // If this instruction is defined in a block that contains an unconditional
 
221
  // branch to BB, then it must be in the 'conditional' part of the "if
 
222
  // statement".
 
223
  if (BranchInst *BI = dyn_cast<BranchInst>(PBB->getTerminator()))
 
224
    if (BI->isUnconditional() && BI->getSuccessor(0) == BB) {
 
225
      if (!AggressiveInsts) return false;
 
226
      // Okay, it looks like the instruction IS in the "condition".  Check to
 
227
      // see if its a cheap instruction to unconditionally compute, and if it
 
228
      // only uses stuff defined outside of the condition.  If so, hoist it out.
 
229
      if (!I->isSafeToSpeculativelyExecute())
 
230
        return false;
 
231
 
 
232
      switch (I->getOpcode()) {
 
233
      default: return false;  // Cannot hoist this out safely.
 
234
      case Instruction::Load: {
 
235
        // We have to check to make sure there are no instructions before the
 
236
        // load in its basic block, as we are going to hoist the loop out to
 
237
        // its predecessor.
 
238
        BasicBlock::iterator IP = PBB->begin();
 
239
        while (isa<DbgInfoIntrinsic>(IP))
 
240
          IP++;
 
241
        if (IP != BasicBlock::iterator(I))
 
242
          return false;
 
243
        break;
 
244
      }
 
245
      case Instruction::Add:
 
246
      case Instruction::Sub:
 
247
      case Instruction::And:
 
248
      case Instruction::Or:
 
249
      case Instruction::Xor:
 
250
      case Instruction::Shl:
 
251
      case Instruction::LShr:
 
252
      case Instruction::AShr:
 
253
      case Instruction::ICmp:
 
254
        break;   // These are all cheap and non-trapping instructions.
 
255
      }
 
256
 
 
257
      // Okay, we can only really hoist these out if their operands are not
 
258
      // defined in the conditional region.
 
259
      for (User::op_iterator i = I->op_begin(), e = I->op_end(); i != e; ++i)
 
260
        if (!DominatesMergePoint(*i, BB, 0))
 
261
          return false;
 
262
      // Okay, it's safe to do this!  Remember this instruction.
 
263
      AggressiveInsts->insert(I);
 
264
    }
 
265
 
 
266
  return true;
 
267
}
 
268
 
 
269
/// GetConstantInt - Extract ConstantInt from value, looking through IntToPtr
 
270
/// and PointerNullValue. Return NULL if value is not a constant int.
 
271
ConstantInt *SimplifyCFGOpt::GetConstantInt(Value *V) {
 
272
  // Normal constant int.
 
273
  ConstantInt *CI = dyn_cast<ConstantInt>(V);
 
274
  if (CI || !TD || !isa<Constant>(V) || !V->getType()->isPointerTy())
 
275
    return CI;
 
276
 
 
277
  // This is some kind of pointer constant. Turn it into a pointer-sized
 
278
  // ConstantInt if possible.
 
279
  const IntegerType *PtrTy = TD->getIntPtrType(V->getContext());
 
280
 
 
281
  // Null pointer means 0, see SelectionDAGBuilder::getValue(const Value*).
 
282
  if (isa<ConstantPointerNull>(V))
 
283
    return ConstantInt::get(PtrTy, 0);
 
284
 
 
285
  // IntToPtr const int.
 
286
  if (ConstantExpr *CE = dyn_cast<ConstantExpr>(V))
 
287
    if (CE->getOpcode() == Instruction::IntToPtr)
 
288
      if (ConstantInt *CI = dyn_cast<ConstantInt>(CE->getOperand(0))) {
 
289
        // The constant is very likely to have the right type already.
 
290
        if (CI->getType() == PtrTy)
 
291
          return CI;
 
292
        else
 
293
          return cast<ConstantInt>
 
294
            (ConstantExpr::getIntegerCast(CI, PtrTy, /*isSigned=*/false));
 
295
      }
 
296
  return 0;
 
297
}
 
298
 
 
299
/// GatherConstantSetEQs - Given a potentially 'or'd together collection of
 
300
/// icmp_eq instructions that compare a value against a constant, return the
 
301
/// value being compared, and stick the constant into the Values vector.
 
302
Value *SimplifyCFGOpt::
 
303
GatherConstantSetEQs(Value *V, std::vector<ConstantInt*> &Values) {
 
304
  if (Instruction *Inst = dyn_cast<Instruction>(V)) {
 
305
    if (Inst->getOpcode() == Instruction::ICmp &&
 
306
        cast<ICmpInst>(Inst)->getPredicate() == ICmpInst::ICMP_EQ) {
 
307
      if (ConstantInt *C = GetConstantInt(Inst->getOperand(1))) {
 
308
        Values.push_back(C);
 
309
        return Inst->getOperand(0);
 
310
      } else if (ConstantInt *C = GetConstantInt(Inst->getOperand(0))) {
 
311
        Values.push_back(C);
 
312
        return Inst->getOperand(1);
 
313
      }
 
314
    } else if (Inst->getOpcode() == Instruction::Or) {
 
315
      if (Value *LHS = GatherConstantSetEQs(Inst->getOperand(0), Values))
 
316
        if (Value *RHS = GatherConstantSetEQs(Inst->getOperand(1), Values))
 
317
          if (LHS == RHS)
 
318
            return LHS;
 
319
    }
 
320
  }
 
321
  return 0;
 
322
}
 
323
 
 
324
/// GatherConstantSetNEs - Given a potentially 'and'd together collection of
 
325
/// setne instructions that compare a value against a constant, return the value
 
326
/// being compared, and stick the constant into the Values vector.
 
327
Value *SimplifyCFGOpt::
 
328
GatherConstantSetNEs(Value *V, std::vector<ConstantInt*> &Values) {
 
329
  if (Instruction *Inst = dyn_cast<Instruction>(V)) {
 
330
    if (Inst->getOpcode() == Instruction::ICmp &&
 
331
               cast<ICmpInst>(Inst)->getPredicate() == ICmpInst::ICMP_NE) {
 
332
      if (ConstantInt *C = GetConstantInt(Inst->getOperand(1))) {
 
333
        Values.push_back(C);
 
334
        return Inst->getOperand(0);
 
335
      } else if (ConstantInt *C = GetConstantInt(Inst->getOperand(0))) {
 
336
        Values.push_back(C);
 
337
        return Inst->getOperand(1);
 
338
      }
 
339
    } else if (Inst->getOpcode() == Instruction::And) {
 
340
      if (Value *LHS = GatherConstantSetNEs(Inst->getOperand(0), Values))
 
341
        if (Value *RHS = GatherConstantSetNEs(Inst->getOperand(1), Values))
 
342
          if (LHS == RHS)
 
343
            return LHS;
 
344
    }
 
345
  }
 
346
  return 0;
 
347
}
 
348
 
 
349
/// GatherValueComparisons - If the specified Cond is an 'and' or 'or' of a
 
350
/// bunch of comparisons of one value against constants, return the value and
 
351
/// the constants being compared.
 
352
bool SimplifyCFGOpt::GatherValueComparisons(Instruction *Cond, Value *&CompVal,
 
353
                                            std::vector<ConstantInt*> &Values) {
 
354
  if (Cond->getOpcode() == Instruction::Or) {
 
355
    CompVal = GatherConstantSetEQs(Cond, Values);
 
356
 
 
357
    // Return true to indicate that the condition is true if the CompVal is
 
358
    // equal to one of the constants.
 
359
    return true;
 
360
  } else if (Cond->getOpcode() == Instruction::And) {
 
361
    CompVal = GatherConstantSetNEs(Cond, Values);
 
362
 
 
363
    // Return false to indicate that the condition is false if the CompVal is
 
364
    // equal to one of the constants.
 
365
    return false;
 
366
  }
 
367
  return false;
 
368
}
 
369
 
 
370
static void EraseTerminatorInstAndDCECond(TerminatorInst *TI) {
 
371
  Instruction* Cond = 0;
 
372
  if (SwitchInst *SI = dyn_cast<SwitchInst>(TI)) {
 
373
    Cond = dyn_cast<Instruction>(SI->getCondition());
 
374
  } else if (BranchInst *BI = dyn_cast<BranchInst>(TI)) {
 
375
    if (BI->isConditional())
 
376
      Cond = dyn_cast<Instruction>(BI->getCondition());
 
377
  }
 
378
 
 
379
  TI->eraseFromParent();
 
380
  if (Cond) RecursivelyDeleteTriviallyDeadInstructions(Cond);
 
381
}
 
382
 
 
383
/// isValueEqualityComparison - Return true if the specified terminator checks
 
384
/// to see if a value is equal to constant integer value.
 
385
Value *SimplifyCFGOpt::isValueEqualityComparison(TerminatorInst *TI) {
 
386
  Value *CV = 0;
 
387
  if (SwitchInst *SI = dyn_cast<SwitchInst>(TI)) {
 
388
    // Do not permit merging of large switch instructions into their
 
389
    // predecessors unless there is only one predecessor.
 
390
    if (SI->getNumSuccessors()*std::distance(pred_begin(SI->getParent()),
 
391
                                             pred_end(SI->getParent())) <= 128)
 
392
      CV = SI->getCondition();
 
393
  } else if (BranchInst *BI = dyn_cast<BranchInst>(TI))
 
394
    if (BI->isConditional() && BI->getCondition()->hasOneUse())
 
395
      if (ICmpInst *ICI = dyn_cast<ICmpInst>(BI->getCondition()))
 
396
        if ((ICI->getPredicate() == ICmpInst::ICMP_EQ ||
 
397
             ICI->getPredicate() == ICmpInst::ICMP_NE) &&
 
398
            GetConstantInt(ICI->getOperand(1)))
 
399
          CV = ICI->getOperand(0);
 
400
 
 
401
  // Unwrap any lossless ptrtoint cast.
 
402
  if (TD && CV && CV->getType() == TD->getIntPtrType(CV->getContext()))
 
403
    if (PtrToIntInst *PTII = dyn_cast<PtrToIntInst>(CV))
 
404
      CV = PTII->getOperand(0);
 
405
  return CV;
 
406
}
 
407
 
 
408
/// GetValueEqualityComparisonCases - Given a value comparison instruction,
 
409
/// decode all of the 'cases' that it represents and return the 'default' block.
 
410
BasicBlock *SimplifyCFGOpt::
 
411
GetValueEqualityComparisonCases(TerminatorInst *TI,
 
412
                                std::vector<std::pair<ConstantInt*,
 
413
                                                      BasicBlock*> > &Cases) {
 
414
  if (SwitchInst *SI = dyn_cast<SwitchInst>(TI)) {
 
415
    Cases.reserve(SI->getNumCases());
 
416
    for (unsigned i = 1, e = SI->getNumCases(); i != e; ++i)
 
417
      Cases.push_back(std::make_pair(SI->getCaseValue(i), SI->getSuccessor(i)));
 
418
    return SI->getDefaultDest();
 
419
  }
 
420
 
 
421
  BranchInst *BI = cast<BranchInst>(TI);
 
422
  ICmpInst *ICI = cast<ICmpInst>(BI->getCondition());
 
423
  Cases.push_back(std::make_pair(GetConstantInt(ICI->getOperand(1)),
 
424
                                 BI->getSuccessor(ICI->getPredicate() ==
 
425
                                                  ICmpInst::ICMP_NE)));
 
426
  return BI->getSuccessor(ICI->getPredicate() == ICmpInst::ICMP_EQ);
 
427
}
 
428
 
 
429
 
 
430
/// EliminateBlockCases - Given a vector of bb/value pairs, remove any entries
 
431
/// in the list that match the specified block.
 
432
static void EliminateBlockCases(BasicBlock *BB,
 
433
               std::vector<std::pair<ConstantInt*, BasicBlock*> > &Cases) {
 
434
  for (unsigned i = 0, e = Cases.size(); i != e; ++i)
 
435
    if (Cases[i].second == BB) {
 
436
      Cases.erase(Cases.begin()+i);
 
437
      --i; --e;
 
438
    }
 
439
}
 
440
 
 
441
/// ValuesOverlap - Return true if there are any keys in C1 that exist in C2 as
 
442
/// well.
 
443
static bool
 
444
ValuesOverlap(std::vector<std::pair<ConstantInt*, BasicBlock*> > &C1,
 
445
              std::vector<std::pair<ConstantInt*, BasicBlock*> > &C2) {
 
446
  std::vector<std::pair<ConstantInt*, BasicBlock*> > *V1 = &C1, *V2 = &C2;
 
447
 
 
448
  // Make V1 be smaller than V2.
 
449
  if (V1->size() > V2->size())
 
450
    std::swap(V1, V2);
 
451
 
 
452
  if (V1->size() == 0) return false;
 
453
  if (V1->size() == 1) {
 
454
    // Just scan V2.
 
455
    ConstantInt *TheVal = (*V1)[0].first;
 
456
    for (unsigned i = 0, e = V2->size(); i != e; ++i)
 
457
      if (TheVal == (*V2)[i].first)
 
458
        return true;
 
459
  }
 
460
 
 
461
  // Otherwise, just sort both lists and compare element by element.
 
462
  std::sort(V1->begin(), V1->end());
 
463
  std::sort(V2->begin(), V2->end());
 
464
  unsigned i1 = 0, i2 = 0, e1 = V1->size(), e2 = V2->size();
 
465
  while (i1 != e1 && i2 != e2) {
 
466
    if ((*V1)[i1].first == (*V2)[i2].first)
 
467
      return true;
 
468
    if ((*V1)[i1].first < (*V2)[i2].first)
 
469
      ++i1;
 
470
    else
 
471
      ++i2;
 
472
  }
 
473
  return false;
 
474
}
 
475
 
 
476
/// SimplifyEqualityComparisonWithOnlyPredecessor - If TI is known to be a
 
477
/// terminator instruction and its block is known to only have a single
 
478
/// predecessor block, check to see if that predecessor is also a value
 
479
/// comparison with the same value, and if that comparison determines the
 
480
/// outcome of this comparison.  If so, simplify TI.  This does a very limited
 
481
/// form of jump threading.
 
482
bool SimplifyCFGOpt::
 
483
SimplifyEqualityComparisonWithOnlyPredecessor(TerminatorInst *TI,
 
484
                                              BasicBlock *Pred) {
 
485
  Value *PredVal = isValueEqualityComparison(Pred->getTerminator());
 
486
  if (!PredVal) return false;  // Not a value comparison in predecessor.
 
487
 
 
488
  Value *ThisVal = isValueEqualityComparison(TI);
 
489
  assert(ThisVal && "This isn't a value comparison!!");
 
490
  if (ThisVal != PredVal) return false;  // Different predicates.
 
491
 
 
492
  // Find out information about when control will move from Pred to TI's block.
 
493
  std::vector<std::pair<ConstantInt*, BasicBlock*> > PredCases;
 
494
  BasicBlock *PredDef = GetValueEqualityComparisonCases(Pred->getTerminator(),
 
495
                                                        PredCases);
 
496
  EliminateBlockCases(PredDef, PredCases);  // Remove default from cases.
 
497
 
 
498
  // Find information about how control leaves this block.
 
499
  std::vector<std::pair<ConstantInt*, BasicBlock*> > ThisCases;
 
500
  BasicBlock *ThisDef = GetValueEqualityComparisonCases(TI, ThisCases);
 
501
  EliminateBlockCases(ThisDef, ThisCases);  // Remove default from cases.
 
502
 
 
503
  // If TI's block is the default block from Pred's comparison, potentially
 
504
  // simplify TI based on this knowledge.
 
505
  if (PredDef == TI->getParent()) {
 
506
    // If we are here, we know that the value is none of those cases listed in
 
507
    // PredCases.  If there are any cases in ThisCases that are in PredCases, we
 
508
    // can simplify TI.
 
509
    if (ValuesOverlap(PredCases, ThisCases)) {
 
510
      if (isa<BranchInst>(TI)) {
 
511
        // Okay, one of the successors of this condbr is dead.  Convert it to a
 
512
        // uncond br.
 
513
        assert(ThisCases.size() == 1 && "Branch can only have one case!");
 
514
        // Insert the new branch.
 
515
        Instruction *NI = BranchInst::Create(ThisDef, TI);
 
516
        (void) NI;
 
517
 
 
518
        // Remove PHI node entries for the dead edge.
 
519
        ThisCases[0].second->removePredecessor(TI->getParent());
 
520
 
 
521
        DEBUG(dbgs() << "Threading pred instr: " << *Pred->getTerminator()
 
522
             << "Through successor TI: " << *TI << "Leaving: " << *NI << "\n");
 
523
 
 
524
        EraseTerminatorInstAndDCECond(TI);
 
525
        return true;
 
526
 
 
527
      } else {
 
528
        SwitchInst *SI = cast<SwitchInst>(TI);
 
529
        // Okay, TI has cases that are statically dead, prune them away.
 
530
        SmallPtrSet<Constant*, 16> DeadCases;
 
531
        for (unsigned i = 0, e = PredCases.size(); i != e; ++i)
 
532
          DeadCases.insert(PredCases[i].first);
 
533
 
 
534
        DEBUG(dbgs() << "Threading pred instr: " << *Pred->getTerminator()
 
535
                     << "Through successor TI: " << *TI);
 
536
 
 
537
        for (unsigned i = SI->getNumCases()-1; i != 0; --i)
 
538
          if (DeadCases.count(SI->getCaseValue(i))) {
 
539
            SI->getSuccessor(i)->removePredecessor(TI->getParent());
 
540
            SI->removeCase(i);
 
541
          }
 
542
 
 
543
        DEBUG(dbgs() << "Leaving: " << *TI << "\n");
 
544
        return true;
 
545
      }
 
546
    }
 
547
 
 
548
  } else {
 
549
    // Otherwise, TI's block must correspond to some matched value.  Find out
 
550
    // which value (or set of values) this is.
 
551
    ConstantInt *TIV = 0;
 
552
    BasicBlock *TIBB = TI->getParent();
 
553
    for (unsigned i = 0, e = PredCases.size(); i != e; ++i)
 
554
      if (PredCases[i].second == TIBB) {
 
555
        if (TIV == 0)
 
556
          TIV = PredCases[i].first;
 
557
        else
 
558
          return false;  // Cannot handle multiple values coming to this block.
 
559
      }
 
560
    assert(TIV && "No edge from pred to succ?");
 
561
 
 
562
    // Okay, we found the one constant that our value can be if we get into TI's
 
563
    // BB.  Find out which successor will unconditionally be branched to.
 
564
    BasicBlock *TheRealDest = 0;
 
565
    for (unsigned i = 0, e = ThisCases.size(); i != e; ++i)
 
566
      if (ThisCases[i].first == TIV) {
 
567
        TheRealDest = ThisCases[i].second;
 
568
        break;
 
569
      }
 
570
 
 
571
    // If not handled by any explicit cases, it is handled by the default case.
 
572
    if (TheRealDest == 0) TheRealDest = ThisDef;
 
573
 
 
574
    // Remove PHI node entries for dead edges.
 
575
    BasicBlock *CheckEdge = TheRealDest;
 
576
    for (succ_iterator SI = succ_begin(TIBB), e = succ_end(TIBB); SI != e; ++SI)
 
577
      if (*SI != CheckEdge)
 
578
        (*SI)->removePredecessor(TIBB);
 
579
      else
 
580
        CheckEdge = 0;
 
581
 
 
582
    // Insert the new branch.
 
583
    Instruction *NI = BranchInst::Create(TheRealDest, TI);
 
584
    (void) NI;
 
585
 
 
586
    DEBUG(dbgs() << "Threading pred instr: " << *Pred->getTerminator()
 
587
              << "Through successor TI: " << *TI << "Leaving: " << *NI << "\n");
 
588
 
 
589
    EraseTerminatorInstAndDCECond(TI);
 
590
    return true;
 
591
  }
 
592
  return false;
 
593
}
 
594
 
 
595
namespace {
 
596
  /// ConstantIntOrdering - This class implements a stable ordering of constant
 
597
  /// integers that does not depend on their address.  This is important for
 
598
  /// applications that sort ConstantInt's to ensure uniqueness.
 
599
  struct ConstantIntOrdering {
 
600
    bool operator()(const ConstantInt *LHS, const ConstantInt *RHS) const {
 
601
      return LHS->getValue().ult(RHS->getValue());
 
602
    }
 
603
  };
 
604
}
 
605
 
 
606
/// FoldValueComparisonIntoPredecessors - The specified terminator is a value
 
607
/// equality comparison instruction (either a switch or a branch on "X == c").
 
608
/// See if any of the predecessors of the terminator block are value comparisons
 
609
/// on the same value.  If so, and if safe to do so, fold them together.
 
610
bool SimplifyCFGOpt::FoldValueComparisonIntoPredecessors(TerminatorInst *TI) {
 
611
  BasicBlock *BB = TI->getParent();
 
612
  Value *CV = isValueEqualityComparison(TI);  // CondVal
 
613
  assert(CV && "Not a comparison?");
 
614
  bool Changed = false;
 
615
 
 
616
  SmallVector<BasicBlock*, 16> Preds(pred_begin(BB), pred_end(BB));
 
617
  while (!Preds.empty()) {
 
618
    BasicBlock *Pred = Preds.pop_back_val();
 
619
 
 
620
    // See if the predecessor is a comparison with the same value.
 
621
    TerminatorInst *PTI = Pred->getTerminator();
 
622
    Value *PCV = isValueEqualityComparison(PTI);  // PredCondVal
 
623
 
 
624
    if (PCV == CV && SafeToMergeTerminators(TI, PTI)) {
 
625
      // Figure out which 'cases' to copy from SI to PSI.
 
626
      std::vector<std::pair<ConstantInt*, BasicBlock*> > BBCases;
 
627
      BasicBlock *BBDefault = GetValueEqualityComparisonCases(TI, BBCases);
 
628
 
 
629
      std::vector<std::pair<ConstantInt*, BasicBlock*> > PredCases;
 
630
      BasicBlock *PredDefault = GetValueEqualityComparisonCases(PTI, PredCases);
 
631
 
 
632
      // Based on whether the default edge from PTI goes to BB or not, fill in
 
633
      // PredCases and PredDefault with the new switch cases we would like to
 
634
      // build.
 
635
      SmallVector<BasicBlock*, 8> NewSuccessors;
 
636
 
 
637
      if (PredDefault == BB) {
 
638
        // If this is the default destination from PTI, only the edges in TI
 
639
        // that don't occur in PTI, or that branch to BB will be activated.
 
640
        std::set<ConstantInt*, ConstantIntOrdering> PTIHandled;
 
641
        for (unsigned i = 0, e = PredCases.size(); i != e; ++i)
 
642
          if (PredCases[i].second != BB)
 
643
            PTIHandled.insert(PredCases[i].first);
 
644
          else {
 
645
            // The default destination is BB, we don't need explicit targets.
 
646
            std::swap(PredCases[i], PredCases.back());
 
647
            PredCases.pop_back();
 
648
            --i; --e;
 
649
          }
 
650
 
 
651
        // Reconstruct the new switch statement we will be building.
 
652
        if (PredDefault != BBDefault) {
 
653
          PredDefault->removePredecessor(Pred);
 
654
          PredDefault = BBDefault;
 
655
          NewSuccessors.push_back(BBDefault);
 
656
        }
 
657
        for (unsigned i = 0, e = BBCases.size(); i != e; ++i)
 
658
          if (!PTIHandled.count(BBCases[i].first) &&
 
659
              BBCases[i].second != BBDefault) {
 
660
            PredCases.push_back(BBCases[i]);
 
661
            NewSuccessors.push_back(BBCases[i].second);
 
662
          }
 
663
 
 
664
      } else {
 
665
        // If this is not the default destination from PSI, only the edges
 
666
        // in SI that occur in PSI with a destination of BB will be
 
667
        // activated.
 
668
        std::set<ConstantInt*, ConstantIntOrdering> PTIHandled;
 
669
        for (unsigned i = 0, e = PredCases.size(); i != e; ++i)
 
670
          if (PredCases[i].second == BB) {
 
671
            PTIHandled.insert(PredCases[i].first);
 
672
            std::swap(PredCases[i], PredCases.back());
 
673
            PredCases.pop_back();
 
674
            --i; --e;
 
675
          }
 
676
 
 
677
        // Okay, now we know which constants were sent to BB from the
 
678
        // predecessor.  Figure out where they will all go now.
 
679
        for (unsigned i = 0, e = BBCases.size(); i != e; ++i)
 
680
          if (PTIHandled.count(BBCases[i].first)) {
 
681
            // If this is one we are capable of getting...
 
682
            PredCases.push_back(BBCases[i]);
 
683
            NewSuccessors.push_back(BBCases[i].second);
 
684
            PTIHandled.erase(BBCases[i].first);// This constant is taken care of
 
685
          }
 
686
 
 
687
        // If there are any constants vectored to BB that TI doesn't handle,
 
688
        // they must go to the default destination of TI.
 
689
        for (std::set<ConstantInt*, ConstantIntOrdering>::iterator I = 
 
690
                                    PTIHandled.begin(),
 
691
               E = PTIHandled.end(); I != E; ++I) {
 
692
          PredCases.push_back(std::make_pair(*I, BBDefault));
 
693
          NewSuccessors.push_back(BBDefault);
 
694
        }
 
695
      }
 
696
 
 
697
      // Okay, at this point, we know which new successor Pred will get.  Make
 
698
      // sure we update the number of entries in the PHI nodes for these
 
699
      // successors.
 
700
      for (unsigned i = 0, e = NewSuccessors.size(); i != e; ++i)
 
701
        AddPredecessorToBlock(NewSuccessors[i], Pred, BB);
 
702
 
 
703
      // Convert pointer to int before we switch.
 
704
      if (CV->getType()->isPointerTy()) {
 
705
        assert(TD && "Cannot switch on pointer without TargetData");
 
706
        CV = new PtrToIntInst(CV, TD->getIntPtrType(CV->getContext()),
 
707
                              "magicptr", PTI);
 
708
      }
 
709
 
 
710
      // Now that the successors are updated, create the new Switch instruction.
 
711
      SwitchInst *NewSI = SwitchInst::Create(CV, PredDefault,
 
712
                                             PredCases.size(), PTI);
 
713
      for (unsigned i = 0, e = PredCases.size(); i != e; ++i)
 
714
        NewSI->addCase(PredCases[i].first, PredCases[i].second);
 
715
 
 
716
      EraseTerminatorInstAndDCECond(PTI);
 
717
 
 
718
      // Okay, last check.  If BB is still a successor of PSI, then we must
 
719
      // have an infinite loop case.  If so, add an infinitely looping block
 
720
      // to handle the case to preserve the behavior of the code.
 
721
      BasicBlock *InfLoopBlock = 0;
 
722
      for (unsigned i = 0, e = NewSI->getNumSuccessors(); i != e; ++i)
 
723
        if (NewSI->getSuccessor(i) == BB) {
 
724
          if (InfLoopBlock == 0) {
 
725
            // Insert it at the end of the function, because it's either code,
 
726
            // or it won't matter if it's hot. :)
 
727
            InfLoopBlock = BasicBlock::Create(BB->getContext(),
 
728
                                              "infloop", BB->getParent());
 
729
            BranchInst::Create(InfLoopBlock, InfLoopBlock);
 
730
          }
 
731
          NewSI->setSuccessor(i, InfLoopBlock);
 
732
        }
 
733
 
 
734
      Changed = true;
 
735
    }
 
736
  }
 
737
  return Changed;
 
738
}
 
739
 
 
740
// isSafeToHoistInvoke - If we would need to insert a select that uses the
 
741
// value of this invoke (comments in HoistThenElseCodeToIf explain why we
 
742
// would need to do this), we can't hoist the invoke, as there is nowhere
 
743
// to put the select in this case.
 
744
static bool isSafeToHoistInvoke(BasicBlock *BB1, BasicBlock *BB2,
 
745
                                Instruction *I1, Instruction *I2) {
 
746
  for (succ_iterator SI = succ_begin(BB1), E = succ_end(BB1); SI != E; ++SI) {
 
747
    PHINode *PN;
 
748
    for (BasicBlock::iterator BBI = SI->begin();
 
749
         (PN = dyn_cast<PHINode>(BBI)); ++BBI) {
 
750
      Value *BB1V = PN->getIncomingValueForBlock(BB1);
 
751
      Value *BB2V = PN->getIncomingValueForBlock(BB2);
 
752
      if (BB1V != BB2V && (BB1V==I1 || BB2V==I2)) {
 
753
        return false;
 
754
      }
 
755
    }
 
756
  }
 
757
  return true;
 
758
}
 
759
 
 
760
/// HoistThenElseCodeToIf - Given a conditional branch that goes to BB1 and
 
761
/// BB2, hoist any common code in the two blocks up into the branch block.  The
 
762
/// caller of this function guarantees that BI's block dominates BB1 and BB2.
 
763
static bool HoistThenElseCodeToIf(BranchInst *BI) {
 
764
  // This does very trivial matching, with limited scanning, to find identical
 
765
  // instructions in the two blocks.  In particular, we don't want to get into
 
766
  // O(M*N) situations here where M and N are the sizes of BB1 and BB2.  As
 
767
  // such, we currently just scan for obviously identical instructions in an
 
768
  // identical order.
 
769
  BasicBlock *BB1 = BI->getSuccessor(0);  // The true destination.
 
770
  BasicBlock *BB2 = BI->getSuccessor(1);  // The false destination
 
771
 
 
772
  BasicBlock::iterator BB1_Itr = BB1->begin();
 
773
  BasicBlock::iterator BB2_Itr = BB2->begin();
 
774
 
 
775
  Instruction *I1 = BB1_Itr++, *I2 = BB2_Itr++;
 
776
  while (isa<DbgInfoIntrinsic>(I1))
 
777
    I1 = BB1_Itr++;
 
778
  while (isa<DbgInfoIntrinsic>(I2))
 
779
    I2 = BB2_Itr++;
 
780
  if (I1->getOpcode() != I2->getOpcode() || isa<PHINode>(I1) ||
 
781
      !I1->isIdenticalToWhenDefined(I2) ||
 
782
      (isa<InvokeInst>(I1) && !isSafeToHoistInvoke(BB1, BB2, I1, I2)))
 
783
    return false;
 
784
 
 
785
  // If we get here, we can hoist at least one instruction.
 
786
  BasicBlock *BIParent = BI->getParent();
 
787
 
 
788
  do {
 
789
    // If we are hoisting the terminator instruction, don't move one (making a
 
790
    // broken BB), instead clone it, and remove BI.
 
791
    if (isa<TerminatorInst>(I1))
 
792
      goto HoistTerminator;
 
793
 
 
794
    // For a normal instruction, we just move one to right before the branch,
 
795
    // then replace all uses of the other with the first.  Finally, we remove
 
796
    // the now redundant second instruction.
 
797
    BIParent->getInstList().splice(BI, BB1->getInstList(), I1);
 
798
    if (!I2->use_empty())
 
799
      I2->replaceAllUsesWith(I1);
 
800
    I1->intersectOptionalDataWith(I2);
 
801
    BB2->getInstList().erase(I2);
 
802
 
 
803
    I1 = BB1_Itr++;
 
804
    while (isa<DbgInfoIntrinsic>(I1))
 
805
      I1 = BB1_Itr++;
 
806
    I2 = BB2_Itr++;
 
807
    while (isa<DbgInfoIntrinsic>(I2))
 
808
      I2 = BB2_Itr++;
 
809
  } while (I1->getOpcode() == I2->getOpcode() &&
 
810
           I1->isIdenticalToWhenDefined(I2));
 
811
 
 
812
  return true;
 
813
 
 
814
HoistTerminator:
 
815
  // It may not be possible to hoist an invoke.
 
816
  if (isa<InvokeInst>(I1) && !isSafeToHoistInvoke(BB1, BB2, I1, I2))
 
817
    return true;
 
818
 
 
819
  // Okay, it is safe to hoist the terminator.
 
820
  Instruction *NT = I1->clone();
 
821
  BIParent->getInstList().insert(BI, NT);
 
822
  if (!NT->getType()->isVoidTy()) {
 
823
    I1->replaceAllUsesWith(NT);
 
824
    I2->replaceAllUsesWith(NT);
 
825
    NT->takeName(I1);
 
826
  }
 
827
 
 
828
  // Hoisting one of the terminators from our successor is a great thing.
 
829
  // Unfortunately, the successors of the if/else blocks may have PHI nodes in
 
830
  // them.  If they do, all PHI entries for BB1/BB2 must agree for all PHI
 
831
  // nodes, so we insert select instruction to compute the final result.
 
832
  std::map<std::pair<Value*,Value*>, SelectInst*> InsertedSelects;
 
833
  for (succ_iterator SI = succ_begin(BB1), E = succ_end(BB1); SI != E; ++SI) {
 
834
    PHINode *PN;
 
835
    for (BasicBlock::iterator BBI = SI->begin();
 
836
         (PN = dyn_cast<PHINode>(BBI)); ++BBI) {
 
837
      Value *BB1V = PN->getIncomingValueForBlock(BB1);
 
838
      Value *BB2V = PN->getIncomingValueForBlock(BB2);
 
839
      if (BB1V != BB2V) {
 
840
        // These values do not agree.  Insert a select instruction before NT
 
841
        // that determines the right value.
 
842
        SelectInst *&SI = InsertedSelects[std::make_pair(BB1V, BB2V)];
 
843
        if (SI == 0)
 
844
          SI = SelectInst::Create(BI->getCondition(), BB1V, BB2V,
 
845
                                  BB1V->getName()+"."+BB2V->getName(), NT);
 
846
        // Make the PHI node use the select for all incoming values for BB1/BB2
 
847
        for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i)
 
848
          if (PN->getIncomingBlock(i) == BB1 || PN->getIncomingBlock(i) == BB2)
 
849
            PN->setIncomingValue(i, SI);
 
850
      }
 
851
    }
 
852
  }
 
853
 
 
854
  // Update any PHI nodes in our new successors.
 
855
  for (succ_iterator SI = succ_begin(BB1), E = succ_end(BB1); SI != E; ++SI)
 
856
    AddPredecessorToBlock(*SI, BIParent, BB1);
 
857
 
 
858
  EraseTerminatorInstAndDCECond(BI);
 
859
  return true;
 
860
}
 
861
 
 
862
/// SpeculativelyExecuteBB - Given a conditional branch that goes to BB1
 
863
/// and an BB2 and the only successor of BB1 is BB2, hoist simple code
 
864
/// (for now, restricted to a single instruction that's side effect free) from
 
865
/// the BB1 into the branch block to speculatively execute it.
 
866
static bool SpeculativelyExecuteBB(BranchInst *BI, BasicBlock *BB1) {
 
867
  // Only speculatively execution a single instruction (not counting the
 
868
  // terminator) for now.
 
869
  Instruction *HInst = NULL;
 
870
  Instruction *Term = BB1->getTerminator();
 
871
  for (BasicBlock::iterator BBI = BB1->begin(), BBE = BB1->end();
 
872
       BBI != BBE; ++BBI) {
 
873
    Instruction *I = BBI;
 
874
    // Skip debug info.
 
875
    if (isa<DbgInfoIntrinsic>(I))   continue;
 
876
    if (I == Term)  break;
 
877
 
 
878
    if (!HInst)
 
879
      HInst = I;
 
880
    else
 
881
      return false;
 
882
  }
 
883
  if (!HInst)
 
884
    return false;
 
885
 
 
886
  // Be conservative for now. FP select instruction can often be expensive.
 
887
  Value *BrCond = BI->getCondition();
 
888
  if (isa<Instruction>(BrCond) &&
 
889
      cast<Instruction>(BrCond)->getOpcode() == Instruction::FCmp)
 
890
    return false;
 
891
 
 
892
  // If BB1 is actually on the false edge of the conditional branch, remember
 
893
  // to swap the select operands later.
 
894
  bool Invert = false;
 
895
  if (BB1 != BI->getSuccessor(0)) {
 
896
    assert(BB1 == BI->getSuccessor(1) && "No edge from 'if' block?");
 
897
    Invert = true;
 
898
  }
 
899
 
 
900
  // Turn
 
901
  // BB:
 
902
  //     %t1 = icmp
 
903
  //     br i1 %t1, label %BB1, label %BB2
 
904
  // BB1:
 
905
  //     %t3 = add %t2, c
 
906
  //     br label BB2
 
907
  // BB2:
 
908
  // =>
 
909
  // BB:
 
910
  //     %t1 = icmp
 
911
  //     %t4 = add %t2, c
 
912
  //     %t3 = select i1 %t1, %t2, %t3
 
913
  switch (HInst->getOpcode()) {
 
914
  default: return false;  // Not safe / profitable to hoist.
 
915
  case Instruction::Add:
 
916
  case Instruction::Sub:
 
917
    // Not worth doing for vector ops.
 
918
    if (HInst->getType()->isVectorTy())
 
919
      return false;
 
920
    break;
 
921
  case Instruction::And:
 
922
  case Instruction::Or:
 
923
  case Instruction::Xor:
 
924
  case Instruction::Shl:
 
925
  case Instruction::LShr:
 
926
  case Instruction::AShr:
 
927
    // Don't mess with vector operations.
 
928
    if (HInst->getType()->isVectorTy())
 
929
      return false;
 
930
    break;   // These are all cheap and non-trapping instructions.
 
931
  }
 
932
  
 
933
  // If the instruction is obviously dead, don't try to predicate it.
 
934
  if (HInst->use_empty()) {
 
935
    HInst->eraseFromParent();
 
936
    return true;
 
937
  }
 
938
 
 
939
  // Can we speculatively execute the instruction? And what is the value 
 
940
  // if the condition is false? Consider the phi uses, if the incoming value
 
941
  // from the "if" block are all the same V, then V is the value of the
 
942
  // select if the condition is false.
 
943
  BasicBlock *BIParent = BI->getParent();
 
944
  SmallVector<PHINode*, 4> PHIUses;
 
945
  Value *FalseV = NULL;
 
946
  
 
947
  BasicBlock *BB2 = BB1->getTerminator()->getSuccessor(0);
 
948
  for (Value::use_iterator UI = HInst->use_begin(), E = HInst->use_end();
 
949
       UI != E; ++UI) {
 
950
    // Ignore any user that is not a PHI node in BB2.  These can only occur in
 
951
    // unreachable blocks, because they would not be dominated by the instr.
 
952
    PHINode *PN = dyn_cast<PHINode>(UI);
 
953
    if (!PN || PN->getParent() != BB2)
 
954
      return false;
 
955
    PHIUses.push_back(PN);
 
956
    
 
957
    Value *PHIV = PN->getIncomingValueForBlock(BIParent);
 
958
    if (!FalseV)
 
959
      FalseV = PHIV;
 
960
    else if (FalseV != PHIV)
 
961
      return false;  // Inconsistent value when condition is false.
 
962
  }
 
963
  
 
964
  assert(FalseV && "Must have at least one user, and it must be a PHI");
 
965
 
 
966
  // Do not hoist the instruction if any of its operands are defined but not
 
967
  // used in this BB. The transformation will prevent the operand from
 
968
  // being sunk into the use block.
 
969
  for (User::op_iterator i = HInst->op_begin(), e = HInst->op_end(); 
 
970
       i != e; ++i) {
 
971
    Instruction *OpI = dyn_cast<Instruction>(*i);
 
972
    if (OpI && OpI->getParent() == BIParent &&
 
973
        !OpI->isUsedInBasicBlock(BIParent))
 
974
      return false;
 
975
  }
 
976
 
 
977
  // If we get here, we can hoist the instruction. Try to place it
 
978
  // before the icmp instruction preceding the conditional branch.
 
979
  BasicBlock::iterator InsertPos = BI;
 
980
  if (InsertPos != BIParent->begin())
 
981
    --InsertPos;
 
982
  // Skip debug info between condition and branch.
 
983
  while (InsertPos != BIParent->begin() && isa<DbgInfoIntrinsic>(InsertPos))
 
984
    --InsertPos;
 
985
  if (InsertPos == BrCond && !isa<PHINode>(BrCond)) {
 
986
    SmallPtrSet<Instruction *, 4> BB1Insns;
 
987
    for(BasicBlock::iterator BB1I = BB1->begin(), BB1E = BB1->end(); 
 
988
        BB1I != BB1E; ++BB1I) 
 
989
      BB1Insns.insert(BB1I);
 
990
    for(Value::use_iterator UI = BrCond->use_begin(), UE = BrCond->use_end();
 
991
        UI != UE; ++UI) {
 
992
      Instruction *Use = cast<Instruction>(*UI);
 
993
      if (BB1Insns.count(Use)) {
 
994
        // If BrCond uses the instruction that place it just before
 
995
        // branch instruction.
 
996
        InsertPos = BI;
 
997
        break;
 
998
      }
 
999
    }
 
1000
  } else
 
1001
    InsertPos = BI;
 
1002
  BIParent->getInstList().splice(InsertPos, BB1->getInstList(), HInst);
 
1003
 
 
1004
  // Create a select whose true value is the speculatively executed value and
 
1005
  // false value is the previously determined FalseV.
 
1006
  SelectInst *SI;
 
1007
  if (Invert)
 
1008
    SI = SelectInst::Create(BrCond, FalseV, HInst,
 
1009
                            FalseV->getName() + "." + HInst->getName(), BI);
 
1010
  else
 
1011
    SI = SelectInst::Create(BrCond, HInst, FalseV,
 
1012
                            HInst->getName() + "." + FalseV->getName(), BI);
 
1013
 
 
1014
  // Make the PHI node use the select for all incoming values for "then" and
 
1015
  // "if" blocks.
 
1016
  for (unsigned i = 0, e = PHIUses.size(); i != e; ++i) {
 
1017
    PHINode *PN = PHIUses[i];
 
1018
    for (unsigned j = 0, ee = PN->getNumIncomingValues(); j != ee; ++j)
 
1019
      if (PN->getIncomingBlock(j) == BB1 ||
 
1020
          PN->getIncomingBlock(j) == BIParent)
 
1021
        PN->setIncomingValue(j, SI);
 
1022
  }
 
1023
 
 
1024
  ++NumSpeculations;
 
1025
  return true;
 
1026
}
 
1027
 
 
1028
/// BlockIsSimpleEnoughToThreadThrough - Return true if we can thread a branch
 
1029
/// across this block.
 
1030
static bool BlockIsSimpleEnoughToThreadThrough(BasicBlock *BB) {
 
1031
  BranchInst *BI = cast<BranchInst>(BB->getTerminator());
 
1032
  unsigned Size = 0;
 
1033
  
 
1034
  for (BasicBlock::iterator BBI = BB->begin(); &*BBI != BI; ++BBI) {
 
1035
    if (isa<DbgInfoIntrinsic>(BBI))
 
1036
      continue;
 
1037
    if (Size > 10) return false;  // Don't clone large BB's.
 
1038
    ++Size;
 
1039
    
 
1040
    // We can only support instructions that do not define values that are
 
1041
    // live outside of the current basic block.
 
1042
    for (Value::use_iterator UI = BBI->use_begin(), E = BBI->use_end();
 
1043
         UI != E; ++UI) {
 
1044
      Instruction *U = cast<Instruction>(*UI);
 
1045
      if (U->getParent() != BB || isa<PHINode>(U)) return false;
 
1046
    }
 
1047
    
 
1048
    // Looks ok, continue checking.
 
1049
  }
 
1050
 
 
1051
  return true;
 
1052
}
 
1053
 
 
1054
/// FoldCondBranchOnPHI - If we have a conditional branch on a PHI node value
 
1055
/// that is defined in the same block as the branch and if any PHI entries are
 
1056
/// constants, thread edges corresponding to that entry to be branches to their
 
1057
/// ultimate destination.
 
1058
static bool FoldCondBranchOnPHI(BranchInst *BI) {
 
1059
  BasicBlock *BB = BI->getParent();
 
1060
  PHINode *PN = dyn_cast<PHINode>(BI->getCondition());
 
1061
  // NOTE: we currently cannot transform this case if the PHI node is used
 
1062
  // outside of the block.
 
1063
  if (!PN || PN->getParent() != BB || !PN->hasOneUse())
 
1064
    return false;
 
1065
  
 
1066
  // Degenerate case of a single entry PHI.
 
1067
  if (PN->getNumIncomingValues() == 1) {
 
1068
    FoldSingleEntryPHINodes(PN->getParent());
 
1069
    return true;    
 
1070
  }
 
1071
 
 
1072
  // Now we know that this block has multiple preds and two succs.
 
1073
  if (!BlockIsSimpleEnoughToThreadThrough(BB)) return false;
 
1074
  
 
1075
  // Okay, this is a simple enough basic block.  See if any phi values are
 
1076
  // constants.
 
1077
  for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i) {
 
1078
    ConstantInt *CB;
 
1079
    if ((CB = dyn_cast<ConstantInt>(PN->getIncomingValue(i))) &&
 
1080
        CB->getType()->isIntegerTy(1)) {
 
1081
      // Okay, we now know that all edges from PredBB should be revectored to
 
1082
      // branch to RealDest.
 
1083
      BasicBlock *PredBB = PN->getIncomingBlock(i);
 
1084
      BasicBlock *RealDest = BI->getSuccessor(!CB->getZExtValue());
 
1085
      
 
1086
      if (RealDest == BB) continue;  // Skip self loops.
 
1087
      
 
1088
      // The dest block might have PHI nodes, other predecessors and other
 
1089
      // difficult cases.  Instead of being smart about this, just insert a new
 
1090
      // block that jumps to the destination block, effectively splitting
 
1091
      // the edge we are about to create.
 
1092
      BasicBlock *EdgeBB = BasicBlock::Create(BB->getContext(),
 
1093
                                              RealDest->getName()+".critedge",
 
1094
                                              RealDest->getParent(), RealDest);
 
1095
      BranchInst::Create(RealDest, EdgeBB);
 
1096
      PHINode *PN;
 
1097
      for (BasicBlock::iterator BBI = RealDest->begin();
 
1098
           (PN = dyn_cast<PHINode>(BBI)); ++BBI) {
 
1099
        Value *V = PN->getIncomingValueForBlock(BB);
 
1100
        PN->addIncoming(V, EdgeBB);
 
1101
      }
 
1102
 
 
1103
      // BB may have instructions that are being threaded over.  Clone these
 
1104
      // instructions into EdgeBB.  We know that there will be no uses of the
 
1105
      // cloned instructions outside of EdgeBB.
 
1106
      BasicBlock::iterator InsertPt = EdgeBB->begin();
 
1107
      std::map<Value*, Value*> TranslateMap;  // Track translated values.
 
1108
      for (BasicBlock::iterator BBI = BB->begin(); &*BBI != BI; ++BBI) {
 
1109
        if (PHINode *PN = dyn_cast<PHINode>(BBI)) {
 
1110
          TranslateMap[PN] = PN->getIncomingValueForBlock(PredBB);
 
1111
        } else {
 
1112
          // Clone the instruction.
 
1113
          Instruction *N = BBI->clone();
 
1114
          if (BBI->hasName()) N->setName(BBI->getName()+".c");
 
1115
          
 
1116
          // Update operands due to translation.
 
1117
          for (User::op_iterator i = N->op_begin(), e = N->op_end();
 
1118
               i != e; ++i) {
 
1119
            std::map<Value*, Value*>::iterator PI =
 
1120
              TranslateMap.find(*i);
 
1121
            if (PI != TranslateMap.end())
 
1122
              *i = PI->second;
 
1123
          }
 
1124
          
 
1125
          // Check for trivial simplification.
 
1126
          if (Constant *C = ConstantFoldInstruction(N)) {
 
1127
            TranslateMap[BBI] = C;
 
1128
            delete N;   // Constant folded away, don't need actual inst
 
1129
          } else {
 
1130
            // Insert the new instruction into its new home.
 
1131
            EdgeBB->getInstList().insert(InsertPt, N);
 
1132
            if (!BBI->use_empty())
 
1133
              TranslateMap[BBI] = N;
 
1134
          }
 
1135
        }
 
1136
      }
 
1137
 
 
1138
      // Loop over all of the edges from PredBB to BB, changing them to branch
 
1139
      // to EdgeBB instead.
 
1140
      TerminatorInst *PredBBTI = PredBB->getTerminator();
 
1141
      for (unsigned i = 0, e = PredBBTI->getNumSuccessors(); i != e; ++i)
 
1142
        if (PredBBTI->getSuccessor(i) == BB) {
 
1143
          BB->removePredecessor(PredBB);
 
1144
          PredBBTI->setSuccessor(i, EdgeBB);
 
1145
        }
 
1146
      
 
1147
      // Recurse, simplifying any other constants.
 
1148
      return FoldCondBranchOnPHI(BI) | true;
 
1149
    }
 
1150
  }
 
1151
 
 
1152
  return false;
 
1153
}
 
1154
 
 
1155
/// FoldTwoEntryPHINode - Given a BB that starts with the specified two-entry
 
1156
/// PHI node, see if we can eliminate it.
 
1157
static bool FoldTwoEntryPHINode(PHINode *PN) {
 
1158
  // Ok, this is a two entry PHI node.  Check to see if this is a simple "if
 
1159
  // statement", which has a very simple dominance structure.  Basically, we
 
1160
  // are trying to find the condition that is being branched on, which
 
1161
  // subsequently causes this merge to happen.  We really want control
 
1162
  // dependence information for this check, but simplifycfg can't keep it up
 
1163
  // to date, and this catches most of the cases we care about anyway.
 
1164
  //
 
1165
  BasicBlock *BB = PN->getParent();
 
1166
  BasicBlock *IfTrue, *IfFalse;
 
1167
  Value *IfCond = GetIfCondition(BB, IfTrue, IfFalse);
 
1168
  if (!IfCond) return false;
 
1169
  
 
1170
  // Okay, we found that we can merge this two-entry phi node into a select.
 
1171
  // Doing so would require us to fold *all* two entry phi nodes in this block.
 
1172
  // At some point this becomes non-profitable (particularly if the target
 
1173
  // doesn't support cmov's).  Only do this transformation if there are two or
 
1174
  // fewer PHI nodes in this block.
 
1175
  unsigned NumPhis = 0;
 
1176
  for (BasicBlock::iterator I = BB->begin(); isa<PHINode>(I); ++NumPhis, ++I)
 
1177
    if (NumPhis > 2)
 
1178
      return false;
 
1179
  
 
1180
  DEBUG(dbgs() << "FOUND IF CONDITION!  " << *IfCond << "  T: "
 
1181
        << IfTrue->getName() << "  F: " << IfFalse->getName() << "\n");
 
1182
  
 
1183
  // Loop over the PHI's seeing if we can promote them all to select
 
1184
  // instructions.  While we are at it, keep track of the instructions
 
1185
  // that need to be moved to the dominating block.
 
1186
  std::set<Instruction*> AggressiveInsts;
 
1187
  
 
1188
  BasicBlock::iterator AfterPHIIt = BB->begin();
 
1189
  while (isa<PHINode>(AfterPHIIt)) {
 
1190
    PHINode *PN = cast<PHINode>(AfterPHIIt++);
 
1191
    if (PN->getIncomingValue(0) == PN->getIncomingValue(1)) {
 
1192
      if (PN->getIncomingValue(0) != PN)
 
1193
        PN->replaceAllUsesWith(PN->getIncomingValue(0));
 
1194
      else
 
1195
        PN->replaceAllUsesWith(UndefValue::get(PN->getType()));
 
1196
    } else if (!DominatesMergePoint(PN->getIncomingValue(0), BB,
 
1197
                                    &AggressiveInsts) ||
 
1198
               !DominatesMergePoint(PN->getIncomingValue(1), BB,
 
1199
                                    &AggressiveInsts)) {
 
1200
      return false;
 
1201
    }
 
1202
  }
 
1203
  
 
1204
  // If we all PHI nodes are promotable, check to make sure that all
 
1205
  // instructions in the predecessor blocks can be promoted as well.  If
 
1206
  // not, we won't be able to get rid of the control flow, so it's not
 
1207
  // worth promoting to select instructions.
 
1208
  BasicBlock *DomBlock = 0, *IfBlock1 = 0, *IfBlock2 = 0;
 
1209
  PN = cast<PHINode>(BB->begin());
 
1210
  BasicBlock *Pred = PN->getIncomingBlock(0);
 
1211
  if (cast<BranchInst>(Pred->getTerminator())->isUnconditional()) {
 
1212
    IfBlock1 = Pred;
 
1213
    DomBlock = *pred_begin(Pred);
 
1214
    for (BasicBlock::iterator I = Pred->begin();
 
1215
         !isa<TerminatorInst>(I); ++I)
 
1216
      if (!AggressiveInsts.count(I) && !isa<DbgInfoIntrinsic>(I)) {
 
1217
        // This is not an aggressive instruction that we can promote.
 
1218
        // Because of this, we won't be able to get rid of the control
 
1219
        // flow, so the xform is not worth it.
 
1220
        return false;
 
1221
      }
 
1222
  }
 
1223
    
 
1224
  Pred = PN->getIncomingBlock(1);
 
1225
  if (cast<BranchInst>(Pred->getTerminator())->isUnconditional()) {
 
1226
    IfBlock2 = Pred;
 
1227
    DomBlock = *pred_begin(Pred);
 
1228
    for (BasicBlock::iterator I = Pred->begin();
 
1229
         !isa<TerminatorInst>(I); ++I)
 
1230
      if (!AggressiveInsts.count(I) && !isa<DbgInfoIntrinsic>(I)) {
 
1231
        // This is not an aggressive instruction that we can promote.
 
1232
        // Because of this, we won't be able to get rid of the control
 
1233
        // flow, so the xform is not worth it.
 
1234
        return false;
 
1235
      }
 
1236
  }
 
1237
      
 
1238
  // If we can still promote the PHI nodes after this gauntlet of tests,
 
1239
  // do all of the PHI's now.
 
1240
 
 
1241
  // Move all 'aggressive' instructions, which are defined in the
 
1242
  // conditional parts of the if's up to the dominating block.
 
1243
  if (IfBlock1) {
 
1244
    DomBlock->getInstList().splice(DomBlock->getTerminator(),
 
1245
                                   IfBlock1->getInstList(),
 
1246
                                   IfBlock1->begin(),
 
1247
                                   IfBlock1->getTerminator());
 
1248
  }
 
1249
  if (IfBlock2) {
 
1250
    DomBlock->getInstList().splice(DomBlock->getTerminator(),
 
1251
                                   IfBlock2->getInstList(),
 
1252
                                   IfBlock2->begin(),
 
1253
                                   IfBlock2->getTerminator());
 
1254
  }
 
1255
  
 
1256
  while (PHINode *PN = dyn_cast<PHINode>(BB->begin())) {
 
1257
    // Change the PHI node into a select instruction.
 
1258
    Value *TrueVal =
 
1259
      PN->getIncomingValue(PN->getIncomingBlock(0) == IfFalse);
 
1260
    Value *FalseVal =
 
1261
      PN->getIncomingValue(PN->getIncomingBlock(0) == IfTrue);
 
1262
    
 
1263
    Value *NV = SelectInst::Create(IfCond, TrueVal, FalseVal, "", AfterPHIIt);
 
1264
    PN->replaceAllUsesWith(NV);
 
1265
    NV->takeName(PN);
 
1266
    
 
1267
    BB->getInstList().erase(PN);
 
1268
  }
 
1269
  return true;
 
1270
}
 
1271
 
 
1272
/// isTerminatorFirstRelevantInsn - Return true if Term is very first 
 
1273
/// instruction ignoring Phi nodes and dbg intrinsics.
 
1274
static bool isTerminatorFirstRelevantInsn(BasicBlock *BB, Instruction *Term) {
 
1275
  BasicBlock::iterator BBI = Term;
 
1276
  while (BBI != BB->begin()) {
 
1277
    --BBI;
 
1278
    if (!isa<DbgInfoIntrinsic>(BBI))
 
1279
      break;
 
1280
  }
 
1281
 
 
1282
  if (isa<PHINode>(BBI) || &*BBI == Term || isa<DbgInfoIntrinsic>(BBI))
 
1283
    return true;
 
1284
  return false;
 
1285
}
 
1286
 
 
1287
/// SimplifyCondBranchToTwoReturns - If we found a conditional branch that goes
 
1288
/// to two returning blocks, try to merge them together into one return,
 
1289
/// introducing a select if the return values disagree.
 
1290
static bool SimplifyCondBranchToTwoReturns(BranchInst *BI) {
 
1291
  assert(BI->isConditional() && "Must be a conditional branch");
 
1292
  BasicBlock *TrueSucc = BI->getSuccessor(0);
 
1293
  BasicBlock *FalseSucc = BI->getSuccessor(1);
 
1294
  ReturnInst *TrueRet = cast<ReturnInst>(TrueSucc->getTerminator());
 
1295
  ReturnInst *FalseRet = cast<ReturnInst>(FalseSucc->getTerminator());
 
1296
  
 
1297
  // Check to ensure both blocks are empty (just a return) or optionally empty
 
1298
  // with PHI nodes.  If there are other instructions, merging would cause extra
 
1299
  // computation on one path or the other.
 
1300
  if (!isTerminatorFirstRelevantInsn(TrueSucc, TrueRet))
 
1301
    return false;
 
1302
  if (!isTerminatorFirstRelevantInsn(FalseSucc, FalseRet))
 
1303
    return false;
 
1304
 
 
1305
  // Okay, we found a branch that is going to two return nodes.  If
 
1306
  // there is no return value for this function, just change the
 
1307
  // branch into a return.
 
1308
  if (FalseRet->getNumOperands() == 0) {
 
1309
    TrueSucc->removePredecessor(BI->getParent());
 
1310
    FalseSucc->removePredecessor(BI->getParent());
 
1311
    ReturnInst::Create(BI->getContext(), 0, BI);
 
1312
    EraseTerminatorInstAndDCECond(BI);
 
1313
    return true;
 
1314
  }
 
1315
    
 
1316
  // Otherwise, figure out what the true and false return values are
 
1317
  // so we can insert a new select instruction.
 
1318
  Value *TrueValue = TrueRet->getReturnValue();
 
1319
  Value *FalseValue = FalseRet->getReturnValue();
 
1320
  
 
1321
  // Unwrap any PHI nodes in the return blocks.
 
1322
  if (PHINode *TVPN = dyn_cast_or_null<PHINode>(TrueValue))
 
1323
    if (TVPN->getParent() == TrueSucc)
 
1324
      TrueValue = TVPN->getIncomingValueForBlock(BI->getParent());
 
1325
  if (PHINode *FVPN = dyn_cast_or_null<PHINode>(FalseValue))
 
1326
    if (FVPN->getParent() == FalseSucc)
 
1327
      FalseValue = FVPN->getIncomingValueForBlock(BI->getParent());
 
1328
  
 
1329
  // In order for this transformation to be safe, we must be able to
 
1330
  // unconditionally execute both operands to the return.  This is
 
1331
  // normally the case, but we could have a potentially-trapping
 
1332
  // constant expression that prevents this transformation from being
 
1333
  // safe.
 
1334
  if (ConstantExpr *TCV = dyn_cast_or_null<ConstantExpr>(TrueValue))
 
1335
    if (TCV->canTrap())
 
1336
      return false;
 
1337
  if (ConstantExpr *FCV = dyn_cast_or_null<ConstantExpr>(FalseValue))
 
1338
    if (FCV->canTrap())
 
1339
      return false;
 
1340
  
 
1341
  // Okay, we collected all the mapped values and checked them for sanity, and
 
1342
  // defined to really do this transformation.  First, update the CFG.
 
1343
  TrueSucc->removePredecessor(BI->getParent());
 
1344
  FalseSucc->removePredecessor(BI->getParent());
 
1345
  
 
1346
  // Insert select instructions where needed.
 
1347
  Value *BrCond = BI->getCondition();
 
1348
  if (TrueValue) {
 
1349
    // Insert a select if the results differ.
 
1350
    if (TrueValue == FalseValue || isa<UndefValue>(FalseValue)) {
 
1351
    } else if (isa<UndefValue>(TrueValue)) {
 
1352
      TrueValue = FalseValue;
 
1353
    } else {
 
1354
      TrueValue = SelectInst::Create(BrCond, TrueValue,
 
1355
                                     FalseValue, "retval", BI);
 
1356
    }
 
1357
  }
 
1358
 
 
1359
  Value *RI = !TrueValue ?
 
1360
              ReturnInst::Create(BI->getContext(), BI) :
 
1361
              ReturnInst::Create(BI->getContext(), TrueValue, BI);
 
1362
  (void) RI;
 
1363
      
 
1364
  DEBUG(dbgs() << "\nCHANGING BRANCH TO TWO RETURNS INTO SELECT:"
 
1365
               << "\n  " << *BI << "NewRet = " << *RI
 
1366
               << "TRUEBLOCK: " << *TrueSucc << "FALSEBLOCK: "<< *FalseSucc);
 
1367
      
 
1368
  EraseTerminatorInstAndDCECond(BI);
 
1369
 
 
1370
  return true;
 
1371
}
 
1372
 
 
1373
/// FoldBranchToCommonDest - If this basic block is ONLY a setcc and a branch,
 
1374
/// and if a predecessor branches to us and one of our successors, fold the
 
1375
/// setcc into the predecessor and use logical operations to pick the right
 
1376
/// destination.
 
1377
bool llvm::FoldBranchToCommonDest(BranchInst *BI) {
 
1378
  BasicBlock *BB = BI->getParent();
 
1379
  Instruction *Cond = dyn_cast<Instruction>(BI->getCondition());
 
1380
  if (Cond == 0) return false;
 
1381
 
 
1382
  
 
1383
  // Only allow this if the condition is a simple instruction that can be
 
1384
  // executed unconditionally.  It must be in the same block as the branch, and
 
1385
  // must be at the front of the block.
 
1386
  BasicBlock::iterator FrontIt = BB->front();
 
1387
  // Ignore dbg intrinsics.
 
1388
  while(isa<DbgInfoIntrinsic>(FrontIt))
 
1389
    ++FrontIt;
 
1390
  if ((!isa<CmpInst>(Cond) && !isa<BinaryOperator>(Cond)) ||
 
1391
      Cond->getParent() != BB || &*FrontIt != Cond || !Cond->hasOneUse()) {
 
1392
    return false;
 
1393
  }
 
1394
  
 
1395
  // Make sure the instruction after the condition is the cond branch.
 
1396
  BasicBlock::iterator CondIt = Cond; ++CondIt;
 
1397
  // Ingore dbg intrinsics.
 
1398
  while(isa<DbgInfoIntrinsic>(CondIt))
 
1399
    ++CondIt;
 
1400
  if (&*CondIt != BI) {
 
1401
    assert (!isa<DbgInfoIntrinsic>(CondIt) && "Hey do not forget debug info!");
 
1402
    return false;
 
1403
  }
 
1404
 
 
1405
  // Cond is known to be a compare or binary operator.  Check to make sure that
 
1406
  // neither operand is a potentially-trapping constant expression.
 
1407
  if (ConstantExpr *CE = dyn_cast<ConstantExpr>(Cond->getOperand(0)))
 
1408
    if (CE->canTrap())
 
1409
      return false;
 
1410
  if (ConstantExpr *CE = dyn_cast<ConstantExpr>(Cond->getOperand(1)))
 
1411
    if (CE->canTrap())
 
1412
      return false;
 
1413
  
 
1414
  
 
1415
  // Finally, don't infinitely unroll conditional loops.
 
1416
  BasicBlock *TrueDest  = BI->getSuccessor(0);
 
1417
  BasicBlock *FalseDest = BI->getSuccessor(1);
 
1418
  if (TrueDest == BB || FalseDest == BB)
 
1419
    return false;
 
1420
  
 
1421
  for (pred_iterator PI = pred_begin(BB), E = pred_end(BB); PI != E; ++PI) {
 
1422
    BasicBlock *PredBlock = *PI;
 
1423
    BranchInst *PBI = dyn_cast<BranchInst>(PredBlock->getTerminator());
 
1424
    
 
1425
    // Check that we have two conditional branches.  If there is a PHI node in
 
1426
    // the common successor, verify that the same value flows in from both
 
1427
    // blocks.
 
1428
    if (PBI == 0 || PBI->isUnconditional() ||
 
1429
        !SafeToMergeTerminators(BI, PBI))
 
1430
      continue;
 
1431
    
 
1432
    Instruction::BinaryOps Opc;
 
1433
    bool InvertPredCond = false;
 
1434
 
 
1435
    if (PBI->getSuccessor(0) == TrueDest)
 
1436
      Opc = Instruction::Or;
 
1437
    else if (PBI->getSuccessor(1) == FalseDest)
 
1438
      Opc = Instruction::And;
 
1439
    else if (PBI->getSuccessor(0) == FalseDest)
 
1440
      Opc = Instruction::And, InvertPredCond = true;
 
1441
    else if (PBI->getSuccessor(1) == TrueDest)
 
1442
      Opc = Instruction::Or, InvertPredCond = true;
 
1443
    else
 
1444
      continue;
 
1445
 
 
1446
    DEBUG(dbgs() << "FOLDING BRANCH TO COMMON DEST:\n" << *PBI << *BB);
 
1447
    
 
1448
    // If we need to invert the condition in the pred block to match, do so now.
 
1449
    if (InvertPredCond) {
 
1450
      Value *NewCond =
 
1451
        BinaryOperator::CreateNot(PBI->getCondition(),
 
1452
                                  PBI->getCondition()->getName()+".not", PBI);
 
1453
      PBI->setCondition(NewCond);
 
1454
      BasicBlock *OldTrue = PBI->getSuccessor(0);
 
1455
      BasicBlock *OldFalse = PBI->getSuccessor(1);
 
1456
      PBI->setSuccessor(0, OldFalse);
 
1457
      PBI->setSuccessor(1, OldTrue);
 
1458
    }
 
1459
    
 
1460
    // Clone Cond into the predecessor basic block, and or/and the
 
1461
    // two conditions together.
 
1462
    Instruction *New = Cond->clone();
 
1463
    PredBlock->getInstList().insert(PBI, New);
 
1464
    New->takeName(Cond);
 
1465
    Cond->setName(New->getName()+".old");
 
1466
    
 
1467
    Value *NewCond = BinaryOperator::Create(Opc, PBI->getCondition(),
 
1468
                                            New, "or.cond", PBI);
 
1469
    PBI->setCondition(NewCond);
 
1470
    if (PBI->getSuccessor(0) == BB) {
 
1471
      AddPredecessorToBlock(TrueDest, PredBlock, BB);
 
1472
      PBI->setSuccessor(0, TrueDest);
 
1473
    }
 
1474
    if (PBI->getSuccessor(1) == BB) {
 
1475
      AddPredecessorToBlock(FalseDest, PredBlock, BB);
 
1476
      PBI->setSuccessor(1, FalseDest);
 
1477
    }
 
1478
    return true;
 
1479
  }
 
1480
  return false;
 
1481
}
 
1482
 
 
1483
/// SimplifyCondBranchToCondBranch - If we have a conditional branch as a
 
1484
/// predecessor of another block, this function tries to simplify it.  We know
 
1485
/// that PBI and BI are both conditional branches, and BI is in one of the
 
1486
/// successor blocks of PBI - PBI branches to BI.
 
1487
static bool SimplifyCondBranchToCondBranch(BranchInst *PBI, BranchInst *BI) {
 
1488
  assert(PBI->isConditional() && BI->isConditional());
 
1489
  BasicBlock *BB = BI->getParent();
 
1490
 
 
1491
  // If this block ends with a branch instruction, and if there is a
 
1492
  // predecessor that ends on a branch of the same condition, make 
 
1493
  // this conditional branch redundant.
 
1494
  if (PBI->getCondition() == BI->getCondition() &&
 
1495
      PBI->getSuccessor(0) != PBI->getSuccessor(1)) {
 
1496
    // Okay, the outcome of this conditional branch is statically
 
1497
    // knowable.  If this block had a single pred, handle specially.
 
1498
    if (BB->getSinglePredecessor()) {
 
1499
      // Turn this into a branch on constant.
 
1500
      bool CondIsTrue = PBI->getSuccessor(0) == BB;
 
1501
      BI->setCondition(ConstantInt::get(Type::getInt1Ty(BB->getContext()), 
 
1502
                                        CondIsTrue));
 
1503
      return true;  // Nuke the branch on constant.
 
1504
    }
 
1505
    
 
1506
    // Otherwise, if there are multiple predecessors, insert a PHI that merges
 
1507
    // in the constant and simplify the block result.  Subsequent passes of
 
1508
    // simplifycfg will thread the block.
 
1509
    if (BlockIsSimpleEnoughToThreadThrough(BB)) {
 
1510
      PHINode *NewPN = PHINode::Create(Type::getInt1Ty(BB->getContext()),
 
1511
                                       BI->getCondition()->getName() + ".pr",
 
1512
                                       BB->begin());
 
1513
      // Okay, we're going to insert the PHI node.  Since PBI is not the only
 
1514
      // predecessor, compute the PHI'd conditional value for all of the preds.
 
1515
      // Any predecessor where the condition is not computable we keep symbolic.
 
1516
      for (pred_iterator PI = pred_begin(BB), E = pred_end(BB); PI != E; ++PI)
 
1517
        if ((PBI = dyn_cast<BranchInst>((*PI)->getTerminator())) &&
 
1518
            PBI != BI && PBI->isConditional() &&
 
1519
            PBI->getCondition() == BI->getCondition() &&
 
1520
            PBI->getSuccessor(0) != PBI->getSuccessor(1)) {
 
1521
          bool CondIsTrue = PBI->getSuccessor(0) == BB;
 
1522
          NewPN->addIncoming(ConstantInt::get(Type::getInt1Ty(BB->getContext()), 
 
1523
                                              CondIsTrue), *PI);
 
1524
        } else {
 
1525
          NewPN->addIncoming(BI->getCondition(), *PI);
 
1526
        }
 
1527
      
 
1528
      BI->setCondition(NewPN);
 
1529
      return true;
 
1530
    }
 
1531
  }
 
1532
  
 
1533
  // If this is a conditional branch in an empty block, and if any
 
1534
  // predecessors is a conditional branch to one of our destinations,
 
1535
  // fold the conditions into logical ops and one cond br.
 
1536
  BasicBlock::iterator BBI = BB->begin();
 
1537
  // Ignore dbg intrinsics.
 
1538
  while (isa<DbgInfoIntrinsic>(BBI))
 
1539
    ++BBI;
 
1540
  if (&*BBI != BI)
 
1541
    return false;
 
1542
 
 
1543
  
 
1544
  if (ConstantExpr *CE = dyn_cast<ConstantExpr>(BI->getCondition()))
 
1545
    if (CE->canTrap())
 
1546
      return false;
 
1547
  
 
1548
  int PBIOp, BIOp;
 
1549
  if (PBI->getSuccessor(0) == BI->getSuccessor(0))
 
1550
    PBIOp = BIOp = 0;
 
1551
  else if (PBI->getSuccessor(0) == BI->getSuccessor(1))
 
1552
    PBIOp = 0, BIOp = 1;
 
1553
  else if (PBI->getSuccessor(1) == BI->getSuccessor(0))
 
1554
    PBIOp = 1, BIOp = 0;
 
1555
  else if (PBI->getSuccessor(1) == BI->getSuccessor(1))
 
1556
    PBIOp = BIOp = 1;
 
1557
  else
 
1558
    return false;
 
1559
    
 
1560
  // Check to make sure that the other destination of this branch
 
1561
  // isn't BB itself.  If so, this is an infinite loop that will
 
1562
  // keep getting unwound.
 
1563
  if (PBI->getSuccessor(PBIOp) == BB)
 
1564
    return false;
 
1565
    
 
1566
  // Do not perform this transformation if it would require 
 
1567
  // insertion of a large number of select instructions. For targets
 
1568
  // without predication/cmovs, this is a big pessimization.
 
1569
  BasicBlock *CommonDest = PBI->getSuccessor(PBIOp);
 
1570
      
 
1571
  unsigned NumPhis = 0;
 
1572
  for (BasicBlock::iterator II = CommonDest->begin();
 
1573
       isa<PHINode>(II); ++II, ++NumPhis)
 
1574
    if (NumPhis > 2) // Disable this xform.
 
1575
      return false;
 
1576
    
 
1577
  // Finally, if everything is ok, fold the branches to logical ops.
 
1578
  BasicBlock *OtherDest  = BI->getSuccessor(BIOp ^ 1);
 
1579
  
 
1580
  DEBUG(dbgs() << "FOLDING BRs:" << *PBI->getParent()
 
1581
               << "AND: " << *BI->getParent());
 
1582
  
 
1583
  
 
1584
  // If OtherDest *is* BB, then BB is a basic block with a single conditional
 
1585
  // branch in it, where one edge (OtherDest) goes back to itself but the other
 
1586
  // exits.  We don't *know* that the program avoids the infinite loop
 
1587
  // (even though that seems likely).  If we do this xform naively, we'll end up
 
1588
  // recursively unpeeling the loop.  Since we know that (after the xform is
 
1589
  // done) that the block *is* infinite if reached, we just make it an obviously
 
1590
  // infinite loop with no cond branch.
 
1591
  if (OtherDest == BB) {
 
1592
    // Insert it at the end of the function, because it's either code,
 
1593
    // or it won't matter if it's hot. :)
 
1594
    BasicBlock *InfLoopBlock = BasicBlock::Create(BB->getContext(),
 
1595
                                                  "infloop", BB->getParent());
 
1596
    BranchInst::Create(InfLoopBlock, InfLoopBlock);
 
1597
    OtherDest = InfLoopBlock;
 
1598
  }  
 
1599
  
 
1600
  DEBUG(dbgs() << *PBI->getParent()->getParent());
 
1601
  
 
1602
  // BI may have other predecessors.  Because of this, we leave
 
1603
  // it alone, but modify PBI.
 
1604
  
 
1605
  // Make sure we get to CommonDest on True&True directions.
 
1606
  Value *PBICond = PBI->getCondition();
 
1607
  if (PBIOp)
 
1608
    PBICond = BinaryOperator::CreateNot(PBICond,
 
1609
                                        PBICond->getName()+".not",
 
1610
                                        PBI);
 
1611
  Value *BICond = BI->getCondition();
 
1612
  if (BIOp)
 
1613
    BICond = BinaryOperator::CreateNot(BICond,
 
1614
                                       BICond->getName()+".not",
 
1615
                                       PBI);
 
1616
  // Merge the conditions.
 
1617
  Value *Cond = BinaryOperator::CreateOr(PBICond, BICond, "brmerge", PBI);
 
1618
  
 
1619
  // Modify PBI to branch on the new condition to the new dests.
 
1620
  PBI->setCondition(Cond);
 
1621
  PBI->setSuccessor(0, CommonDest);
 
1622
  PBI->setSuccessor(1, OtherDest);
 
1623
  
 
1624
  // OtherDest may have phi nodes.  If so, add an entry from PBI's
 
1625
  // block that are identical to the entries for BI's block.
 
1626
  PHINode *PN;
 
1627
  for (BasicBlock::iterator II = OtherDest->begin();
 
1628
       (PN = dyn_cast<PHINode>(II)); ++II) {
 
1629
    Value *V = PN->getIncomingValueForBlock(BB);
 
1630
    PN->addIncoming(V, PBI->getParent());
 
1631
  }
 
1632
  
 
1633
  // We know that the CommonDest already had an edge from PBI to
 
1634
  // it.  If it has PHIs though, the PHIs may have different
 
1635
  // entries for BB and PBI's BB.  If so, insert a select to make
 
1636
  // them agree.
 
1637
  for (BasicBlock::iterator II = CommonDest->begin();
 
1638
       (PN = dyn_cast<PHINode>(II)); ++II) {
 
1639
    Value *BIV = PN->getIncomingValueForBlock(BB);
 
1640
    unsigned PBBIdx = PN->getBasicBlockIndex(PBI->getParent());
 
1641
    Value *PBIV = PN->getIncomingValue(PBBIdx);
 
1642
    if (BIV != PBIV) {
 
1643
      // Insert a select in PBI to pick the right value.
 
1644
      Value *NV = SelectInst::Create(PBICond, PBIV, BIV,
 
1645
                                     PBIV->getName()+".mux", PBI);
 
1646
      PN->setIncomingValue(PBBIdx, NV);
 
1647
    }
 
1648
  }
 
1649
  
 
1650
  DEBUG(dbgs() << "INTO: " << *PBI->getParent());
 
1651
  DEBUG(dbgs() << *PBI->getParent()->getParent());
 
1652
  
 
1653
  // This basic block is probably dead.  We know it has at least
 
1654
  // one fewer predecessor.
 
1655
  return true;
 
1656
}
 
1657
 
 
1658
bool SimplifyCFGOpt::run(BasicBlock *BB) {
 
1659
  bool Changed = false;
 
1660
  Function *M = BB->getParent();
 
1661
 
 
1662
  assert(BB && BB->getParent() && "Block not embedded in function!");
 
1663
  assert(BB->getTerminator() && "Degenerate basic block encountered!");
 
1664
  assert(&BB->getParent()->getEntryBlock() != BB &&
 
1665
         "Can't Simplify entry block!");
 
1666
 
 
1667
  // Remove basic blocks that have no predecessors... or that just have themself
 
1668
  // as a predecessor.  These are unreachable.
 
1669
  if (pred_begin(BB) == pred_end(BB) || BB->getSinglePredecessor() == BB) {
 
1670
    DEBUG(dbgs() << "Removing BB: \n" << *BB);
 
1671
    DeleteDeadBlock(BB);
 
1672
    return true;
 
1673
  }
 
1674
 
 
1675
  // Check to see if we can constant propagate this terminator instruction
 
1676
  // away...
 
1677
  Changed |= ConstantFoldTerminator(BB);
 
1678
 
 
1679
  // Check for and eliminate duplicate PHI nodes in this block.
 
1680
  Changed |= EliminateDuplicatePHINodes(BB);
 
1681
 
 
1682
  // If there is a trivial two-entry PHI node in this basic block, and we can
 
1683
  // eliminate it, do so now.
 
1684
  if (PHINode *PN = dyn_cast<PHINode>(BB->begin()))
 
1685
    if (PN->getNumIncomingValues() == 2)
 
1686
      Changed |= FoldTwoEntryPHINode(PN); 
 
1687
 
 
1688
  // If this is a returning block with only PHI nodes in it, fold the return
 
1689
  // instruction into any unconditional branch predecessors.
 
1690
  //
 
1691
  // If any predecessor is a conditional branch that just selects among
 
1692
  // different return values, fold the replace the branch/return with a select
 
1693
  // and return.
 
1694
  if (ReturnInst *RI = dyn_cast<ReturnInst>(BB->getTerminator())) {
 
1695
    if (isTerminatorFirstRelevantInsn(BB, BB->getTerminator())) {
 
1696
      // Find predecessors that end with branches.
 
1697
      SmallVector<BasicBlock*, 8> UncondBranchPreds;
 
1698
      SmallVector<BranchInst*, 8> CondBranchPreds;
 
1699
      for (pred_iterator PI = pred_begin(BB), E = pred_end(BB); PI != E; ++PI) {
 
1700
        TerminatorInst *PTI = (*PI)->getTerminator();
 
1701
        if (BranchInst *BI = dyn_cast<BranchInst>(PTI)) {
 
1702
          if (BI->isUnconditional())
 
1703
            UncondBranchPreds.push_back(*PI);
 
1704
          else
 
1705
            CondBranchPreds.push_back(BI);
 
1706
        }
 
1707
      }
 
1708
 
 
1709
      // If we found some, do the transformation!
 
1710
      if (!UncondBranchPreds.empty()) {
 
1711
        while (!UncondBranchPreds.empty()) {
 
1712
          BasicBlock *Pred = UncondBranchPreds.pop_back_val();
 
1713
          DEBUG(dbgs() << "FOLDING: " << *BB
 
1714
                       << "INTO UNCOND BRANCH PRED: " << *Pred);
 
1715
          Instruction *UncondBranch = Pred->getTerminator();
 
1716
          // Clone the return and add it to the end of the predecessor.
 
1717
          Instruction *NewRet = RI->clone();
 
1718
          Pred->getInstList().push_back(NewRet);
 
1719
 
 
1720
          // If the return instruction returns a value, and if the value was a
 
1721
          // PHI node in "BB", propagate the right value into the return.
 
1722
          for (User::op_iterator i = NewRet->op_begin(), e = NewRet->op_end();
 
1723
               i != e; ++i)
 
1724
            if (PHINode *PN = dyn_cast<PHINode>(*i))
 
1725
              if (PN->getParent() == BB)
 
1726
                *i = PN->getIncomingValueForBlock(Pred);
 
1727
          
 
1728
          // Update any PHI nodes in the returning block to realize that we no
 
1729
          // longer branch to them.
 
1730
          BB->removePredecessor(Pred);
 
1731
          Pred->getInstList().erase(UncondBranch);
 
1732
        }
 
1733
 
 
1734
        // If we eliminated all predecessors of the block, delete the block now.
 
1735
        if (pred_begin(BB) == pred_end(BB))
 
1736
          // We know there are no successors, so just nuke the block.
 
1737
          M->getBasicBlockList().erase(BB);
 
1738
 
 
1739
        return true;
 
1740
      }
 
1741
 
 
1742
      // Check out all of the conditional branches going to this return
 
1743
      // instruction.  If any of them just select between returns, change the
 
1744
      // branch itself into a select/return pair.
 
1745
      while (!CondBranchPreds.empty()) {
 
1746
        BranchInst *BI = CondBranchPreds.pop_back_val();
 
1747
 
 
1748
        // Check to see if the non-BB successor is also a return block.
 
1749
        if (isa<ReturnInst>(BI->getSuccessor(0)->getTerminator()) &&
 
1750
            isa<ReturnInst>(BI->getSuccessor(1)->getTerminator()) &&
 
1751
            SimplifyCondBranchToTwoReturns(BI))
 
1752
          return true;
 
1753
      }
 
1754
    }
 
1755
  } else if (isa<UnwindInst>(BB->begin())) {
 
1756
    // Check to see if the first instruction in this block is just an unwind.
 
1757
    // If so, replace any invoke instructions which use this as an exception
 
1758
    // destination with call instructions.
 
1759
    //
 
1760
    SmallVector<BasicBlock*, 8> Preds(pred_begin(BB), pred_end(BB));
 
1761
    while (!Preds.empty()) {
 
1762
      BasicBlock *Pred = Preds.back();
 
1763
      if (InvokeInst *II = dyn_cast<InvokeInst>(Pred->getTerminator()))
 
1764
        if (II->getUnwindDest() == BB) {
 
1765
          // Insert a new branch instruction before the invoke, because this
 
1766
          // is now a fall through.
 
1767
          BranchInst *BI = BranchInst::Create(II->getNormalDest(), II);
 
1768
          Pred->getInstList().remove(II);   // Take out of symbol table
 
1769
 
 
1770
          // Insert the call now.
 
1771
          SmallVector<Value*,8> Args(II->op_begin()+3, II->op_end());
 
1772
          CallInst *CI = CallInst::Create(II->getCalledValue(),
 
1773
                                          Args.begin(), Args.end(),
 
1774
                                          II->getName(), BI);
 
1775
          CI->setCallingConv(II->getCallingConv());
 
1776
          CI->setAttributes(II->getAttributes());
 
1777
          // If the invoke produced a value, the Call now does instead.
 
1778
          II->replaceAllUsesWith(CI);
 
1779
          delete II;
 
1780
          Changed = true;
 
1781
        }
 
1782
 
 
1783
      Preds.pop_back();
 
1784
    }
 
1785
 
 
1786
    // If this block is now dead, remove it.
 
1787
    if (pred_begin(BB) == pred_end(BB)) {
 
1788
      // We know there are no successors, so just nuke the block.
 
1789
      M->getBasicBlockList().erase(BB);
 
1790
      return true;
 
1791
    }
 
1792
 
 
1793
  } else if (SwitchInst *SI = dyn_cast<SwitchInst>(BB->getTerminator())) {
 
1794
    if (isValueEqualityComparison(SI)) {
 
1795
      // If we only have one predecessor, and if it is a branch on this value,
 
1796
      // see if that predecessor totally determines the outcome of this switch.
 
1797
      if (BasicBlock *OnlyPred = BB->getSinglePredecessor())
 
1798
        if (SimplifyEqualityComparisonWithOnlyPredecessor(SI, OnlyPred))
 
1799
          return SimplifyCFG(BB) || 1;
 
1800
 
 
1801
      // If the block only contains the switch, see if we can fold the block
 
1802
      // away into any preds.
 
1803
      BasicBlock::iterator BBI = BB->begin();
 
1804
      // Ignore dbg intrinsics.
 
1805
      while (isa<DbgInfoIntrinsic>(BBI))
 
1806
        ++BBI;
 
1807
      if (SI == &*BBI)
 
1808
        if (FoldValueComparisonIntoPredecessors(SI))
 
1809
          return SimplifyCFG(BB) || 1;
 
1810
    }
 
1811
  } else if (BranchInst *BI = dyn_cast<BranchInst>(BB->getTerminator())) {
 
1812
    if (BI->isUnconditional()) {
 
1813
      BasicBlock::iterator BBI = BB->getFirstNonPHI();
 
1814
 
 
1815
      // Ignore dbg intrinsics.
 
1816
      while (isa<DbgInfoIntrinsic>(BBI))
 
1817
        ++BBI;
 
1818
      if (BBI->isTerminator()) // Terminator is the only non-phi instruction!
 
1819
        if (TryToSimplifyUncondBranchFromEmptyBlock(BB))
 
1820
          return true;
 
1821
      
 
1822
    } else {  // Conditional branch
 
1823
      if (isValueEqualityComparison(BI)) {
 
1824
        // If we only have one predecessor, and if it is a branch on this value,
 
1825
        // see if that predecessor totally determines the outcome of this
 
1826
        // switch.
 
1827
        if (BasicBlock *OnlyPred = BB->getSinglePredecessor())
 
1828
          if (SimplifyEqualityComparisonWithOnlyPredecessor(BI, OnlyPred))
 
1829
            return SimplifyCFG(BB) || 1;
 
1830
 
 
1831
        // This block must be empty, except for the setcond inst, if it exists.
 
1832
        // Ignore dbg intrinsics.
 
1833
        BasicBlock::iterator I = BB->begin();
 
1834
        // Ignore dbg intrinsics.
 
1835
        while (isa<DbgInfoIntrinsic>(I))
 
1836
          ++I;
 
1837
        if (&*I == BI) {
 
1838
          if (FoldValueComparisonIntoPredecessors(BI))
 
1839
            return SimplifyCFG(BB) | true;
 
1840
        } else if (&*I == cast<Instruction>(BI->getCondition())){
 
1841
          ++I;
 
1842
          // Ignore dbg intrinsics.
 
1843
          while (isa<DbgInfoIntrinsic>(I))
 
1844
            ++I;
 
1845
          if(&*I == BI) {
 
1846
            if (FoldValueComparisonIntoPredecessors(BI))
 
1847
              return SimplifyCFG(BB) | true;
 
1848
          }
 
1849
        }
 
1850
      }
 
1851
 
 
1852
      // If this is a branch on a phi node in the current block, thread control
 
1853
      // through this block if any PHI node entries are constants.
 
1854
      if (PHINode *PN = dyn_cast<PHINode>(BI->getCondition()))
 
1855
        if (PN->getParent() == BI->getParent())
 
1856
          if (FoldCondBranchOnPHI(BI))
 
1857
            return SimplifyCFG(BB) | true;
 
1858
 
 
1859
      // If this basic block is ONLY a setcc and a branch, and if a predecessor
 
1860
      // branches to us and one of our successors, fold the setcc into the
 
1861
      // predecessor and use logical operations to pick the right destination.
 
1862
      if (FoldBranchToCommonDest(BI))
 
1863
        return SimplifyCFG(BB) | 1;
 
1864
 
 
1865
 
 
1866
      // Scan predecessor blocks for conditional branches.
 
1867
      for (pred_iterator PI = pred_begin(BB), E = pred_end(BB); PI != E; ++PI)
 
1868
        if (BranchInst *PBI = dyn_cast<BranchInst>((*PI)->getTerminator()))
 
1869
          if (PBI != BI && PBI->isConditional())
 
1870
            if (SimplifyCondBranchToCondBranch(PBI, BI))
 
1871
              return SimplifyCFG(BB) | true;
 
1872
    }
 
1873
  } else if (isa<UnreachableInst>(BB->getTerminator())) {
 
1874
    // If there are any instructions immediately before the unreachable that can
 
1875
    // be removed, do so.
 
1876
    Instruction *Unreachable = BB->getTerminator();
 
1877
    while (Unreachable != BB->begin()) {
 
1878
      BasicBlock::iterator BBI = Unreachable;
 
1879
      --BBI;
 
1880
      // Do not delete instructions that can have side effects, like calls
 
1881
      // (which may never return) and volatile loads and stores.
 
1882
      if (isa<CallInst>(BBI) && !isa<DbgInfoIntrinsic>(BBI)) break;
 
1883
 
 
1884
      if (StoreInst *SI = dyn_cast<StoreInst>(BBI))
 
1885
        if (SI->isVolatile())
 
1886
          break;
 
1887
 
 
1888
      if (LoadInst *LI = dyn_cast<LoadInst>(BBI))
 
1889
        if (LI->isVolatile())
 
1890
          break;
 
1891
 
 
1892
      // Delete this instruction
 
1893
      BB->getInstList().erase(BBI);
 
1894
      Changed = true;
 
1895
    }
 
1896
 
 
1897
    // If the unreachable instruction is the first in the block, take a gander
 
1898
    // at all of the predecessors of this instruction, and simplify them.
 
1899
    if (&BB->front() == Unreachable) {
 
1900
      SmallVector<BasicBlock*, 8> Preds(pred_begin(BB), pred_end(BB));
 
1901
      for (unsigned i = 0, e = Preds.size(); i != e; ++i) {
 
1902
        TerminatorInst *TI = Preds[i]->getTerminator();
 
1903
 
 
1904
        if (BranchInst *BI = dyn_cast<BranchInst>(TI)) {
 
1905
          if (BI->isUnconditional()) {
 
1906
            if (BI->getSuccessor(0) == BB) {
 
1907
              new UnreachableInst(TI->getContext(), TI);
 
1908
              TI->eraseFromParent();
 
1909
              Changed = true;
 
1910
            }
 
1911
          } else {
 
1912
            if (BI->getSuccessor(0) == BB) {
 
1913
              BranchInst::Create(BI->getSuccessor(1), BI);
 
1914
              EraseTerminatorInstAndDCECond(BI);
 
1915
            } else if (BI->getSuccessor(1) == BB) {
 
1916
              BranchInst::Create(BI->getSuccessor(0), BI);
 
1917
              EraseTerminatorInstAndDCECond(BI);
 
1918
              Changed = true;
 
1919
            }
 
1920
          }
 
1921
        } else if (SwitchInst *SI = dyn_cast<SwitchInst>(TI)) {
 
1922
          for (unsigned i = 1, e = SI->getNumCases(); i != e; ++i)
 
1923
            if (SI->getSuccessor(i) == BB) {
 
1924
              BB->removePredecessor(SI->getParent());
 
1925
              SI->removeCase(i);
 
1926
              --i; --e;
 
1927
              Changed = true;
 
1928
            }
 
1929
          // If the default value is unreachable, figure out the most popular
 
1930
          // destination and make it the default.
 
1931
          if (SI->getSuccessor(0) == BB) {
 
1932
            std::map<BasicBlock*, unsigned> Popularity;
 
1933
            for (unsigned i = 1, e = SI->getNumCases(); i != e; ++i)
 
1934
              Popularity[SI->getSuccessor(i)]++;
 
1935
 
 
1936
            // Find the most popular block.
 
1937
            unsigned MaxPop = 0;
 
1938
            BasicBlock *MaxBlock = 0;
 
1939
            for (std::map<BasicBlock*, unsigned>::iterator
 
1940
                   I = Popularity.begin(), E = Popularity.end(); I != E; ++I) {
 
1941
              if (I->second > MaxPop) {
 
1942
                MaxPop = I->second;
 
1943
                MaxBlock = I->first;
 
1944
              }
 
1945
            }
 
1946
            if (MaxBlock) {
 
1947
              // Make this the new default, allowing us to delete any explicit
 
1948
              // edges to it.
 
1949
              SI->setSuccessor(0, MaxBlock);
 
1950
              Changed = true;
 
1951
 
 
1952
              // If MaxBlock has phinodes in it, remove MaxPop-1 entries from
 
1953
              // it.
 
1954
              if (isa<PHINode>(MaxBlock->begin()))
 
1955
                for (unsigned i = 0; i != MaxPop-1; ++i)
 
1956
                  MaxBlock->removePredecessor(SI->getParent());
 
1957
 
 
1958
              for (unsigned i = 1, e = SI->getNumCases(); i != e; ++i)
 
1959
                if (SI->getSuccessor(i) == MaxBlock) {
 
1960
                  SI->removeCase(i);
 
1961
                  --i; --e;
 
1962
                }
 
1963
            }
 
1964
          }
 
1965
        } else if (InvokeInst *II = dyn_cast<InvokeInst>(TI)) {
 
1966
          if (II->getUnwindDest() == BB) {
 
1967
            // Convert the invoke to a call instruction.  This would be a good
 
1968
            // place to note that the call does not throw though.
 
1969
            BranchInst *BI = BranchInst::Create(II->getNormalDest(), II);
 
1970
            II->removeFromParent();   // Take out of symbol table
 
1971
 
 
1972
            // Insert the call now...
 
1973
            SmallVector<Value*, 8> Args(II->op_begin()+3, II->op_end());
 
1974
            CallInst *CI = CallInst::Create(II->getCalledValue(),
 
1975
                                            Args.begin(), Args.end(),
 
1976
                                            II->getName(), BI);
 
1977
            CI->setCallingConv(II->getCallingConv());
 
1978
            CI->setAttributes(II->getAttributes());
 
1979
            // If the invoke produced a value, the Call does now instead.
 
1980
            II->replaceAllUsesWith(CI);
 
1981
            delete II;
 
1982
            Changed = true;
 
1983
          }
 
1984
        }
 
1985
      }
 
1986
 
 
1987
      // If this block is now dead, remove it.
 
1988
      if (pred_begin(BB) == pred_end(BB)) {
 
1989
        // We know there are no successors, so just nuke the block.
 
1990
        M->getBasicBlockList().erase(BB);
 
1991
        return true;
 
1992
      }
 
1993
    }
 
1994
  }
 
1995
 
 
1996
  // Merge basic blocks into their predecessor if there is only one distinct
 
1997
  // pred, and if there is only one distinct successor of the predecessor, and
 
1998
  // if there are no PHI nodes.
 
1999
  //
 
2000
  if (MergeBlockIntoPredecessor(BB))
 
2001
    return true;
 
2002
 
 
2003
  // Otherwise, if this block only has a single predecessor, and if that block
 
2004
  // is a conditional branch, see if we can hoist any code from this block up
 
2005
  // into our predecessor.
 
2006
  pred_iterator PI(pred_begin(BB)), PE(pred_end(BB));
 
2007
  BasicBlock *OnlyPred = *PI++;
 
2008
  for (; PI != PE; ++PI)  // Search all predecessors, see if they are all same
 
2009
    if (*PI != OnlyPred) {
 
2010
      OnlyPred = 0;       // There are multiple different predecessors...
 
2011
      break;
 
2012
    }
 
2013
  
 
2014
  if (OnlyPred)
 
2015
    if (BranchInst *BI = dyn_cast<BranchInst>(OnlyPred->getTerminator()))
 
2016
      if (BI->isConditional()) {
 
2017
        // Get the other block.
 
2018
        BasicBlock *OtherBB = BI->getSuccessor(BI->getSuccessor(0) == BB);
 
2019
        PI = pred_begin(OtherBB);
 
2020
        ++PI;
 
2021
        
 
2022
        if (PI == pred_end(OtherBB)) {
 
2023
          // We have a conditional branch to two blocks that are only reachable
 
2024
          // from the condbr.  We know that the condbr dominates the two blocks,
 
2025
          // so see if there is any identical code in the "then" and "else"
 
2026
          // blocks.  If so, we can hoist it up to the branching block.
 
2027
          Changed |= HoistThenElseCodeToIf(BI);
 
2028
        } else {
 
2029
          BasicBlock* OnlySucc = NULL;
 
2030
          for (succ_iterator SI = succ_begin(BB), SE = succ_end(BB);
 
2031
               SI != SE; ++SI) {
 
2032
            if (!OnlySucc)
 
2033
              OnlySucc = *SI;
 
2034
            else if (*SI != OnlySucc) {
 
2035
              OnlySucc = 0;     // There are multiple distinct successors!
 
2036
              break;
 
2037
            }
 
2038
          }
 
2039
 
 
2040
          if (OnlySucc == OtherBB) {
 
2041
            // If BB's only successor is the other successor of the predecessor,
 
2042
            // i.e. a triangle, see if we can hoist any code from this block up
 
2043
            // to the "if" block.
 
2044
            Changed |= SpeculativelyExecuteBB(BI, BB);
 
2045
          }
 
2046
        }
 
2047
      }
 
2048
 
 
2049
  for (pred_iterator PI = pred_begin(BB), E = pred_end(BB); PI != E; ++PI)
 
2050
    if (BranchInst *BI = dyn_cast<BranchInst>((*PI)->getTerminator()))
 
2051
      // Change br (X == 0 | X == 1), T, F into a switch instruction.
 
2052
      if (BI->isConditional() && isa<Instruction>(BI->getCondition())) {
 
2053
        Instruction *Cond = cast<Instruction>(BI->getCondition());
 
2054
        // If this is a bunch of seteq's or'd together, or if it's a bunch of
 
2055
        // 'setne's and'ed together, collect them.
 
2056
        Value *CompVal = 0;
 
2057
        std::vector<ConstantInt*> Values;
 
2058
        bool TrueWhenEqual = GatherValueComparisons(Cond, CompVal, Values);
 
2059
        if (CompVal) {
 
2060
          // There might be duplicate constants in the list, which the switch
 
2061
          // instruction can't handle, remove them now.
 
2062
          std::sort(Values.begin(), Values.end(), ConstantIntOrdering());
 
2063
          Values.erase(std::unique(Values.begin(), Values.end()), Values.end());
 
2064
 
 
2065
          // Figure out which block is which destination.
 
2066
          BasicBlock *DefaultBB = BI->getSuccessor(1);
 
2067
          BasicBlock *EdgeBB    = BI->getSuccessor(0);
 
2068
          if (!TrueWhenEqual) std::swap(DefaultBB, EdgeBB);
 
2069
 
 
2070
          // Convert pointer to int before we switch.
 
2071
          if (CompVal->getType()->isPointerTy()) {
 
2072
            assert(TD && "Cannot switch on pointer without TargetData");
 
2073
            CompVal = new PtrToIntInst(CompVal,
 
2074
                                       TD->getIntPtrType(CompVal->getContext()),
 
2075
                                       "magicptr", BI);
 
2076
          }
 
2077
 
 
2078
          // Create the new switch instruction now.
 
2079
          SwitchInst *New = SwitchInst::Create(CompVal, DefaultBB,
 
2080
                                               Values.size(), BI);
 
2081
 
 
2082
          // Add all of the 'cases' to the switch instruction.
 
2083
          for (unsigned i = 0, e = Values.size(); i != e; ++i)
 
2084
            New->addCase(Values[i], EdgeBB);
 
2085
 
 
2086
          // We added edges from PI to the EdgeBB.  As such, if there were any
 
2087
          // PHI nodes in EdgeBB, they need entries to be added corresponding to
 
2088
          // the number of edges added.
 
2089
          for (BasicBlock::iterator BBI = EdgeBB->begin();
 
2090
               isa<PHINode>(BBI); ++BBI) {
 
2091
            PHINode *PN = cast<PHINode>(BBI);
 
2092
            Value *InVal = PN->getIncomingValueForBlock(*PI);
 
2093
            for (unsigned i = 0, e = Values.size()-1; i != e; ++i)
 
2094
              PN->addIncoming(InVal, *PI);
 
2095
          }
 
2096
 
 
2097
          // Erase the old branch instruction.
 
2098
          EraseTerminatorInstAndDCECond(BI);
 
2099
          return true;
 
2100
        }
 
2101
      }
 
2102
 
 
2103
  return Changed;
 
2104
}
 
2105
 
 
2106
/// SimplifyCFG - This function is used to do simplification of a CFG.  For
 
2107
/// example, it adjusts branches to branches to eliminate the extra hop, it
 
2108
/// eliminates unreachable basic blocks, and does other "peephole" optimization
 
2109
/// of the CFG.  It returns true if a modification was made.
 
2110
///
 
2111
/// WARNING:  The entry node of a function may not be simplified.
 
2112
///
 
2113
bool llvm::SimplifyCFG(BasicBlock *BB, const TargetData *TD) {
 
2114
  return SimplifyCFGOpt(TD).run(BB);
 
2115
}