From c7f7c1dc5067a36c8ae337610dcbbe55d525c80c Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Tue, 2 Dec 2008 07:16:45 +0000 Subject: [PATCH] add a little helper function that does PHI translation. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60405 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Value.h | 11 +++++++++++ lib/VMCore/Value.cpp | 13 +++++++++++++ 2 files changed, 24 insertions(+) diff --git a/include/llvm/Value.h b/include/llvm/Value.h index ee7e25ac76a..bc741f27b0a 100644 --- a/include/llvm/Value.h +++ b/include/llvm/Value.h @@ -242,6 +242,17 @@ public: const Value *getUnderlyingObject() const { return const_cast(this)->getUnderlyingObject(); } + + /// DoPHITranslation - If this value is a PHI node with CurBB as a its parent, + /// return the value in the PHI node corresponding to PredBB. If not, return + /// ourself. This is useful if you want to know the value something has in a + /// predecessor block. + Value *DoPHITranslation(const BasicBlock *CurBB, const BasicBlock *PredBB); + + const Value *DoPHITranslation(const BasicBlock *CurBB, + const BasicBlock *PredBB) const{ + return const_cast(this)->DoPHITranslation(CurBB, PredBB); + } }; inline std::ostream &operator<<(std::ostream &OS, const Value &V) { diff --git a/lib/VMCore/Value.cpp b/lib/VMCore/Value.cpp index 0976a745991..1b023e2feea 100644 --- a/lib/VMCore/Value.cpp +++ b/lib/VMCore/Value.cpp @@ -358,6 +358,19 @@ Value *Value::getUnderlyingObject() { return this; } +/// DoPHITranslation - If this value is a PHI node with CurBB as a its parent, +/// return the value in the PHI node corresponding to PredBB. If not, return +/// ourself. This is useful if you want to know the value something has in a +/// predecessor block. +Value *Value::DoPHITranslation(const BasicBlock *CurBB, + const BasicBlock *PredBB) { + PHINode *PN = dyn_cast(this); + if (PN && PN->getParent() == CurBB) + return PN->getIncomingValueForBlock(PredBB); + return this; +} + + //===----------------------------------------------------------------------===// // User Class //===----------------------------------------------------------------------===// -- 2.34.1