Commit eb9b0330 authored by Tanya Lattner's avatar Tanya Lattner
Browse files

Merge from mainline because Owen said so.

llvm-svn: 42080
parent 9641951f
Loading
Loading
Loading
Loading
+16 −1
Original line number Diff line number Diff line
@@ -673,6 +673,7 @@ namespace {
    void dump(DenseMap<BasicBlock*, Value*>& d);
    bool iterateOnFunction(Function &F);
    Value* CollapsePhi(PHINode* p);
    bool isSafeReplacement(PHINode* p, Instruction* inst);
  };
  
  char GVN::ID = 0;
@@ -731,6 +732,7 @@ Value* GVN::CollapsePhi(PHINode* p) {
  if (constVal) {
    if (Instruction* inst = dyn_cast<Instruction>(constVal)) {
      if (DT.dominates(inst, p))
        if (isSafeReplacement(p, inst))
          return inst;
    } else {
      return constVal;
@@ -740,6 +742,19 @@ Value* GVN::CollapsePhi(PHINode* p) {
  return 0;
}

bool GVN::isSafeReplacement(PHINode* p, Instruction* inst) {
  if (!isa<PHINode>(inst))
    return true;
  
  for (Instruction::use_iterator UI = p->use_begin(), E = p->use_end();
       UI != E; ++UI)
    if (PHINode* use_phi = dyn_cast<PHINode>(UI))
      if (use_phi->getParent() == inst->getParent())
        return false;
  
  return true;
}

/// GetValueForBlock - Get the value to use within the specified basic block.
/// available values are in Phis.
Value *GVN::GetValueForBlock(BasicBlock *BB, LoadInst* orig,