diff options
| -rw-r--r-- | llvm/include/llvm/Analysis/PHITransAddr.h | 6 | ||||
| -rw-r--r-- | llvm/lib/Analysis/PHITransAddr.cpp | 28 | 
2 files changed, 17 insertions, 17 deletions
diff --git a/llvm/include/llvm/Analysis/PHITransAddr.h b/llvm/include/llvm/Analysis/PHITransAddr.h index d090dc38f1d..c88e4013aa1 100644 --- a/llvm/include/llvm/Analysis/PHITransAddr.h +++ b/llvm/include/llvm/Analysis/PHITransAddr.h @@ -83,9 +83,9 @@ public:    void dump() const; -  /// Verify - Check internal consistency of this data structure.  Though it -  /// claims to return a bool, it actually aborts on error and always returns -  /// true. +  /// Verify - Check internal consistency of this data structure.  If the +  /// structure is valid, it returns true.  If invalid, it prints errors and +  /// returns false.    bool Verify() const;  private:    Value *PHITranslateSubExpr(Value *V, BasicBlock *CurBB, BasicBlock *PredBB); diff --git a/llvm/lib/Analysis/PHITransAddr.cpp b/llvm/lib/Analysis/PHITransAddr.cpp index 187924f45a8..2dbdb1981a0 100644 --- a/llvm/lib/Analysis/PHITransAddr.cpp +++ b/llvm/lib/Analysis/PHITransAddr.cpp @@ -154,12 +154,20 @@ Value *PHITransAddr::PHITranslateSubExpr(Value *V, BasicBlock *CurBB,    Instruction *Inst = dyn_cast<Instruction>(V);    if (Inst == 0) return V; -  // If 'Inst' is defined in this block, it must be an input that needs to be -  // phi translated or an intermediate expression that needs to be incorporated -  // into the expression. -  if (Inst->getParent() == CurBB) { -    assert(std::count(InstInputs.begin(), InstInputs.end(), Inst) && -           "Not an input?"); +  // Determine whether 'Inst' is an input to our PHI translatable expression. +  bool isInput = std::count(InstInputs.begin(), InstInputs.end(), Inst); + +  // Handle inputs instructions if needed. +  if (isInput) { +    if (Inst->getParent() != CurBB) { +      // If it is an input defined in a different block, then it remains an +      // input. +      return Inst; +    } +   +    // If 'Inst' is defined in this block, it must be an input that needs to be +    // phi translated or an intermediate expression that needs to be incorporated +    // into the expression.      // If this is a PHI, go ahead and translate it.      if (PHINode *PN = dyn_cast<PHINode>(Inst)) @@ -179,14 +187,6 @@ Value *PHITransAddr::PHITranslateSubExpr(Value *V, BasicBlock *CurBB,      for (unsigned i = 0, e = Inst->getNumOperands(); i != e; ++i)        if (Instruction *Op = dyn_cast<Instruction>(Inst->getOperand(i)))          InstInputs.push_back(Op); -     -  } else { -    // Determine whether 'Inst' is an input to our PHI translatable expression. -    bool isInput = std::count(InstInputs.begin(), InstInputs.end(), Inst); -     -    // If it is an input defined in a different block, then it remains an input. -    if (isInput) -      return Inst;    }    // Ok, it must be an intermediate result (either because it started that way  | 

