~louis/ubuntu/trusty/clamav/lp799623_fix_logrotate

« back to all changes in this revision

Viewing changes to libclamav/c++/llvm/lib/Transforms/Scalar/SCCP.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
//===- SCCP.cpp - Sparse Conditional Constant Propagation -----------------===//
 
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
// This file implements sparse conditional constant propagation and merging:
 
11
//
 
12
// Specifically, this:
 
13
//   * Assumes values are constant unless proven otherwise
 
14
//   * Assumes BasicBlocks are dead unless proven otherwise
 
15
//   * Proves values to be constant, and replaces them with constants
 
16
//   * Proves conditional branches to be unconditional
 
17
//
 
18
//===----------------------------------------------------------------------===//
 
19
 
 
20
#define DEBUG_TYPE "sccp"
 
21
#include "llvm/Transforms/Scalar.h"
 
22
#include "llvm/Transforms/IPO.h"
 
23
#include "llvm/Constants.h"
 
24
#include "llvm/DerivedTypes.h"
 
25
#include "llvm/Instructions.h"
 
26
#include "llvm/Pass.h"
 
27
#include "llvm/Analysis/ConstantFolding.h"
 
28
#include "llvm/Analysis/ValueTracking.h"
 
29
#include "llvm/Transforms/Utils/Local.h"
 
30
#include "llvm/Target/TargetData.h"
 
31
#include "llvm/Support/CallSite.h"
 
32
#include "llvm/Support/Debug.h"
 
33
#include "llvm/Support/ErrorHandling.h"
 
34
#include "llvm/Support/InstVisitor.h"
 
35
#include "llvm/Support/raw_ostream.h"
 
36
#include "llvm/ADT/DenseMap.h"
 
37
#include "llvm/ADT/DenseSet.h"
 
38
#include "llvm/ADT/PointerIntPair.h"
 
39
#include "llvm/ADT/SmallPtrSet.h"
 
40
#include "llvm/ADT/SmallVector.h"
 
41
#include "llvm/ADT/Statistic.h"
 
42
#include "llvm/ADT/STLExtras.h"
 
43
#include <algorithm>
 
44
#include <map>
 
45
using namespace llvm;
 
46
 
 
47
STATISTIC(NumInstRemoved, "Number of instructions removed");
 
48
STATISTIC(NumDeadBlocks , "Number of basic blocks unreachable");
 
49
 
 
50
STATISTIC(IPNumInstRemoved, "Number of instructions removed by IPSCCP");
 
51
STATISTIC(IPNumArgsElimed ,"Number of arguments constant propagated by IPSCCP");
 
52
STATISTIC(IPNumGlobalConst, "Number of globals found to be constant by IPSCCP");
 
53
 
 
54
namespace {
 
55
/// LatticeVal class - This class represents the different lattice values that
 
56
/// an LLVM value may occupy.  It is a simple class with value semantics.
 
57
///
 
58
class LatticeVal {
 
59
  enum LatticeValueTy {
 
60
    /// undefined - This LLVM Value has no known value yet.
 
61
    undefined,
 
62
    
 
63
    /// constant - This LLVM Value has a specific constant value.
 
64
    constant,
 
65
 
 
66
    /// forcedconstant - This LLVM Value was thought to be undef until
 
67
    /// ResolvedUndefsIn.  This is treated just like 'constant', but if merged
 
68
    /// with another (different) constant, it goes to overdefined, instead of
 
69
    /// asserting.
 
70
    forcedconstant,
 
71
    
 
72
    /// overdefined - This instruction is not known to be constant, and we know
 
73
    /// it has a value.
 
74
    overdefined
 
75
  };
 
76
 
 
77
  /// Val: This stores the current lattice value along with the Constant* for
 
78
  /// the constant if this is a 'constant' or 'forcedconstant' value.
 
79
  PointerIntPair<Constant *, 2, LatticeValueTy> Val;
 
80
  
 
81
  LatticeValueTy getLatticeValue() const {
 
82
    return Val.getInt();
 
83
  }
 
84
  
 
85
public:
 
86
  LatticeVal() : Val(0, undefined) {}
 
87
  
 
88
  bool isUndefined() const { return getLatticeValue() == undefined; }
 
89
  bool isConstant() const {
 
90
    return getLatticeValue() == constant || getLatticeValue() == forcedconstant;
 
91
  }
 
92
  bool isOverdefined() const { return getLatticeValue() == overdefined; }
 
93
  
 
94
  Constant *getConstant() const {
 
95
    assert(isConstant() && "Cannot get the constant of a non-constant!");
 
96
    return Val.getPointer();
 
97
  }
 
98
  
 
99
  /// markOverdefined - Return true if this is a change in status.
 
100
  bool markOverdefined() {
 
101
    if (isOverdefined())
 
102
      return false;
 
103
    
 
104
    Val.setInt(overdefined);
 
105
    return true;
 
106
  }
 
107
 
 
108
  /// markConstant - Return true if this is a change in status.
 
109
  bool markConstant(Constant *V) {
 
110
    if (getLatticeValue() == constant) { // Constant but not forcedconstant.
 
111
      assert(getConstant() == V && "Marking constant with different value");
 
112
      return false;
 
113
    }
 
114
    
 
115
    if (isUndefined()) {
 
116
      Val.setInt(constant);
 
117
      assert(V && "Marking constant with NULL");
 
118
      Val.setPointer(V);
 
119
    } else {
 
120
      assert(getLatticeValue() == forcedconstant && 
 
121
             "Cannot move from overdefined to constant!");
 
122
      // Stay at forcedconstant if the constant is the same.
 
123
      if (V == getConstant()) return false;
 
124
      
 
125
      // Otherwise, we go to overdefined.  Assumptions made based on the
 
126
      // forced value are possibly wrong.  Assuming this is another constant
 
127
      // could expose a contradiction.
 
128
      Val.setInt(overdefined);
 
129
    }
 
130
    return true;
 
131
  }
 
132
 
 
133
  /// getConstantInt - If this is a constant with a ConstantInt value, return it
 
134
  /// otherwise return null.
 
135
  ConstantInt *getConstantInt() const {
 
136
    if (isConstant())
 
137
      return dyn_cast<ConstantInt>(getConstant());
 
138
    return 0;
 
139
  }
 
140
  
 
141
  void markForcedConstant(Constant *V) {
 
142
    assert(isUndefined() && "Can't force a defined value!");
 
143
    Val.setInt(forcedconstant);
 
144
    Val.setPointer(V);
 
145
  }
 
146
};
 
147
} // end anonymous namespace.
 
148
 
 
149
 
 
150
namespace {
 
151
 
 
152
//===----------------------------------------------------------------------===//
 
153
//
 
154
/// SCCPSolver - This class is a general purpose solver for Sparse Conditional
 
155
/// Constant Propagation.
 
156
///
 
157
class SCCPSolver : public InstVisitor<SCCPSolver> {
 
158
  const TargetData *TD;
 
159
  SmallPtrSet<BasicBlock*, 8> BBExecutable;// The BBs that are executable.
 
160
  DenseMap<Value*, LatticeVal> ValueState;  // The state each value is in.
 
161
 
 
162
  /// StructValueState - This maintains ValueState for values that have
 
163
  /// StructType, for example for formal arguments, calls, insertelement, etc.
 
164
  ///
 
165
  DenseMap<std::pair<Value*, unsigned>, LatticeVal> StructValueState;
 
166
  
 
167
  /// GlobalValue - If we are tracking any values for the contents of a global
 
168
  /// variable, we keep a mapping from the constant accessor to the element of
 
169
  /// the global, to the currently known value.  If the value becomes
 
170
  /// overdefined, it's entry is simply removed from this map.
 
171
  DenseMap<GlobalVariable*, LatticeVal> TrackedGlobals;
 
172
 
 
173
  /// TrackedRetVals - If we are tracking arguments into and the return
 
174
  /// value out of a function, it will have an entry in this map, indicating
 
175
  /// what the known return value for the function is.
 
176
  DenseMap<Function*, LatticeVal> TrackedRetVals;
 
177
 
 
178
  /// TrackedMultipleRetVals - Same as TrackedRetVals, but used for functions
 
179
  /// that return multiple values.
 
180
  DenseMap<std::pair<Function*, unsigned>, LatticeVal> TrackedMultipleRetVals;
 
181
  
 
182
  /// MRVFunctionsTracked - Each function in TrackedMultipleRetVals is
 
183
  /// represented here for efficient lookup.
 
184
  SmallPtrSet<Function*, 16> MRVFunctionsTracked;
 
185
 
 
186
  /// TrackingIncomingArguments - This is the set of functions for whose
 
187
  /// arguments we make optimistic assumptions about and try to prove as
 
188
  /// constants.
 
189
  SmallPtrSet<Function*, 16> TrackingIncomingArguments;
 
190
  
 
191
  /// The reason for two worklists is that overdefined is the lowest state
 
192
  /// on the lattice, and moving things to overdefined as fast as possible
 
193
  /// makes SCCP converge much faster.
 
194
  ///
 
195
  /// By having a separate worklist, we accomplish this because everything
 
196
  /// possibly overdefined will become overdefined at the soonest possible
 
197
  /// point.
 
198
  SmallVector<Value*, 64> OverdefinedInstWorkList;
 
199
  SmallVector<Value*, 64> InstWorkList;
 
200
 
 
201
 
 
202
  SmallVector<BasicBlock*, 64>  BBWorkList;  // The BasicBlock work list
 
203
 
 
204
  /// UsersOfOverdefinedPHIs - Keep track of any users of PHI nodes that are not
 
205
  /// overdefined, despite the fact that the PHI node is overdefined.
 
206
  std::multimap<PHINode*, Instruction*> UsersOfOverdefinedPHIs;
 
207
 
 
208
  /// KnownFeasibleEdges - Entries in this set are edges which have already had
 
209
  /// PHI nodes retriggered.
 
210
  typedef std::pair<BasicBlock*, BasicBlock*> Edge;
 
211
  DenseSet<Edge> KnownFeasibleEdges;
 
212
public:
 
213
  SCCPSolver(const TargetData *td) : TD(td) {}
 
214
 
 
215
  /// MarkBlockExecutable - This method can be used by clients to mark all of
 
216
  /// the blocks that are known to be intrinsically live in the processed unit.
 
217
  ///
 
218
  /// This returns true if the block was not considered live before.
 
219
  bool MarkBlockExecutable(BasicBlock *BB) {
 
220
    if (!BBExecutable.insert(BB)) return false;
 
221
    DEBUG(dbgs() << "Marking Block Executable: " << BB->getName() << "\n");
 
222
    BBWorkList.push_back(BB);  // Add the block to the work list!
 
223
    return true;
 
224
  }
 
225
 
 
226
  /// TrackValueOfGlobalVariable - Clients can use this method to
 
227
  /// inform the SCCPSolver that it should track loads and stores to the
 
228
  /// specified global variable if it can.  This is only legal to call if
 
229
  /// performing Interprocedural SCCP.
 
230
  void TrackValueOfGlobalVariable(GlobalVariable *GV) {
 
231
    // We only track the contents of scalar globals.
 
232
    if (GV->getType()->getElementType()->isSingleValueType()) {
 
233
      LatticeVal &IV = TrackedGlobals[GV];
 
234
      if (!isa<UndefValue>(GV->getInitializer()))
 
235
        IV.markConstant(GV->getInitializer());
 
236
    }
 
237
  }
 
238
 
 
239
  /// AddTrackedFunction - If the SCCP solver is supposed to track calls into
 
240
  /// and out of the specified function (which cannot have its address taken),
 
241
  /// this method must be called.
 
242
  void AddTrackedFunction(Function *F) {
 
243
    // Add an entry, F -> undef.
 
244
    if (const StructType *STy = dyn_cast<StructType>(F->getReturnType())) {
 
245
      MRVFunctionsTracked.insert(F);
 
246
      for (unsigned i = 0, e = STy->getNumElements(); i != e; ++i)
 
247
        TrackedMultipleRetVals.insert(std::make_pair(std::make_pair(F, i),
 
248
                                                     LatticeVal()));
 
249
    } else
 
250
      TrackedRetVals.insert(std::make_pair(F, LatticeVal()));
 
251
  }
 
252
 
 
253
  void AddArgumentTrackedFunction(Function *F) {
 
254
    TrackingIncomingArguments.insert(F);
 
255
  }
 
256
  
 
257
  /// Solve - Solve for constants and executable blocks.
 
258
  ///
 
259
  void Solve();
 
260
 
 
261
  /// ResolvedUndefsIn - While solving the dataflow for a function, we assume
 
262
  /// that branches on undef values cannot reach any of their successors.
 
263
  /// However, this is not a safe assumption.  After we solve dataflow, this
 
264
  /// method should be use to handle this.  If this returns true, the solver
 
265
  /// should be rerun.
 
266
  bool ResolvedUndefsIn(Function &F);
 
267
 
 
268
  bool isBlockExecutable(BasicBlock *BB) const {
 
269
    return BBExecutable.count(BB);
 
270
  }
 
271
 
 
272
  LatticeVal getLatticeValueFor(Value *V) const {
 
273
    DenseMap<Value*, LatticeVal>::const_iterator I = ValueState.find(V);
 
274
    assert(I != ValueState.end() && "V is not in valuemap!");
 
275
    return I->second;
 
276
  }
 
277
  
 
278
  LatticeVal getStructLatticeValueFor(Value *V, unsigned i) const {
 
279
    DenseMap<std::pair<Value*, unsigned>, LatticeVal>::const_iterator I = 
 
280
      StructValueState.find(std::make_pair(V, i));
 
281
    assert(I != StructValueState.end() && "V is not in valuemap!");
 
282
    return I->second;
 
283
  }
 
284
 
 
285
  /// getTrackedRetVals - Get the inferred return value map.
 
286
  ///
 
287
  const DenseMap<Function*, LatticeVal> &getTrackedRetVals() {
 
288
    return TrackedRetVals;
 
289
  }
 
290
 
 
291
  /// getTrackedGlobals - Get and return the set of inferred initializers for
 
292
  /// global variables.
 
293
  const DenseMap<GlobalVariable*, LatticeVal> &getTrackedGlobals() {
 
294
    return TrackedGlobals;
 
295
  }
 
296
 
 
297
  void markOverdefined(Value *V) {
 
298
    assert(!V->getType()->isStructTy() && "Should use other method");
 
299
    markOverdefined(ValueState[V], V);
 
300
  }
 
301
 
 
302
  /// markAnythingOverdefined - Mark the specified value overdefined.  This
 
303
  /// works with both scalars and structs.
 
304
  void markAnythingOverdefined(Value *V) {
 
305
    if (const StructType *STy = dyn_cast<StructType>(V->getType()))
 
306
      for (unsigned i = 0, e = STy->getNumElements(); i != e; ++i)
 
307
        markOverdefined(getStructValueState(V, i), V);
 
308
    else
 
309
      markOverdefined(V);
 
310
  }
 
311
  
 
312
private:
 
313
  // markConstant - Make a value be marked as "constant".  If the value
 
314
  // is not already a constant, add it to the instruction work list so that
 
315
  // the users of the instruction are updated later.
 
316
  //
 
317
  void markConstant(LatticeVal &IV, Value *V, Constant *C) {
 
318
    if (!IV.markConstant(C)) return;
 
319
    DEBUG(dbgs() << "markConstant: " << *C << ": " << *V << '\n');
 
320
    InstWorkList.push_back(V);
 
321
  }
 
322
  
 
323
  void markConstant(Value *V, Constant *C) {
 
324
    assert(!V->getType()->isStructTy() && "Should use other method");
 
325
    markConstant(ValueState[V], V, C);
 
326
  }
 
327
 
 
328
  void markForcedConstant(Value *V, Constant *C) {
 
329
    assert(!V->getType()->isStructTy() && "Should use other method");
 
330
    ValueState[V].markForcedConstant(C);
 
331
    DEBUG(dbgs() << "markForcedConstant: " << *C << ": " << *V << '\n');
 
332
    InstWorkList.push_back(V);
 
333
  }
 
334
  
 
335
  
 
336
  // markOverdefined - Make a value be marked as "overdefined". If the
 
337
  // value is not already overdefined, add it to the overdefined instruction
 
338
  // work list so that the users of the instruction are updated later.
 
339
  void markOverdefined(LatticeVal &IV, Value *V) {
 
340
    if (!IV.markOverdefined()) return;
 
341
    
 
342
    DEBUG(dbgs() << "markOverdefined: ";
 
343
          if (Function *F = dyn_cast<Function>(V))
 
344
            dbgs() << "Function '" << F->getName() << "'\n";
 
345
          else
 
346
            dbgs() << *V << '\n');
 
347
    // Only instructions go on the work list
 
348
    OverdefinedInstWorkList.push_back(V);
 
349
  }
 
350
 
 
351
  void mergeInValue(LatticeVal &IV, Value *V, LatticeVal MergeWithV) {
 
352
    if (IV.isOverdefined() || MergeWithV.isUndefined())
 
353
      return;  // Noop.
 
354
    if (MergeWithV.isOverdefined())
 
355
      markOverdefined(IV, V);
 
356
    else if (IV.isUndefined())
 
357
      markConstant(IV, V, MergeWithV.getConstant());
 
358
    else if (IV.getConstant() != MergeWithV.getConstant())
 
359
      markOverdefined(IV, V);
 
360
  }
 
361
  
 
362
  void mergeInValue(Value *V, LatticeVal MergeWithV) {
 
363
    assert(!V->getType()->isStructTy() && "Should use other method");
 
364
    mergeInValue(ValueState[V], V, MergeWithV);
 
365
  }
 
366
 
 
367
 
 
368
  /// getValueState - Return the LatticeVal object that corresponds to the
 
369
  /// value.  This function handles the case when the value hasn't been seen yet
 
370
  /// by properly seeding constants etc.
 
371
  LatticeVal &getValueState(Value *V) {
 
372
    assert(!V->getType()->isStructTy() && "Should use getStructValueState");
 
373
 
 
374
    std::pair<DenseMap<Value*, LatticeVal>::iterator, bool> I =
 
375
      ValueState.insert(std::make_pair(V, LatticeVal()));
 
376
    LatticeVal &LV = I.first->second;
 
377
 
 
378
    if (!I.second)
 
379
      return LV;  // Common case, already in the map.
 
380
 
 
381
    if (Constant *C = dyn_cast<Constant>(V)) {
 
382
      // Undef values remain undefined.
 
383
      if (!isa<UndefValue>(V))
 
384
        LV.markConstant(C);          // Constants are constant
 
385
    }
 
386
    
 
387
    // All others are underdefined by default.
 
388
    return LV;
 
389
  }
 
390
 
 
391
  /// getStructValueState - Return the LatticeVal object that corresponds to the
 
392
  /// value/field pair.  This function handles the case when the value hasn't
 
393
  /// been seen yet by properly seeding constants etc.
 
394
  LatticeVal &getStructValueState(Value *V, unsigned i) {
 
395
    assert(V->getType()->isStructTy() && "Should use getValueState");
 
396
    assert(i < cast<StructType>(V->getType())->getNumElements() &&
 
397
           "Invalid element #");
 
398
 
 
399
    std::pair<DenseMap<std::pair<Value*, unsigned>, LatticeVal>::iterator,
 
400
              bool> I = StructValueState.insert(
 
401
                        std::make_pair(std::make_pair(V, i), LatticeVal()));
 
402
    LatticeVal &LV = I.first->second;
 
403
 
 
404
    if (!I.second)
 
405
      return LV;  // Common case, already in the map.
 
406
 
 
407
    if (Constant *C = dyn_cast<Constant>(V)) {
 
408
      if (isa<UndefValue>(C))
 
409
        ; // Undef values remain undefined.
 
410
      else if (ConstantStruct *CS = dyn_cast<ConstantStruct>(C))
 
411
        LV.markConstant(CS->getOperand(i));      // Constants are constant.
 
412
      else if (isa<ConstantAggregateZero>(C)) {
 
413
        const Type *FieldTy = cast<StructType>(V->getType())->getElementType(i);
 
414
        LV.markConstant(Constant::getNullValue(FieldTy));
 
415
      } else
 
416
        LV.markOverdefined();      // Unknown sort of constant.
 
417
    }
 
418
    
 
419
    // All others are underdefined by default.
 
420
    return LV;
 
421
  }
 
422
  
 
423
 
 
424
  /// markEdgeExecutable - Mark a basic block as executable, adding it to the BB
 
425
  /// work list if it is not already executable.
 
426
  void markEdgeExecutable(BasicBlock *Source, BasicBlock *Dest) {
 
427
    if (!KnownFeasibleEdges.insert(Edge(Source, Dest)).second)
 
428
      return;  // This edge is already known to be executable!
 
429
 
 
430
    if (!MarkBlockExecutable(Dest)) {
 
431
      // If the destination is already executable, we just made an *edge*
 
432
      // feasible that wasn't before.  Revisit the PHI nodes in the block
 
433
      // because they have potentially new operands.
 
434
      DEBUG(dbgs() << "Marking Edge Executable: " << Source->getName()
 
435
            << " -> " << Dest->getName() << "\n");
 
436
 
 
437
      PHINode *PN;
 
438
      for (BasicBlock::iterator I = Dest->begin();
 
439
           (PN = dyn_cast<PHINode>(I)); ++I)
 
440
        visitPHINode(*PN);
 
441
    }
 
442
  }
 
443
 
 
444
  // getFeasibleSuccessors - Return a vector of booleans to indicate which
 
445
  // successors are reachable from a given terminator instruction.
 
446
  //
 
447
  void getFeasibleSuccessors(TerminatorInst &TI, SmallVector<bool, 16> &Succs);
 
448
 
 
449
  // isEdgeFeasible - Return true if the control flow edge from the 'From' basic
 
450
  // block to the 'To' basic block is currently feasible.
 
451
  //
 
452
  bool isEdgeFeasible(BasicBlock *From, BasicBlock *To);
 
453
 
 
454
  // OperandChangedState - This method is invoked on all of the users of an
 
455
  // instruction that was just changed state somehow.  Based on this
 
456
  // information, we need to update the specified user of this instruction.
 
457
  //
 
458
  void OperandChangedState(Instruction *I) {
 
459
    if (BBExecutable.count(I->getParent()))   // Inst is executable?
 
460
      visit(*I);
 
461
  }
 
462
  
 
463
  /// RemoveFromOverdefinedPHIs - If I has any entries in the
 
464
  /// UsersOfOverdefinedPHIs map for PN, remove them now.
 
465
  void RemoveFromOverdefinedPHIs(Instruction *I, PHINode *PN) {
 
466
    if (UsersOfOverdefinedPHIs.empty()) return;
 
467
    std::multimap<PHINode*, Instruction*>::iterator It, E;
 
468
    tie(It, E) = UsersOfOverdefinedPHIs.equal_range(PN);
 
469
    while (It != E) {
 
470
      if (It->second == I)
 
471
        UsersOfOverdefinedPHIs.erase(It++);
 
472
      else
 
473
        ++It;
 
474
    }
 
475
  }
 
476
 
 
477
private:
 
478
  friend class InstVisitor<SCCPSolver>;
 
479
 
 
480
  // visit implementations - Something changed in this instruction.  Either an
 
481
  // operand made a transition, or the instruction is newly executable.  Change
 
482
  // the value type of I to reflect these changes if appropriate.
 
483
  void visitPHINode(PHINode &I);
 
484
 
 
485
  // Terminators
 
486
  void visitReturnInst(ReturnInst &I);
 
487
  void visitTerminatorInst(TerminatorInst &TI);
 
488
 
 
489
  void visitCastInst(CastInst &I);
 
490
  void visitSelectInst(SelectInst &I);
 
491
  void visitBinaryOperator(Instruction &I);
 
492
  void visitCmpInst(CmpInst &I);
 
493
  void visitExtractElementInst(ExtractElementInst &I);
 
494
  void visitInsertElementInst(InsertElementInst &I);
 
495
  void visitShuffleVectorInst(ShuffleVectorInst &I);
 
496
  void visitExtractValueInst(ExtractValueInst &EVI);
 
497
  void visitInsertValueInst(InsertValueInst &IVI);
 
498
 
 
499
  // Instructions that cannot be folded away.
 
500
  void visitStoreInst     (StoreInst &I);
 
501
  void visitLoadInst      (LoadInst &I);
 
502
  void visitGetElementPtrInst(GetElementPtrInst &I);
 
503
  void visitCallInst      (CallInst &I) {
 
504
    visitCallSite(CallSite::get(&I));
 
505
  }
 
506
  void visitInvokeInst    (InvokeInst &II) {
 
507
    visitCallSite(CallSite::get(&II));
 
508
    visitTerminatorInst(II);
 
509
  }
 
510
  void visitCallSite      (CallSite CS);
 
511
  void visitUnwindInst    (TerminatorInst &I) { /*returns void*/ }
 
512
  void visitUnreachableInst(TerminatorInst &I) { /*returns void*/ }
 
513
  void visitAllocaInst    (Instruction &I) { markOverdefined(&I); }
 
514
  void visitVANextInst    (Instruction &I) { markOverdefined(&I); }
 
515
  void visitVAArgInst     (Instruction &I) { markAnythingOverdefined(&I); }
 
516
 
 
517
  void visitInstruction(Instruction &I) {
 
518
    // If a new instruction is added to LLVM that we don't handle.
 
519
    dbgs() << "SCCP: Don't know how to handle: " << I;
 
520
    markAnythingOverdefined(&I);   // Just in case
 
521
  }
 
522
};
 
523
 
 
524
} // end anonymous namespace
 
525
 
 
526
 
 
527
// getFeasibleSuccessors - Return a vector of booleans to indicate which
 
528
// successors are reachable from a given terminator instruction.
 
529
//
 
530
void SCCPSolver::getFeasibleSuccessors(TerminatorInst &TI,
 
531
                                       SmallVector<bool, 16> &Succs) {
 
532
  Succs.resize(TI.getNumSuccessors());
 
533
  if (BranchInst *BI = dyn_cast<BranchInst>(&TI)) {
 
534
    if (BI->isUnconditional()) {
 
535
      Succs[0] = true;
 
536
      return;
 
537
    }
 
538
    
 
539
    LatticeVal BCValue = getValueState(BI->getCondition());
 
540
    ConstantInt *CI = BCValue.getConstantInt();
 
541
    if (CI == 0) {
 
542
      // Overdefined condition variables, and branches on unfoldable constant
 
543
      // conditions, mean the branch could go either way.
 
544
      if (!BCValue.isUndefined())
 
545
        Succs[0] = Succs[1] = true;
 
546
      return;
 
547
    }
 
548
    
 
549
    // Constant condition variables mean the branch can only go a single way.
 
550
    Succs[CI->isZero()] = true;
 
551
    return;
 
552
  }
 
553
  
 
554
  if (isa<InvokeInst>(TI)) {
 
555
    // Invoke instructions successors are always executable.
 
556
    Succs[0] = Succs[1] = true;
 
557
    return;
 
558
  }
 
559
  
 
560
  if (SwitchInst *SI = dyn_cast<SwitchInst>(&TI)) {
 
561
    LatticeVal SCValue = getValueState(SI->getCondition());
 
562
    ConstantInt *CI = SCValue.getConstantInt();
 
563
    
 
564
    if (CI == 0) {   // Overdefined or undefined condition?
 
565
      // All destinations are executable!
 
566
      if (!SCValue.isUndefined())
 
567
        Succs.assign(TI.getNumSuccessors(), true);
 
568
      return;
 
569
    }
 
570
      
 
571
    Succs[SI->findCaseValue(CI)] = true;
 
572
    return;
 
573
  }
 
574
  
 
575
  // TODO: This could be improved if the operand is a [cast of a] BlockAddress.
 
576
  if (isa<IndirectBrInst>(&TI)) {
 
577
    // Just mark all destinations executable!
 
578
    Succs.assign(TI.getNumSuccessors(), true);
 
579
    return;
 
580
  }
 
581
  
 
582
#ifndef NDEBUG
 
583
  dbgs() << "Unknown terminator instruction: " << TI << '\n';
 
584
#endif
 
585
  llvm_unreachable("SCCP: Don't know how to handle this terminator!");
 
586
}
 
587
 
 
588
 
 
589
// isEdgeFeasible - Return true if the control flow edge from the 'From' basic
 
590
// block to the 'To' basic block is currently feasible.
 
591
//
 
592
bool SCCPSolver::isEdgeFeasible(BasicBlock *From, BasicBlock *To) {
 
593
  assert(BBExecutable.count(To) && "Dest should always be alive!");
 
594
 
 
595
  // Make sure the source basic block is executable!!
 
596
  if (!BBExecutable.count(From)) return false;
 
597
 
 
598
  // Check to make sure this edge itself is actually feasible now.
 
599
  TerminatorInst *TI = From->getTerminator();
 
600
  if (BranchInst *BI = dyn_cast<BranchInst>(TI)) {
 
601
    if (BI->isUnconditional())
 
602
      return true;
 
603
    
 
604
    LatticeVal BCValue = getValueState(BI->getCondition());
 
605
 
 
606
    // Overdefined condition variables mean the branch could go either way,
 
607
    // undef conditions mean that neither edge is feasible yet.
 
608
    ConstantInt *CI = BCValue.getConstantInt();
 
609
    if (CI == 0)
 
610
      return !BCValue.isUndefined();
 
611
    
 
612
    // Constant condition variables mean the branch can only go a single way.
 
613
    return BI->getSuccessor(CI->isZero()) == To;
 
614
  }
 
615
  
 
616
  // Invoke instructions successors are always executable.
 
617
  if (isa<InvokeInst>(TI))
 
618
    return true;
 
619
  
 
620
  if (SwitchInst *SI = dyn_cast<SwitchInst>(TI)) {
 
621
    LatticeVal SCValue = getValueState(SI->getCondition());
 
622
    ConstantInt *CI = SCValue.getConstantInt();
 
623
    
 
624
    if (CI == 0)
 
625
      return !SCValue.isUndefined();
 
626
 
 
627
    // Make sure to skip the "default value" which isn't a value
 
628
    for (unsigned i = 1, E = SI->getNumSuccessors(); i != E; ++i)
 
629
      if (SI->getSuccessorValue(i) == CI) // Found the taken branch.
 
630
        return SI->getSuccessor(i) == To;
 
631
 
 
632
    // If the constant value is not equal to any of the branches, we must
 
633
    // execute default branch.
 
634
    return SI->getDefaultDest() == To;
 
635
  }
 
636
  
 
637
  // Just mark all destinations executable!
 
638
  // TODO: This could be improved if the operand is a [cast of a] BlockAddress.
 
639
  if (isa<IndirectBrInst>(&TI))
 
640
    return true;
 
641
  
 
642
#ifndef NDEBUG
 
643
  dbgs() << "Unknown terminator instruction: " << *TI << '\n';
 
644
#endif
 
645
  llvm_unreachable(0);
 
646
}
 
647
 
 
648
// visit Implementations - Something changed in this instruction, either an
 
649
// operand made a transition, or the instruction is newly executable.  Change
 
650
// the value type of I to reflect these changes if appropriate.  This method
 
651
// makes sure to do the following actions:
 
652
//
 
653
// 1. If a phi node merges two constants in, and has conflicting value coming
 
654
//    from different branches, or if the PHI node merges in an overdefined
 
655
//    value, then the PHI node becomes overdefined.
 
656
// 2. If a phi node merges only constants in, and they all agree on value, the
 
657
//    PHI node becomes a constant value equal to that.
 
658
// 3. If V <- x (op) y && isConstant(x) && isConstant(y) V = Constant
 
659
// 4. If V <- x (op) y && (isOverdefined(x) || isOverdefined(y)) V = Overdefined
 
660
// 5. If V <- MEM or V <- CALL or V <- (unknown) then V = Overdefined
 
661
// 6. If a conditional branch has a value that is constant, make the selected
 
662
//    destination executable
 
663
// 7. If a conditional branch has a value that is overdefined, make all
 
664
//    successors executable.
 
665
//
 
666
void SCCPSolver::visitPHINode(PHINode &PN) {
 
667
  // If this PN returns a struct, just mark the result overdefined.
 
668
  // TODO: We could do a lot better than this if code actually uses this.
 
669
  if (PN.getType()->isStructTy())
 
670
    return markAnythingOverdefined(&PN);
 
671
  
 
672
  if (getValueState(&PN).isOverdefined()) {
 
673
    // There may be instructions using this PHI node that are not overdefined
 
674
    // themselves.  If so, make sure that they know that the PHI node operand
 
675
    // changed.
 
676
    std::multimap<PHINode*, Instruction*>::iterator I, E;
 
677
    tie(I, E) = UsersOfOverdefinedPHIs.equal_range(&PN);
 
678
    if (I == E)
 
679
      return;
 
680
    
 
681
    SmallVector<Instruction*, 16> Users;
 
682
    for (; I != E; ++I)
 
683
      Users.push_back(I->second);
 
684
    while (!Users.empty())
 
685
      visit(Users.pop_back_val());
 
686
    return;  // Quick exit
 
687
  }
 
688
 
 
689
  // Super-extra-high-degree PHI nodes are unlikely to ever be marked constant,
 
690
  // and slow us down a lot.  Just mark them overdefined.
 
691
  if (PN.getNumIncomingValues() > 64)
 
692
    return markOverdefined(&PN);
 
693
  
 
694
  // Look at all of the executable operands of the PHI node.  If any of them
 
695
  // are overdefined, the PHI becomes overdefined as well.  If they are all
 
696
  // constant, and they agree with each other, the PHI becomes the identical
 
697
  // constant.  If they are constant and don't agree, the PHI is overdefined.
 
698
  // If there are no executable operands, the PHI remains undefined.
 
699
  //
 
700
  Constant *OperandVal = 0;
 
701
  for (unsigned i = 0, e = PN.getNumIncomingValues(); i != e; ++i) {
 
702
    LatticeVal IV = getValueState(PN.getIncomingValue(i));
 
703
    if (IV.isUndefined()) continue;  // Doesn't influence PHI node.
 
704
 
 
705
    if (!isEdgeFeasible(PN.getIncomingBlock(i), PN.getParent()))
 
706
      continue;
 
707
    
 
708
    if (IV.isOverdefined())    // PHI node becomes overdefined!
 
709
      return markOverdefined(&PN);
 
710
 
 
711
    if (OperandVal == 0) {   // Grab the first value.
 
712
      OperandVal = IV.getConstant();
 
713
      continue;
 
714
    }
 
715
    
 
716
    // There is already a reachable operand.  If we conflict with it,
 
717
    // then the PHI node becomes overdefined.  If we agree with it, we
 
718
    // can continue on.
 
719
    
 
720
    // Check to see if there are two different constants merging, if so, the PHI
 
721
    // node is overdefined.
 
722
    if (IV.getConstant() != OperandVal)
 
723
      return markOverdefined(&PN);
 
724
  }
 
725
 
 
726
  // If we exited the loop, this means that the PHI node only has constant
 
727
  // arguments that agree with each other(and OperandVal is the constant) or
 
728
  // OperandVal is null because there are no defined incoming arguments.  If
 
729
  // this is the case, the PHI remains undefined.
 
730
  //
 
731
  if (OperandVal)
 
732
    markConstant(&PN, OperandVal);      // Acquire operand value
 
733
}
 
734
 
 
735
 
 
736
 
 
737
 
 
738
void SCCPSolver::visitReturnInst(ReturnInst &I) {
 
739
  if (I.getNumOperands() == 0) return;  // ret void
 
740
 
 
741
  Function *F = I.getParent()->getParent();
 
742
  Value *ResultOp = I.getOperand(0);
 
743
  
 
744
  // If we are tracking the return value of this function, merge it in.
 
745
  if (!TrackedRetVals.empty() && !ResultOp->getType()->isStructTy()) {
 
746
    DenseMap<Function*, LatticeVal>::iterator TFRVI =
 
747
      TrackedRetVals.find(F);
 
748
    if (TFRVI != TrackedRetVals.end()) {
 
749
      mergeInValue(TFRVI->second, F, getValueState(ResultOp));
 
750
      return;
 
751
    }
 
752
  }
 
753
  
 
754
  // Handle functions that return multiple values.
 
755
  if (!TrackedMultipleRetVals.empty()) {
 
756
    if (const StructType *STy = dyn_cast<StructType>(ResultOp->getType()))
 
757
      if (MRVFunctionsTracked.count(F))
 
758
        for (unsigned i = 0, e = STy->getNumElements(); i != e; ++i)
 
759
          mergeInValue(TrackedMultipleRetVals[std::make_pair(F, i)], F,
 
760
                       getStructValueState(ResultOp, i));
 
761
    
 
762
  }
 
763
}
 
764
 
 
765
void SCCPSolver::visitTerminatorInst(TerminatorInst &TI) {
 
766
  SmallVector<bool, 16> SuccFeasible;
 
767
  getFeasibleSuccessors(TI, SuccFeasible);
 
768
 
 
769
  BasicBlock *BB = TI.getParent();
 
770
 
 
771
  // Mark all feasible successors executable.
 
772
  for (unsigned i = 0, e = SuccFeasible.size(); i != e; ++i)
 
773
    if (SuccFeasible[i])
 
774
      markEdgeExecutable(BB, TI.getSuccessor(i));
 
775
}
 
776
 
 
777
void SCCPSolver::visitCastInst(CastInst &I) {
 
778
  LatticeVal OpSt = getValueState(I.getOperand(0));
 
779
  if (OpSt.isOverdefined())          // Inherit overdefinedness of operand
 
780
    markOverdefined(&I);
 
781
  else if (OpSt.isConstant())        // Propagate constant value
 
782
    markConstant(&I, ConstantExpr::getCast(I.getOpcode(), 
 
783
                                           OpSt.getConstant(), I.getType()));
 
784
}
 
785
 
 
786
 
 
787
void SCCPSolver::visitExtractValueInst(ExtractValueInst &EVI) {
 
788
  // If this returns a struct, mark all elements over defined, we don't track
 
789
  // structs in structs.
 
790
  if (EVI.getType()->isStructTy())
 
791
    return markAnythingOverdefined(&EVI);
 
792
    
 
793
  // If this is extracting from more than one level of struct, we don't know.
 
794
  if (EVI.getNumIndices() != 1)
 
795
    return markOverdefined(&EVI);
 
796
 
 
797
  Value *AggVal = EVI.getAggregateOperand();
 
798
  if (AggVal->getType()->isStructTy()) {
 
799
    unsigned i = *EVI.idx_begin();
 
800
    LatticeVal EltVal = getStructValueState(AggVal, i);
 
801
    mergeInValue(getValueState(&EVI), &EVI, EltVal);
 
802
  } else {
 
803
    // Otherwise, must be extracting from an array.
 
804
    return markOverdefined(&EVI);
 
805
  }
 
806
}
 
807
 
 
808
void SCCPSolver::visitInsertValueInst(InsertValueInst &IVI) {
 
809
  const StructType *STy = dyn_cast<StructType>(IVI.getType());
 
810
  if (STy == 0)
 
811
    return markOverdefined(&IVI);
 
812
  
 
813
  // If this has more than one index, we can't handle it, drive all results to
 
814
  // undef.
 
815
  if (IVI.getNumIndices() != 1)
 
816
    return markAnythingOverdefined(&IVI);
 
817
  
 
818
  Value *Aggr = IVI.getAggregateOperand();
 
819
  unsigned Idx = *IVI.idx_begin();
 
820
  
 
821
  // Compute the result based on what we're inserting.
 
822
  for (unsigned i = 0, e = STy->getNumElements(); i != e; ++i) {
 
823
    // This passes through all values that aren't the inserted element.
 
824
    if (i != Idx) {
 
825
      LatticeVal EltVal = getStructValueState(Aggr, i);
 
826
      mergeInValue(getStructValueState(&IVI, i), &IVI, EltVal);
 
827
      continue;
 
828
    }
 
829
    
 
830
    Value *Val = IVI.getInsertedValueOperand();
 
831
    if (Val->getType()->isStructTy())
 
832
      // We don't track structs in structs.
 
833
      markOverdefined(getStructValueState(&IVI, i), &IVI);
 
834
    else {
 
835
      LatticeVal InVal = getValueState(Val);
 
836
      mergeInValue(getStructValueState(&IVI, i), &IVI, InVal);
 
837
    }
 
838
  }
 
839
}
 
840
 
 
841
void SCCPSolver::visitSelectInst(SelectInst &I) {
 
842
  // If this select returns a struct, just mark the result overdefined.
 
843
  // TODO: We could do a lot better than this if code actually uses this.
 
844
  if (I.getType()->isStructTy())
 
845
    return markAnythingOverdefined(&I);
 
846
  
 
847
  LatticeVal CondValue = getValueState(I.getCondition());
 
848
  if (CondValue.isUndefined())
 
849
    return;
 
850
  
 
851
  if (ConstantInt *CondCB = CondValue.getConstantInt()) {
 
852
    Value *OpVal = CondCB->isZero() ? I.getFalseValue() : I.getTrueValue();
 
853
    mergeInValue(&I, getValueState(OpVal));
 
854
    return;
 
855
  }
 
856
  
 
857
  // Otherwise, the condition is overdefined or a constant we can't evaluate.
 
858
  // See if we can produce something better than overdefined based on the T/F
 
859
  // value.
 
860
  LatticeVal TVal = getValueState(I.getTrueValue());
 
861
  LatticeVal FVal = getValueState(I.getFalseValue());
 
862
  
 
863
  // select ?, C, C -> C.
 
864
  if (TVal.isConstant() && FVal.isConstant() && 
 
865
      TVal.getConstant() == FVal.getConstant())
 
866
    return markConstant(&I, FVal.getConstant());
 
867
 
 
868
  if (TVal.isUndefined())   // select ?, undef, X -> X.
 
869
    return mergeInValue(&I, FVal);
 
870
  if (FVal.isUndefined())   // select ?, X, undef -> X.
 
871
    return mergeInValue(&I, TVal);
 
872
  markOverdefined(&I);
 
873
}
 
874
 
 
875
// Handle Binary Operators.
 
876
void SCCPSolver::visitBinaryOperator(Instruction &I) {
 
877
  LatticeVal V1State = getValueState(I.getOperand(0));
 
878
  LatticeVal V2State = getValueState(I.getOperand(1));
 
879
  
 
880
  LatticeVal &IV = ValueState[&I];
 
881
  if (IV.isOverdefined()) return;
 
882
 
 
883
  if (V1State.isConstant() && V2State.isConstant())
 
884
    return markConstant(IV, &I,
 
885
                        ConstantExpr::get(I.getOpcode(), V1State.getConstant(),
 
886
                                          V2State.getConstant()));
 
887
  
 
888
  // If something is undef, wait for it to resolve.
 
889
  if (!V1State.isOverdefined() && !V2State.isOverdefined())
 
890
    return;
 
891
  
 
892
  // Otherwise, one of our operands is overdefined.  Try to produce something
 
893
  // better than overdefined with some tricks.
 
894
  
 
895
  // If this is an AND or OR with 0 or -1, it doesn't matter that the other
 
896
  // operand is overdefined.
 
897
  if (I.getOpcode() == Instruction::And || I.getOpcode() == Instruction::Or) {
 
898
    LatticeVal *NonOverdefVal = 0;
 
899
    if (!V1State.isOverdefined())
 
900
      NonOverdefVal = &V1State;
 
901
    else if (!V2State.isOverdefined())
 
902
      NonOverdefVal = &V2State;
 
903
 
 
904
    if (NonOverdefVal) {
 
905
      if (NonOverdefVal->isUndefined()) {
 
906
        // Could annihilate value.
 
907
        if (I.getOpcode() == Instruction::And)
 
908
          markConstant(IV, &I, Constant::getNullValue(I.getType()));
 
909
        else if (const VectorType *PT = dyn_cast<VectorType>(I.getType()))
 
910
          markConstant(IV, &I, Constant::getAllOnesValue(PT));
 
911
        else
 
912
          markConstant(IV, &I,
 
913
                       Constant::getAllOnesValue(I.getType()));
 
914
        return;
 
915
      }
 
916
      
 
917
      if (I.getOpcode() == Instruction::And) {
 
918
        // X and 0 = 0
 
919
        if (NonOverdefVal->getConstant()->isNullValue())
 
920
          return markConstant(IV, &I, NonOverdefVal->getConstant());
 
921
      } else {
 
922
        if (ConstantInt *CI = NonOverdefVal->getConstantInt())
 
923
          if (CI->isAllOnesValue())     // X or -1 = -1
 
924
            return markConstant(IV, &I, NonOverdefVal->getConstant());
 
925
      }
 
926
    }
 
927
  }
 
928
 
 
929
 
 
930
  // If both operands are PHI nodes, it is possible that this instruction has
 
931
  // a constant value, despite the fact that the PHI node doesn't.  Check for
 
932
  // this condition now.
 
933
  if (PHINode *PN1 = dyn_cast<PHINode>(I.getOperand(0)))
 
934
    if (PHINode *PN2 = dyn_cast<PHINode>(I.getOperand(1)))
 
935
      if (PN1->getParent() == PN2->getParent()) {
 
936
        // Since the two PHI nodes are in the same basic block, they must have
 
937
        // entries for the same predecessors.  Walk the predecessor list, and
 
938
        // if all of the incoming values are constants, and the result of
 
939
        // evaluating this expression with all incoming value pairs is the
 
940
        // same, then this expression is a constant even though the PHI node
 
941
        // is not a constant!
 
942
        LatticeVal Result;
 
943
        for (unsigned i = 0, e = PN1->getNumIncomingValues(); i != e; ++i) {
 
944
          LatticeVal In1 = getValueState(PN1->getIncomingValue(i));
 
945
          BasicBlock *InBlock = PN1->getIncomingBlock(i);
 
946
          LatticeVal In2 =getValueState(PN2->getIncomingValueForBlock(InBlock));
 
947
 
 
948
          if (In1.isOverdefined() || In2.isOverdefined()) {
 
949
            Result.markOverdefined();
 
950
            break;  // Cannot fold this operation over the PHI nodes!
 
951
          }
 
952
          
 
953
          if (In1.isConstant() && In2.isConstant()) {
 
954
            Constant *V = ConstantExpr::get(I.getOpcode(), In1.getConstant(),
 
955
                                            In2.getConstant());
 
956
            if (Result.isUndefined())
 
957
              Result.markConstant(V);
 
958
            else if (Result.isConstant() && Result.getConstant() != V) {
 
959
              Result.markOverdefined();
 
960
              break;
 
961
            }
 
962
          }
 
963
        }
 
964
 
 
965
        // If we found a constant value here, then we know the instruction is
 
966
        // constant despite the fact that the PHI nodes are overdefined.
 
967
        if (Result.isConstant()) {
 
968
          markConstant(IV, &I, Result.getConstant());
 
969
          // Remember that this instruction is virtually using the PHI node
 
970
          // operands.
 
971
          UsersOfOverdefinedPHIs.insert(std::make_pair(PN1, &I));
 
972
          UsersOfOverdefinedPHIs.insert(std::make_pair(PN2, &I));
 
973
          return;
 
974
        }
 
975
        
 
976
        if (Result.isUndefined())
 
977
          return;
 
978
 
 
979
        // Okay, this really is overdefined now.  Since we might have
 
980
        // speculatively thought that this was not overdefined before, and
 
981
        // added ourselves to the UsersOfOverdefinedPHIs list for the PHIs,
 
982
        // make sure to clean out any entries that we put there, for
 
983
        // efficiency.
 
984
        RemoveFromOverdefinedPHIs(&I, PN1);
 
985
        RemoveFromOverdefinedPHIs(&I, PN2);
 
986
      }
 
987
 
 
988
  markOverdefined(&I);
 
989
}
 
990
 
 
991
// Handle ICmpInst instruction.
 
992
void SCCPSolver::visitCmpInst(CmpInst &I) {
 
993
  LatticeVal V1State = getValueState(I.getOperand(0));
 
994
  LatticeVal V2State = getValueState(I.getOperand(1));
 
995
 
 
996
  LatticeVal &IV = ValueState[&I];
 
997
  if (IV.isOverdefined()) return;
 
998
 
 
999
  if (V1State.isConstant() && V2State.isConstant())
 
1000
    return markConstant(IV, &I, ConstantExpr::getCompare(I.getPredicate(), 
 
1001
                                                         V1State.getConstant(), 
 
1002
                                                        V2State.getConstant()));
 
1003
  
 
1004
  // If operands are still undefined, wait for it to resolve.
 
1005
  if (!V1State.isOverdefined() && !V2State.isOverdefined())
 
1006
    return;
 
1007
  
 
1008
  // If something is overdefined, use some tricks to avoid ending up and over
 
1009
  // defined if we can.
 
1010
  
 
1011
  // If both operands are PHI nodes, it is possible that this instruction has
 
1012
  // a constant value, despite the fact that the PHI node doesn't.  Check for
 
1013
  // this condition now.
 
1014
  if (PHINode *PN1 = dyn_cast<PHINode>(I.getOperand(0)))
 
1015
    if (PHINode *PN2 = dyn_cast<PHINode>(I.getOperand(1)))
 
1016
      if (PN1->getParent() == PN2->getParent()) {
 
1017
        // Since the two PHI nodes are in the same basic block, they must have
 
1018
        // entries for the same predecessors.  Walk the predecessor list, and
 
1019
        // if all of the incoming values are constants, and the result of
 
1020
        // evaluating this expression with all incoming value pairs is the
 
1021
        // same, then this expression is a constant even though the PHI node
 
1022
        // is not a constant!
 
1023
        LatticeVal Result;
 
1024
        for (unsigned i = 0, e = PN1->getNumIncomingValues(); i != e; ++i) {
 
1025
          LatticeVal In1 = getValueState(PN1->getIncomingValue(i));
 
1026
          BasicBlock *InBlock = PN1->getIncomingBlock(i);
 
1027
          LatticeVal In2 =getValueState(PN2->getIncomingValueForBlock(InBlock));
 
1028
 
 
1029
          if (In1.isOverdefined() || In2.isOverdefined()) {
 
1030
            Result.markOverdefined();
 
1031
            break;  // Cannot fold this operation over the PHI nodes!
 
1032
          }
 
1033
          
 
1034
          if (In1.isConstant() && In2.isConstant()) {
 
1035
            Constant *V = ConstantExpr::getCompare(I.getPredicate(), 
 
1036
                                                   In1.getConstant(), 
 
1037
                                                   In2.getConstant());
 
1038
            if (Result.isUndefined())
 
1039
              Result.markConstant(V);
 
1040
            else if (Result.isConstant() && Result.getConstant() != V) {
 
1041
              Result.markOverdefined();
 
1042
              break;
 
1043
            }
 
1044
          }
 
1045
        }
 
1046
 
 
1047
        // If we found a constant value here, then we know the instruction is
 
1048
        // constant despite the fact that the PHI nodes are overdefined.
 
1049
        if (Result.isConstant()) {
 
1050
          markConstant(&I, Result.getConstant());
 
1051
          // Remember that this instruction is virtually using the PHI node
 
1052
          // operands.
 
1053
          UsersOfOverdefinedPHIs.insert(std::make_pair(PN1, &I));
 
1054
          UsersOfOverdefinedPHIs.insert(std::make_pair(PN2, &I));
 
1055
          return;
 
1056
        }
 
1057
        
 
1058
        if (Result.isUndefined())
 
1059
          return;
 
1060
 
 
1061
        // Okay, this really is overdefined now.  Since we might have
 
1062
        // speculatively thought that this was not overdefined before, and
 
1063
        // added ourselves to the UsersOfOverdefinedPHIs list for the PHIs,
 
1064
        // make sure to clean out any entries that we put there, for
 
1065
        // efficiency.
 
1066
        RemoveFromOverdefinedPHIs(&I, PN1);
 
1067
        RemoveFromOverdefinedPHIs(&I, PN2);
 
1068
      }
 
1069
 
 
1070
  markOverdefined(&I);
 
1071
}
 
1072
 
 
1073
void SCCPSolver::visitExtractElementInst(ExtractElementInst &I) {
 
1074
  // TODO : SCCP does not handle vectors properly.
 
1075
  return markOverdefined(&I);
 
1076
 
 
1077
#if 0
 
1078
  LatticeVal &ValState = getValueState(I.getOperand(0));
 
1079
  LatticeVal &IdxState = getValueState(I.getOperand(1));
 
1080
 
 
1081
  if (ValState.isOverdefined() || IdxState.isOverdefined())
 
1082
    markOverdefined(&I);
 
1083
  else if(ValState.isConstant() && IdxState.isConstant())
 
1084
    markConstant(&I, ConstantExpr::getExtractElement(ValState.getConstant(),
 
1085
                                                     IdxState.getConstant()));
 
1086
#endif
 
1087
}
 
1088
 
 
1089
void SCCPSolver::visitInsertElementInst(InsertElementInst &I) {
 
1090
  // TODO : SCCP does not handle vectors properly.
 
1091
  return markOverdefined(&I);
 
1092
#if 0
 
1093
  LatticeVal &ValState = getValueState(I.getOperand(0));
 
1094
  LatticeVal &EltState = getValueState(I.getOperand(1));
 
1095
  LatticeVal &IdxState = getValueState(I.getOperand(2));
 
1096
 
 
1097
  if (ValState.isOverdefined() || EltState.isOverdefined() ||
 
1098
      IdxState.isOverdefined())
 
1099
    markOverdefined(&I);
 
1100
  else if(ValState.isConstant() && EltState.isConstant() &&
 
1101
          IdxState.isConstant())
 
1102
    markConstant(&I, ConstantExpr::getInsertElement(ValState.getConstant(),
 
1103
                                                    EltState.getConstant(),
 
1104
                                                    IdxState.getConstant()));
 
1105
  else if (ValState.isUndefined() && EltState.isConstant() &&
 
1106
           IdxState.isConstant()) 
 
1107
    markConstant(&I,ConstantExpr::getInsertElement(UndefValue::get(I.getType()),
 
1108
                                                   EltState.getConstant(),
 
1109
                                                   IdxState.getConstant()));
 
1110
#endif
 
1111
}
 
1112
 
 
1113
void SCCPSolver::visitShuffleVectorInst(ShuffleVectorInst &I) {
 
1114
  // TODO : SCCP does not handle vectors properly.
 
1115
  return markOverdefined(&I);
 
1116
#if 0
 
1117
  LatticeVal &V1State   = getValueState(I.getOperand(0));
 
1118
  LatticeVal &V2State   = getValueState(I.getOperand(1));
 
1119
  LatticeVal &MaskState = getValueState(I.getOperand(2));
 
1120
 
 
1121
  if (MaskState.isUndefined() ||
 
1122
      (V1State.isUndefined() && V2State.isUndefined()))
 
1123
    return;  // Undefined output if mask or both inputs undefined.
 
1124
  
 
1125
  if (V1State.isOverdefined() || V2State.isOverdefined() ||
 
1126
      MaskState.isOverdefined()) {
 
1127
    markOverdefined(&I);
 
1128
  } else {
 
1129
    // A mix of constant/undef inputs.
 
1130
    Constant *V1 = V1State.isConstant() ? 
 
1131
        V1State.getConstant() : UndefValue::get(I.getType());
 
1132
    Constant *V2 = V2State.isConstant() ? 
 
1133
        V2State.getConstant() : UndefValue::get(I.getType());
 
1134
    Constant *Mask = MaskState.isConstant() ? 
 
1135
      MaskState.getConstant() : UndefValue::get(I.getOperand(2)->getType());
 
1136
    markConstant(&I, ConstantExpr::getShuffleVector(V1, V2, Mask));
 
1137
  }
 
1138
#endif
 
1139
}
 
1140
 
 
1141
// Handle getelementptr instructions.  If all operands are constants then we
 
1142
// can turn this into a getelementptr ConstantExpr.
 
1143
//
 
1144
void SCCPSolver::visitGetElementPtrInst(GetElementPtrInst &I) {
 
1145
  if (ValueState[&I].isOverdefined()) return;
 
1146
 
 
1147
  SmallVector<Constant*, 8> Operands;
 
1148
  Operands.reserve(I.getNumOperands());
 
1149
 
 
1150
  for (unsigned i = 0, e = I.getNumOperands(); i != e; ++i) {
 
1151
    LatticeVal State = getValueState(I.getOperand(i));
 
1152
    if (State.isUndefined())
 
1153
      return;  // Operands are not resolved yet.
 
1154
    
 
1155
    if (State.isOverdefined())
 
1156
      return markOverdefined(&I);
 
1157
 
 
1158
    assert(State.isConstant() && "Unknown state!");
 
1159
    Operands.push_back(State.getConstant());
 
1160
  }
 
1161
 
 
1162
  Constant *Ptr = Operands[0];
 
1163
  markConstant(&I, ConstantExpr::getGetElementPtr(Ptr, &Operands[0]+1,
 
1164
                                                  Operands.size()-1));
 
1165
}
 
1166
 
 
1167
void SCCPSolver::visitStoreInst(StoreInst &SI) {
 
1168
  // If this store is of a struct, ignore it.
 
1169
  if (SI.getOperand(0)->getType()->isStructTy())
 
1170
    return;
 
1171
  
 
1172
  if (TrackedGlobals.empty() || !isa<GlobalVariable>(SI.getOperand(1)))
 
1173
    return;
 
1174
  
 
1175
  GlobalVariable *GV = cast<GlobalVariable>(SI.getOperand(1));
 
1176
  DenseMap<GlobalVariable*, LatticeVal>::iterator I = TrackedGlobals.find(GV);
 
1177
  if (I == TrackedGlobals.end() || I->second.isOverdefined()) return;
 
1178
 
 
1179
  // Get the value we are storing into the global, then merge it.
 
1180
  mergeInValue(I->second, GV, getValueState(SI.getOperand(0)));
 
1181
  if (I->second.isOverdefined())
 
1182
    TrackedGlobals.erase(I);      // No need to keep tracking this!
 
1183
}
 
1184
 
 
1185
 
 
1186
// Handle load instructions.  If the operand is a constant pointer to a constant
 
1187
// global, we can replace the load with the loaded constant value!
 
1188
void SCCPSolver::visitLoadInst(LoadInst &I) {
 
1189
  // If this load is of a struct, just mark the result overdefined.
 
1190
  if (I.getType()->isStructTy())
 
1191
    return markAnythingOverdefined(&I);
 
1192
  
 
1193
  LatticeVal PtrVal = getValueState(I.getOperand(0));
 
1194
  if (PtrVal.isUndefined()) return;   // The pointer is not resolved yet!
 
1195
  
 
1196
  LatticeVal &IV = ValueState[&I];
 
1197
  if (IV.isOverdefined()) return;
 
1198
 
 
1199
  if (!PtrVal.isConstant() || I.isVolatile())
 
1200
    return markOverdefined(IV, &I);
 
1201
    
 
1202
  Constant *Ptr = PtrVal.getConstant();
 
1203
 
 
1204
  // load null -> null
 
1205
  if (isa<ConstantPointerNull>(Ptr) && I.getPointerAddressSpace() == 0)
 
1206
    return markConstant(IV, &I, Constant::getNullValue(I.getType()));
 
1207
  
 
1208
  // Transform load (constant global) into the value loaded.
 
1209
  if (GlobalVariable *GV = dyn_cast<GlobalVariable>(Ptr)) {
 
1210
    if (!TrackedGlobals.empty()) {
 
1211
      // If we are tracking this global, merge in the known value for it.
 
1212
      DenseMap<GlobalVariable*, LatticeVal>::iterator It =
 
1213
        TrackedGlobals.find(GV);
 
1214
      if (It != TrackedGlobals.end()) {
 
1215
        mergeInValue(IV, &I, It->second);
 
1216
        return;
 
1217
      }
 
1218
    }
 
1219
  }
 
1220
 
 
1221
  // Transform load from a constant into a constant if possible.
 
1222
  if (Constant *C = ConstantFoldLoadFromConstPtr(Ptr, TD))
 
1223
    return markConstant(IV, &I, C);
 
1224
 
 
1225
  // Otherwise we cannot say for certain what value this load will produce.
 
1226
  // Bail out.
 
1227
  markOverdefined(IV, &I);
 
1228
}
 
1229
 
 
1230
void SCCPSolver::visitCallSite(CallSite CS) {
 
1231
  Function *F = CS.getCalledFunction();
 
1232
  Instruction *I = CS.getInstruction();
 
1233
  
 
1234
  // The common case is that we aren't tracking the callee, either because we
 
1235
  // are not doing interprocedural analysis or the callee is indirect, or is
 
1236
  // external.  Handle these cases first.
 
1237
  if (F == 0 || F->isDeclaration()) {
 
1238
CallOverdefined:
 
1239
    // Void return and not tracking callee, just bail.
 
1240
    if (I->getType()->isVoidTy()) return;
 
1241
    
 
1242
    // Otherwise, if we have a single return value case, and if the function is
 
1243
    // a declaration, maybe we can constant fold it.
 
1244
    if (F && F->isDeclaration() && !I->getType()->isStructTy() &&
 
1245
        canConstantFoldCallTo(F)) {
 
1246
      
 
1247
      SmallVector<Constant*, 8> Operands;
 
1248
      for (CallSite::arg_iterator AI = CS.arg_begin(), E = CS.arg_end();
 
1249
           AI != E; ++AI) {
 
1250
        LatticeVal State = getValueState(*AI);
 
1251
        
 
1252
        if (State.isUndefined())
 
1253
          return;  // Operands are not resolved yet.
 
1254
        if (State.isOverdefined())
 
1255
          return markOverdefined(I);
 
1256
        assert(State.isConstant() && "Unknown state!");
 
1257
        Operands.push_back(State.getConstant());
 
1258
      }
 
1259
     
 
1260
      // If we can constant fold this, mark the result of the call as a
 
1261
      // constant.
 
1262
      if (Constant *C = ConstantFoldCall(F, Operands.data(), Operands.size()))
 
1263
        return markConstant(I, C);
 
1264
    }
 
1265
 
 
1266
    // Otherwise, we don't know anything about this call, mark it overdefined.
 
1267
    return markAnythingOverdefined(I);
 
1268
  }
 
1269
 
 
1270
  // If this is a local function that doesn't have its address taken, mark its
 
1271
  // entry block executable and merge in the actual arguments to the call into
 
1272
  // the formal arguments of the function.
 
1273
  if (!TrackingIncomingArguments.empty() && TrackingIncomingArguments.count(F)){
 
1274
    MarkBlockExecutable(F->begin());
 
1275
    
 
1276
    // Propagate information from this call site into the callee.
 
1277
    CallSite::arg_iterator CAI = CS.arg_begin();
 
1278
    for (Function::arg_iterator AI = F->arg_begin(), E = F->arg_end();
 
1279
         AI != E; ++AI, ++CAI) {
 
1280
      // If this argument is byval, and if the function is not readonly, there
 
1281
      // will be an implicit copy formed of the input aggregate.
 
1282
      if (AI->hasByValAttr() && !F->onlyReadsMemory()) {
 
1283
        markOverdefined(AI);
 
1284
        continue;
 
1285
      }
 
1286
      
 
1287
      if (const StructType *STy = dyn_cast<StructType>(AI->getType())) {
 
1288
        for (unsigned i = 0, e = STy->getNumElements(); i != e; ++i) {
 
1289
          LatticeVal CallArg = getStructValueState(*CAI, i);
 
1290
          mergeInValue(getStructValueState(AI, i), AI, CallArg);
 
1291
        }
 
1292
      } else {
 
1293
        mergeInValue(AI, getValueState(*CAI));
 
1294
      }
 
1295
    }
 
1296
  }
 
1297
  
 
1298
  // If this is a single/zero retval case, see if we're tracking the function.
 
1299
  if (const StructType *STy = dyn_cast<StructType>(F->getReturnType())) {
 
1300
    if (!MRVFunctionsTracked.count(F))
 
1301
      goto CallOverdefined;  // Not tracking this callee.
 
1302
    
 
1303
    // If we are tracking this callee, propagate the result of the function
 
1304
    // into this call site.
 
1305
    for (unsigned i = 0, e = STy->getNumElements(); i != e; ++i)
 
1306
      mergeInValue(getStructValueState(I, i), I, 
 
1307
                   TrackedMultipleRetVals[std::make_pair(F, i)]);
 
1308
  } else {
 
1309
    DenseMap<Function*, LatticeVal>::iterator TFRVI = TrackedRetVals.find(F);
 
1310
    if (TFRVI == TrackedRetVals.end())
 
1311
      goto CallOverdefined;  // Not tracking this callee.
 
1312
      
 
1313
    // If so, propagate the return value of the callee into this call result.
 
1314
    mergeInValue(I, TFRVI->second);
 
1315
  }
 
1316
}
 
1317
 
 
1318
void SCCPSolver::Solve() {
 
1319
  // Process the work lists until they are empty!
 
1320
  while (!BBWorkList.empty() || !InstWorkList.empty() ||
 
1321
         !OverdefinedInstWorkList.empty()) {
 
1322
    // Process the overdefined instruction's work list first, which drives other
 
1323
    // things to overdefined more quickly.
 
1324
    while (!OverdefinedInstWorkList.empty()) {
 
1325
      Value *I = OverdefinedInstWorkList.pop_back_val();
 
1326
 
 
1327
      DEBUG(dbgs() << "\nPopped off OI-WL: " << *I << '\n');
 
1328
 
 
1329
      // "I" got into the work list because it either made the transition from
 
1330
      // bottom to constant
 
1331
      //
 
1332
      // Anything on this worklist that is overdefined need not be visited
 
1333
      // since all of its users will have already been marked as overdefined
 
1334
      // Update all of the users of this instruction's value.
 
1335
      //
 
1336
      for (Value::use_iterator UI = I->use_begin(), E = I->use_end();
 
1337
           UI != E; ++UI)
 
1338
        if (Instruction *I = dyn_cast<Instruction>(*UI))
 
1339
          OperandChangedState(I);
 
1340
    }
 
1341
    
 
1342
    // Process the instruction work list.
 
1343
    while (!InstWorkList.empty()) {
 
1344
      Value *I = InstWorkList.pop_back_val();
 
1345
 
 
1346
      DEBUG(dbgs() << "\nPopped off I-WL: " << *I << '\n');
 
1347
 
 
1348
      // "I" got into the work list because it made the transition from undef to
 
1349
      // constant.
 
1350
      //
 
1351
      // Anything on this worklist that is overdefined need not be visited
 
1352
      // since all of its users will have already been marked as overdefined.
 
1353
      // Update all of the users of this instruction's value.
 
1354
      //
 
1355
      if (I->getType()->isStructTy() || !getValueState(I).isOverdefined())
 
1356
        for (Value::use_iterator UI = I->use_begin(), E = I->use_end();
 
1357
             UI != E; ++UI)
 
1358
          if (Instruction *I = dyn_cast<Instruction>(*UI))
 
1359
            OperandChangedState(I);
 
1360
    }
 
1361
 
 
1362
    // Process the basic block work list.
 
1363
    while (!BBWorkList.empty()) {
 
1364
      BasicBlock *BB = BBWorkList.back();
 
1365
      BBWorkList.pop_back();
 
1366
 
 
1367
      DEBUG(dbgs() << "\nPopped off BBWL: " << *BB << '\n');
 
1368
 
 
1369
      // Notify all instructions in this basic block that they are newly
 
1370
      // executable.
 
1371
      visit(BB);
 
1372
    }
 
1373
  }
 
1374
}
 
1375
 
 
1376
/// ResolvedUndefsIn - While solving the dataflow for a function, we assume
 
1377
/// that branches on undef values cannot reach any of their successors.
 
1378
/// However, this is not a safe assumption.  After we solve dataflow, this
 
1379
/// method should be use to handle this.  If this returns true, the solver
 
1380
/// should be rerun.
 
1381
///
 
1382
/// This method handles this by finding an unresolved branch and marking it one
 
1383
/// of the edges from the block as being feasible, even though the condition
 
1384
/// doesn't say it would otherwise be.  This allows SCCP to find the rest of the
 
1385
/// CFG and only slightly pessimizes the analysis results (by marking one,
 
1386
/// potentially infeasible, edge feasible).  This cannot usefully modify the
 
1387
/// constraints on the condition of the branch, as that would impact other users
 
1388
/// of the value.
 
1389
///
 
1390
/// This scan also checks for values that use undefs, whose results are actually
 
1391
/// defined.  For example, 'zext i8 undef to i32' should produce all zeros
 
1392
/// conservatively, as "(zext i8 X -> i32) & 0xFF00" must always return zero,
 
1393
/// even if X isn't defined.
 
1394
bool SCCPSolver::ResolvedUndefsIn(Function &F) {
 
1395
  for (Function::iterator BB = F.begin(), E = F.end(); BB != E; ++BB) {
 
1396
    if (!BBExecutable.count(BB))
 
1397
      continue;
 
1398
    
 
1399
    for (BasicBlock::iterator I = BB->begin(), E = BB->end(); I != E; ++I) {
 
1400
      // Look for instructions which produce undef values.
 
1401
      if (I->getType()->isVoidTy()) continue;
 
1402
      
 
1403
      if (const StructType *STy = dyn_cast<StructType>(I->getType())) {
 
1404
        // Only a few things that can be structs matter for undef.  Just send
 
1405
        // all their results to overdefined.  We could be more precise than this
 
1406
        // but it isn't worth bothering.
 
1407
        if (isa<CallInst>(I) || isa<SelectInst>(I)) {
 
1408
          for (unsigned i = 0, e = STy->getNumElements(); i != e; ++i) {
 
1409
            LatticeVal &LV = getStructValueState(I, i);
 
1410
            if (LV.isUndefined())
 
1411
              markOverdefined(LV, I);
 
1412
          }
 
1413
        }
 
1414
        continue;
 
1415
      }
 
1416
      
 
1417
      LatticeVal &LV = getValueState(I);
 
1418
      if (!LV.isUndefined()) continue;
 
1419
 
 
1420
      // No instructions using structs need disambiguation.
 
1421
      if (I->getOperand(0)->getType()->isStructTy())
 
1422
        continue;
 
1423
 
 
1424
      // Get the lattice values of the first two operands for use below.
 
1425
      LatticeVal Op0LV = getValueState(I->getOperand(0));
 
1426
      LatticeVal Op1LV;
 
1427
      if (I->getNumOperands() == 2) {
 
1428
        // No instructions using structs need disambiguation.
 
1429
        if (I->getOperand(1)->getType()->isStructTy())
 
1430
          continue;
 
1431
        
 
1432
        // If this is a two-operand instruction, and if both operands are
 
1433
        // undefs, the result stays undef.
 
1434
        Op1LV = getValueState(I->getOperand(1));
 
1435
        if (Op0LV.isUndefined() && Op1LV.isUndefined())
 
1436
          continue;
 
1437
      }
 
1438
      
 
1439
      // If this is an instructions whose result is defined even if the input is
 
1440
      // not fully defined, propagate the information.
 
1441
      const Type *ITy = I->getType();
 
1442
      switch (I->getOpcode()) {
 
1443
      default: break;          // Leave the instruction as an undef.
 
1444
      case Instruction::ZExt:
 
1445
        // After a zero extend, we know the top part is zero.  SExt doesn't have
 
1446
        // to be handled here, because we don't know whether the top part is 1's
 
1447
        // or 0's.
 
1448
        markForcedConstant(I, Constant::getNullValue(ITy));
 
1449
        return true;
 
1450
      case Instruction::Mul:
 
1451
      case Instruction::And:
 
1452
        // undef * X -> 0.   X could be zero.
 
1453
        // undef & X -> 0.   X could be zero.
 
1454
        markForcedConstant(I, Constant::getNullValue(ITy));
 
1455
        return true;
 
1456
 
 
1457
      case Instruction::Or:
 
1458
        // undef | X -> -1.   X could be -1.
 
1459
        markForcedConstant(I, Constant::getAllOnesValue(ITy));
 
1460
        return true;
 
1461
 
 
1462
      case Instruction::SDiv:
 
1463
      case Instruction::UDiv:
 
1464
      case Instruction::SRem:
 
1465
      case Instruction::URem:
 
1466
        // X / undef -> undef.  No change.
 
1467
        // X % undef -> undef.  No change.
 
1468
        if (Op1LV.isUndefined()) break;
 
1469
        
 
1470
        // undef / X -> 0.   X could be maxint.
 
1471
        // undef % X -> 0.   X could be 1.
 
1472
        markForcedConstant(I, Constant::getNullValue(ITy));
 
1473
        return true;
 
1474
        
 
1475
      case Instruction::AShr:
 
1476
        // undef >>s X -> undef.  No change.
 
1477
        if (Op0LV.isUndefined()) break;
 
1478
        
 
1479
        // X >>s undef -> X.  X could be 0, X could have the high-bit known set.
 
1480
        if (Op0LV.isConstant())
 
1481
          markForcedConstant(I, Op0LV.getConstant());
 
1482
        else
 
1483
          markOverdefined(I);
 
1484
        return true;
 
1485
      case Instruction::LShr:
 
1486
      case Instruction::Shl:
 
1487
        // undef >> X -> undef.  No change.
 
1488
        // undef << X -> undef.  No change.
 
1489
        if (Op0LV.isUndefined()) break;
 
1490
        
 
1491
        // X >> undef -> 0.  X could be 0.
 
1492
        // X << undef -> 0.  X could be 0.
 
1493
        markForcedConstant(I, Constant::getNullValue(ITy));
 
1494
        return true;
 
1495
      case Instruction::Select:
 
1496
        // undef ? X : Y  -> X or Y.  There could be commonality between X/Y.
 
1497
        if (Op0LV.isUndefined()) {
 
1498
          if (!Op1LV.isConstant())  // Pick the constant one if there is any.
 
1499
            Op1LV = getValueState(I->getOperand(2));
 
1500
        } else if (Op1LV.isUndefined()) {
 
1501
          // c ? undef : undef -> undef.  No change.
 
1502
          Op1LV = getValueState(I->getOperand(2));
 
1503
          if (Op1LV.isUndefined())
 
1504
            break;
 
1505
          // Otherwise, c ? undef : x -> x.
 
1506
        } else {
 
1507
          // Leave Op1LV as Operand(1)'s LatticeValue.
 
1508
        }
 
1509
        
 
1510
        if (Op1LV.isConstant())
 
1511
          markForcedConstant(I, Op1LV.getConstant());
 
1512
        else
 
1513
          markOverdefined(I);
 
1514
        return true;
 
1515
      case Instruction::Call:
 
1516
        // If a call has an undef result, it is because it is constant foldable
 
1517
        // but one of the inputs was undef.  Just force the result to
 
1518
        // overdefined.
 
1519
        markOverdefined(I);
 
1520
        return true;
 
1521
      }
 
1522
    }
 
1523
  
 
1524
    TerminatorInst *TI = BB->getTerminator();
 
1525
    if (BranchInst *BI = dyn_cast<BranchInst>(TI)) {
 
1526
      if (!BI->isConditional()) continue;
 
1527
      if (!getValueState(BI->getCondition()).isUndefined())
 
1528
        continue;
 
1529
    } else if (SwitchInst *SI = dyn_cast<SwitchInst>(TI)) {
 
1530
      if (SI->getNumSuccessors() < 2)   // no cases
 
1531
        continue;
 
1532
      if (!getValueState(SI->getCondition()).isUndefined())
 
1533
        continue;
 
1534
    } else {
 
1535
      continue;
 
1536
    }
 
1537
    
 
1538
    // If the edge to the second successor isn't thought to be feasible yet,
 
1539
    // mark it so now.  We pick the second one so that this goes to some
 
1540
    // enumerated value in a switch instead of going to the default destination.
 
1541
    if (KnownFeasibleEdges.count(Edge(BB, TI->getSuccessor(1))))
 
1542
      continue;
 
1543
    
 
1544
    // Otherwise, it isn't already thought to be feasible.  Mark it as such now
 
1545
    // and return.  This will make other blocks reachable, which will allow new
 
1546
    // values to be discovered and existing ones to be moved in the lattice.
 
1547
    markEdgeExecutable(BB, TI->getSuccessor(1));
 
1548
    
 
1549
    // This must be a conditional branch of switch on undef.  At this point,
 
1550
    // force the old terminator to branch to the first successor.  This is
 
1551
    // required because we are now influencing the dataflow of the function with
 
1552
    // the assumption that this edge is taken.  If we leave the branch condition
 
1553
    // as undef, then further analysis could think the undef went another way
 
1554
    // leading to an inconsistent set of conclusions.
 
1555
    if (BranchInst *BI = dyn_cast<BranchInst>(TI)) {
 
1556
      BI->setCondition(ConstantInt::getFalse(BI->getContext()));
 
1557
    } else {
 
1558
      SwitchInst *SI = cast<SwitchInst>(TI);
 
1559
      SI->setCondition(SI->getCaseValue(1));
 
1560
    }
 
1561
    
 
1562
    return true;
 
1563
  }
 
1564
 
 
1565
  return false;
 
1566
}
 
1567
 
 
1568
 
 
1569
namespace {
 
1570
  //===--------------------------------------------------------------------===//
 
1571
  //
 
1572
  /// SCCP Class - This class uses the SCCPSolver to implement a per-function
 
1573
  /// Sparse Conditional Constant Propagator.
 
1574
  ///
 
1575
  struct SCCP : public FunctionPass {
 
1576
    static char ID; // Pass identification, replacement for typeid
 
1577
    SCCP() : FunctionPass(&ID) {}
 
1578
 
 
1579
    // runOnFunction - Run the Sparse Conditional Constant Propagation
 
1580
    // algorithm, and return true if the function was modified.
 
1581
    //
 
1582
    bool runOnFunction(Function &F);
 
1583
 
 
1584
    virtual void getAnalysisUsage(AnalysisUsage &AU) const {
 
1585
      AU.setPreservesCFG();
 
1586
    }
 
1587
  };
 
1588
} // end anonymous namespace
 
1589
 
 
1590
char SCCP::ID = 0;
 
1591
static RegisterPass<SCCP>
 
1592
X("sccp", "Sparse Conditional Constant Propagation");
 
1593
 
 
1594
// createSCCPPass - This is the public interface to this file.
 
1595
FunctionPass *llvm::createSCCPPass() {
 
1596
  return new SCCP();
 
1597
}
 
1598
 
 
1599
static void DeleteInstructionInBlock(BasicBlock *BB) {
 
1600
  DEBUG(dbgs() << "  BasicBlock Dead:" << *BB);
 
1601
  ++NumDeadBlocks;
 
1602
  
 
1603
  // Delete the instructions backwards, as it has a reduced likelihood of
 
1604
  // having to update as many def-use and use-def chains.
 
1605
  while (!isa<TerminatorInst>(BB->begin())) {
 
1606
    Instruction *I = --BasicBlock::iterator(BB->getTerminator());
 
1607
    
 
1608
    if (!I->use_empty())
 
1609
      I->replaceAllUsesWith(UndefValue::get(I->getType()));
 
1610
    BB->getInstList().erase(I);
 
1611
    ++NumInstRemoved;
 
1612
  }
 
1613
}
 
1614
 
 
1615
// runOnFunction() - Run the Sparse Conditional Constant Propagation algorithm,
 
1616
// and return true if the function was modified.
 
1617
//
 
1618
bool SCCP::runOnFunction(Function &F) {
 
1619
  DEBUG(dbgs() << "SCCP on function '" << F.getName() << "'\n");
 
1620
  SCCPSolver Solver(getAnalysisIfAvailable<TargetData>());
 
1621
 
 
1622
  // Mark the first block of the function as being executable.
 
1623
  Solver.MarkBlockExecutable(F.begin());
 
1624
 
 
1625
  // Mark all arguments to the function as being overdefined.
 
1626
  for (Function::arg_iterator AI = F.arg_begin(), E = F.arg_end(); AI != E;++AI)
 
1627
    Solver.markAnythingOverdefined(AI);
 
1628
 
 
1629
  // Solve for constants.
 
1630
  bool ResolvedUndefs = true;
 
1631
  while (ResolvedUndefs) {
 
1632
    Solver.Solve();
 
1633
    DEBUG(dbgs() << "RESOLVING UNDEFs\n");
 
1634
    ResolvedUndefs = Solver.ResolvedUndefsIn(F);
 
1635
  }
 
1636
 
 
1637
  bool MadeChanges = false;
 
1638
 
 
1639
  // If we decided that there are basic blocks that are dead in this function,
 
1640
  // delete their contents now.  Note that we cannot actually delete the blocks,
 
1641
  // as we cannot modify the CFG of the function.
 
1642
 
 
1643
  for (Function::iterator BB = F.begin(), E = F.end(); BB != E; ++BB) {
 
1644
    if (!Solver.isBlockExecutable(BB)) {
 
1645
      DeleteInstructionInBlock(BB);
 
1646
      MadeChanges = true;
 
1647
      continue;
 
1648
    }
 
1649
  
 
1650
    // Iterate over all of the instructions in a function, replacing them with
 
1651
    // constants if we have found them to be of constant values.
 
1652
    //
 
1653
    for (BasicBlock::iterator BI = BB->begin(), E = BB->end(); BI != E; ) {
 
1654
      Instruction *Inst = BI++;
 
1655
      if (Inst->getType()->isVoidTy() || isa<TerminatorInst>(Inst))
 
1656
        continue;
 
1657
      
 
1658
      // TODO: Reconstruct structs from their elements.
 
1659
      if (Inst->getType()->isStructTy())
 
1660
        continue;
 
1661
      
 
1662
      LatticeVal IV = Solver.getLatticeValueFor(Inst);
 
1663
      if (IV.isOverdefined())
 
1664
        continue;
 
1665
      
 
1666
      Constant *Const = IV.isConstant()
 
1667
        ? IV.getConstant() : UndefValue::get(Inst->getType());
 
1668
      DEBUG(dbgs() << "  Constant: " << *Const << " = " << *Inst);
 
1669
 
 
1670
      // Replaces all of the uses of a variable with uses of the constant.
 
1671
      Inst->replaceAllUsesWith(Const);
 
1672
      
 
1673
      // Delete the instruction.
 
1674
      Inst->eraseFromParent();
 
1675
      
 
1676
      // Hey, we just changed something!
 
1677
      MadeChanges = true;
 
1678
      ++NumInstRemoved;
 
1679
    }
 
1680
  }
 
1681
 
 
1682
  return MadeChanges;
 
1683
}
 
1684
 
 
1685
namespace {
 
1686
  //===--------------------------------------------------------------------===//
 
1687
  //
 
1688
  /// IPSCCP Class - This class implements interprocedural Sparse Conditional
 
1689
  /// Constant Propagation.
 
1690
  ///
 
1691
  struct IPSCCP : public ModulePass {
 
1692
    static char ID;
 
1693
    IPSCCP() : ModulePass(&ID) {}
 
1694
    bool runOnModule(Module &M);
 
1695
  };
 
1696
} // end anonymous namespace
 
1697
 
 
1698
char IPSCCP::ID = 0;
 
1699
static RegisterPass<IPSCCP>
 
1700
Y("ipsccp", "Interprocedural Sparse Conditional Constant Propagation");
 
1701
 
 
1702
// createIPSCCPPass - This is the public interface to this file.
 
1703
ModulePass *llvm::createIPSCCPPass() {
 
1704
  return new IPSCCP();
 
1705
}
 
1706
 
 
1707
 
 
1708
static bool AddressIsTaken(GlobalValue *GV) {
 
1709
  // Delete any dead constantexpr klingons.
 
1710
  GV->removeDeadConstantUsers();
 
1711
 
 
1712
  for (Value::use_iterator UI = GV->use_begin(), E = GV->use_end();
 
1713
       UI != E; ++UI)
 
1714
    if (StoreInst *SI = dyn_cast<StoreInst>(*UI)) {
 
1715
      if (SI->getOperand(0) == GV || SI->isVolatile())
 
1716
        return true;  // Storing addr of GV.
 
1717
    } else if (isa<InvokeInst>(*UI) || isa<CallInst>(*UI)) {
 
1718
      // Make sure we are calling the function, not passing the address.
 
1719
      if (UI.getOperandNo() != 0)
 
1720
        return true;
 
1721
    } else if (LoadInst *LI = dyn_cast<LoadInst>(*UI)) {
 
1722
      if (LI->isVolatile())
 
1723
        return true;
 
1724
    } else if (isa<BlockAddress>(*UI)) {
 
1725
      // blockaddress doesn't take the address of the function, it takes addr
 
1726
      // of label.
 
1727
    } else {
 
1728
      return true;
 
1729
    }
 
1730
  return false;
 
1731
}
 
1732
 
 
1733
bool IPSCCP::runOnModule(Module &M) {
 
1734
  SCCPSolver Solver(getAnalysisIfAvailable<TargetData>());
 
1735
 
 
1736
  // Loop over all functions, marking arguments to those with their addresses
 
1737
  // taken or that are external as overdefined.
 
1738
  //
 
1739
  for (Module::iterator F = M.begin(), E = M.end(); F != E; ++F) {
 
1740
    if (F->isDeclaration())
 
1741
      continue;
 
1742
    
 
1743
    // If this is a strong or ODR definition of this function, then we can
 
1744
    // propagate information about its result into callsites of it.
 
1745
    if (!F->mayBeOverridden())
 
1746
      Solver.AddTrackedFunction(F);
 
1747
    
 
1748
    // If this function only has direct calls that we can see, we can track its
 
1749
    // arguments and return value aggressively, and can assume it is not called
 
1750
    // unless we see evidence to the contrary.
 
1751
    if (F->hasLocalLinkage() && !AddressIsTaken(F)) {
 
1752
      Solver.AddArgumentTrackedFunction(F);
 
1753
      continue;
 
1754
    }
 
1755
 
 
1756
    // Assume the function is called.
 
1757
    Solver.MarkBlockExecutable(F->begin());
 
1758
    
 
1759
    // Assume nothing about the incoming arguments.
 
1760
    for (Function::arg_iterator AI = F->arg_begin(), E = F->arg_end();
 
1761
         AI != E; ++AI)
 
1762
      Solver.markAnythingOverdefined(AI);
 
1763
  }
 
1764
 
 
1765
  // Loop over global variables.  We inform the solver about any internal global
 
1766
  // variables that do not have their 'addresses taken'.  If they don't have
 
1767
  // their addresses taken, we can propagate constants through them.
 
1768
  for (Module::global_iterator G = M.global_begin(), E = M.global_end();
 
1769
       G != E; ++G)
 
1770
    if (!G->isConstant() && G->hasLocalLinkage() && !AddressIsTaken(G))
 
1771
      Solver.TrackValueOfGlobalVariable(G);
 
1772
 
 
1773
  // Solve for constants.
 
1774
  bool ResolvedUndefs = true;
 
1775
  while (ResolvedUndefs) {
 
1776
    Solver.Solve();
 
1777
 
 
1778
    DEBUG(dbgs() << "RESOLVING UNDEFS\n");
 
1779
    ResolvedUndefs = false;
 
1780
    for (Module::iterator F = M.begin(), E = M.end(); F != E; ++F)
 
1781
      ResolvedUndefs |= Solver.ResolvedUndefsIn(*F);
 
1782
  }
 
1783
 
 
1784
  bool MadeChanges = false;
 
1785
 
 
1786
  // Iterate over all of the instructions in the module, replacing them with
 
1787
  // constants if we have found them to be of constant values.
 
1788
  //
 
1789
  SmallVector<BasicBlock*, 512> BlocksToErase;
 
1790
 
 
1791
  for (Module::iterator F = M.begin(), E = M.end(); F != E; ++F) {
 
1792
    if (Solver.isBlockExecutable(F->begin())) {
 
1793
      for (Function::arg_iterator AI = F->arg_begin(), E = F->arg_end();
 
1794
           AI != E; ++AI) {
 
1795
        if (AI->use_empty() || AI->getType()->isStructTy()) continue;
 
1796
        
 
1797
        // TODO: Could use getStructLatticeValueFor to find out if the entire
 
1798
        // result is a constant and replace it entirely if so.
 
1799
 
 
1800
        LatticeVal IV = Solver.getLatticeValueFor(AI);
 
1801
        if (IV.isOverdefined()) continue;
 
1802
        
 
1803
        Constant *CST = IV.isConstant() ?
 
1804
        IV.getConstant() : UndefValue::get(AI->getType());
 
1805
        DEBUG(dbgs() << "***  Arg " << *AI << " = " << *CST <<"\n");
 
1806
        
 
1807
        // Replaces all of the uses of a variable with uses of the
 
1808
        // constant.
 
1809
        AI->replaceAllUsesWith(CST);
 
1810
        ++IPNumArgsElimed;
 
1811
      }
 
1812
    }
 
1813
 
 
1814
    for (Function::iterator BB = F->begin(), E = F->end(); BB != E; ++BB) {
 
1815
      if (!Solver.isBlockExecutable(BB)) {
 
1816
        DeleteInstructionInBlock(BB);
 
1817
        MadeChanges = true;
 
1818
 
 
1819
        TerminatorInst *TI = BB->getTerminator();
 
1820
        for (unsigned i = 0, e = TI->getNumSuccessors(); i != e; ++i) {
 
1821
          BasicBlock *Succ = TI->getSuccessor(i);
 
1822
          if (!Succ->empty() && isa<PHINode>(Succ->begin()))
 
1823
            TI->getSuccessor(i)->removePredecessor(BB);
 
1824
        }
 
1825
        if (!TI->use_empty())
 
1826
          TI->replaceAllUsesWith(UndefValue::get(TI->getType()));
 
1827
        TI->eraseFromParent();
 
1828
 
 
1829
        if (&*BB != &F->front())
 
1830
          BlocksToErase.push_back(BB);
 
1831
        else
 
1832
          new UnreachableInst(M.getContext(), BB);
 
1833
        continue;
 
1834
      }
 
1835
      
 
1836
      for (BasicBlock::iterator BI = BB->begin(), E = BB->end(); BI != E; ) {
 
1837
        Instruction *Inst = BI++;
 
1838
        if (Inst->getType()->isVoidTy() || Inst->getType()->isStructTy())
 
1839
          continue;
 
1840
        
 
1841
        // TODO: Could use getStructLatticeValueFor to find out if the entire
 
1842
        // result is a constant and replace it entirely if so.
 
1843
        
 
1844
        LatticeVal IV = Solver.getLatticeValueFor(Inst);
 
1845
        if (IV.isOverdefined())
 
1846
          continue;
 
1847
        
 
1848
        Constant *Const = IV.isConstant()
 
1849
          ? IV.getConstant() : UndefValue::get(Inst->getType());
 
1850
        DEBUG(dbgs() << "  Constant: " << *Const << " = " << *Inst);
 
1851
 
 
1852
        // Replaces all of the uses of a variable with uses of the
 
1853
        // constant.
 
1854
        Inst->replaceAllUsesWith(Const);
 
1855
        
 
1856
        // Delete the instruction.
 
1857
        if (!isa<CallInst>(Inst) && !isa<TerminatorInst>(Inst))
 
1858
          Inst->eraseFromParent();
 
1859
 
 
1860
        // Hey, we just changed something!
 
1861
        MadeChanges = true;
 
1862
        ++IPNumInstRemoved;
 
1863
      }
 
1864
    }
 
1865
 
 
1866
    // Now that all instructions in the function are constant folded, erase dead
 
1867
    // blocks, because we can now use ConstantFoldTerminator to get rid of
 
1868
    // in-edges.
 
1869
    for (unsigned i = 0, e = BlocksToErase.size(); i != e; ++i) {
 
1870
      // If there are any PHI nodes in this successor, drop entries for BB now.
 
1871
      BasicBlock *DeadBB = BlocksToErase[i];
 
1872
      for (Value::use_iterator UI = DeadBB->use_begin(), UE = DeadBB->use_end();
 
1873
           UI != UE; ) {
 
1874
        // Grab the user and then increment the iterator early, as the user
 
1875
        // will be deleted. Step past all adjacent uses from the same user.
 
1876
        Instruction *I = dyn_cast<Instruction>(*UI);
 
1877
        do { ++UI; } while (UI != UE && *UI == I);
 
1878
 
 
1879
        // Ignore blockaddress users; BasicBlock's dtor will handle them.
 
1880
        if (!I) continue;
 
1881
 
 
1882
        bool Folded = ConstantFoldTerminator(I->getParent());
 
1883
        if (!Folded) {
 
1884
          // The constant folder may not have been able to fold the terminator
 
1885
          // if this is a branch or switch on undef.  Fold it manually as a
 
1886
          // branch to the first successor.
 
1887
#ifndef NDEBUG
 
1888
          if (BranchInst *BI = dyn_cast<BranchInst>(I)) {
 
1889
            assert(BI->isConditional() && isa<UndefValue>(BI->getCondition()) &&
 
1890
                   "Branch should be foldable!");
 
1891
          } else if (SwitchInst *SI = dyn_cast<SwitchInst>(I)) {
 
1892
            assert(isa<UndefValue>(SI->getCondition()) && "Switch should fold");
 
1893
          } else {
 
1894
            llvm_unreachable("Didn't fold away reference to block!");
 
1895
          }
 
1896
#endif
 
1897
          
 
1898
          // Make this an uncond branch to the first successor.
 
1899
          TerminatorInst *TI = I->getParent()->getTerminator();
 
1900
          BranchInst::Create(TI->getSuccessor(0), TI);
 
1901
          
 
1902
          // Remove entries in successor phi nodes to remove edges.
 
1903
          for (unsigned i = 1, e = TI->getNumSuccessors(); i != e; ++i)
 
1904
            TI->getSuccessor(i)->removePredecessor(TI->getParent());
 
1905
          
 
1906
          // Remove the old terminator.
 
1907
          TI->eraseFromParent();
 
1908
        }
 
1909
      }
 
1910
 
 
1911
      // Finally, delete the basic block.
 
1912
      F->getBasicBlockList().erase(DeadBB);
 
1913
    }
 
1914
    BlocksToErase.clear();
 
1915
  }
 
1916
 
 
1917
  // If we inferred constant or undef return values for a function, we replaced
 
1918
  // all call uses with the inferred value.  This means we don't need to bother
 
1919
  // actually returning anything from the function.  Replace all return
 
1920
  // instructions with return undef.
 
1921
  //
 
1922
  // Do this in two stages: first identify the functions we should process, then
 
1923
  // actually zap their returns.  This is important because we can only do this
 
1924
  // if the address of the function isn't taken.  In cases where a return is the
 
1925
  // last use of a function, the order of processing functions would affect
 
1926
  // whether other functions are optimizable.
 
1927
  SmallVector<ReturnInst*, 8> ReturnsToZap;
 
1928
  
 
1929
  // TODO: Process multiple value ret instructions also.
 
1930
  const DenseMap<Function*, LatticeVal> &RV = Solver.getTrackedRetVals();
 
1931
  for (DenseMap<Function*, LatticeVal>::const_iterator I = RV.begin(),
 
1932
       E = RV.end(); I != E; ++I) {
 
1933
    Function *F = I->first;
 
1934
    if (I->second.isOverdefined() || F->getReturnType()->isVoidTy())
 
1935
      continue;
 
1936
  
 
1937
    // We can only do this if we know that nothing else can call the function.
 
1938
    if (!F->hasLocalLinkage() || AddressIsTaken(F))
 
1939
      continue;
 
1940
    
 
1941
    for (Function::iterator BB = F->begin(), E = F->end(); BB != E; ++BB)
 
1942
      if (ReturnInst *RI = dyn_cast<ReturnInst>(BB->getTerminator()))
 
1943
        if (!isa<UndefValue>(RI->getOperand(0)))
 
1944
          ReturnsToZap.push_back(RI);
 
1945
  }
 
1946
 
 
1947
  // Zap all returns which we've identified as zap to change.
 
1948
  for (unsigned i = 0, e = ReturnsToZap.size(); i != e; ++i) {
 
1949
    Function *F = ReturnsToZap[i]->getParent()->getParent();
 
1950
    ReturnsToZap[i]->setOperand(0, UndefValue::get(F->getReturnType()));
 
1951
  }
 
1952
    
 
1953
  // If we infered constant or undef values for globals variables, we can delete
 
1954
  // the global and any stores that remain to it.
 
1955
  const DenseMap<GlobalVariable*, LatticeVal> &TG = Solver.getTrackedGlobals();
 
1956
  for (DenseMap<GlobalVariable*, LatticeVal>::const_iterator I = TG.begin(),
 
1957
         E = TG.end(); I != E; ++I) {
 
1958
    GlobalVariable *GV = I->first;
 
1959
    assert(!I->second.isOverdefined() &&
 
1960
           "Overdefined values should have been taken out of the map!");
 
1961
    DEBUG(dbgs() << "Found that GV '" << GV->getName() << "' is constant!\n");
 
1962
    while (!GV->use_empty()) {
 
1963
      StoreInst *SI = cast<StoreInst>(GV->use_back());
 
1964
      SI->eraseFromParent();
 
1965
    }
 
1966
    M.getGlobalList().erase(GV);
 
1967
    ++IPNumGlobalConst;
 
1968
  }
 
1969
 
 
1970
  return MadeChanges;
 
1971
}