LLVM API Documentation

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions | List of all members
llvm::PHITransAddr Class Reference

#include <PHITransAddr.h>

Public Member Functions

 PHITransAddr (Value *addr, const DataLayout *td)
 
ValuegetAddr () const
 
bool NeedsPHITranslationFromBlock (BasicBlock *BB) const
 
bool IsPotentiallyPHITranslatable () const
 
bool PHITranslateValue (BasicBlock *CurBB, BasicBlock *PredBB, const DominatorTree *DT)
 
ValuePHITranslateWithInsertion (BasicBlock *CurBB, BasicBlock *PredBB, const DominatorTree &DT, SmallVectorImpl< Instruction * > &NewInsts)
 
void dump () const
 
bool Verify () const
 

Detailed Description

PHITransAddr - An address value which tracks and handles phi translation. As we walk "up" the CFG through predecessors, we need to ensure that the address we're tracking is kept up to date. For example, if we're analyzing an address of "&A[i]" and walk through the definition of 'i' which is a PHI node, we must phi translate i to get "&A[j]" or else we will analyze an incorrect pointer in the predecessor block.

This is designed to be a relatively small object that lives on the stack and is copyable.

Definition at line 35 of file PHITransAddr.h.

Constructor & Destructor Documentation

llvm::PHITransAddr::PHITransAddr ( Value addr,
const DataLayout td 
)
inline

Definition at line 48 of file PHITransAddr.h.

References I.

Member Function Documentation

void PHITransAddr::dump ( ) const

Definition at line 45 of file PHITransAddr.cpp.

References llvm::dbgs().

Value* llvm::PHITransAddr::getAddr ( ) const
inline

Definition at line 54 of file PHITransAddr.h.

bool PHITransAddr::IsPotentiallyPHITranslatable ( ) const

IsPotentiallyPHITranslatable - If this needs PHI translation, return true if we have some hope of doing it. This should be used as a filter to avoid calling PHITranslateValue in hopeless situations.

Definition at line 115 of file PHITransAddr.cpp.

References CanPHITrans(), and llvm::dyn_cast().

bool llvm::PHITransAddr::NeedsPHITranslationFromBlock ( BasicBlock BB) const
inline

NeedsPHITranslationFromBlock - Return true if moving from the specified BasicBlock to its predecessors requires PHI translation.

Definition at line 58 of file PHITransAddr.h.

References getParent().

bool PHITransAddr::PHITranslateValue ( BasicBlock CurBB,
BasicBlock PredBB,
const DominatorTree DT 
)

PHITranslateValue - PHI translate the current address up the CFG from CurBB to Pred, updating our state to reflect any needed changes. If the dominator tree DT is non-null, the translated value must dominate PredBB. This returns true on failure and sets Addr to null.

Definition at line 322 of file PHITransAddr.cpp.

References llvm::DominatorTree::dominates(), llvm::Instruction::getParent(), and Verify().

Value * PHITransAddr::PHITranslateWithInsertion ( BasicBlock CurBB,
BasicBlock PredBB,
const DominatorTree DT,
SmallVectorImpl< Instruction * > &  NewInsts 
)

PHITranslateWithInsertion - PHI translate this value into the specified predecessor block, inserting a computation of the value if it is unavailable.

All newly created instructions are added to the NewInsts list. This returns null on failure.

Definition at line 346 of file PHITransAddr.cpp.

References llvm::Instruction::eraseFromParent(), llvm::SmallVectorImpl< T >::pop_back_val(), and llvm::SmallVectorTemplateCommon< T >::size().

bool PHITransAddr::Verify ( ) const

Verify - Check internal consistency of this data structure. If the structure is valid, it returns true. If invalid, it prints errors and returns false.

Definition at line 92 of file PHITransAddr.cpp.

References llvm::errs(), llvm_unreachable, and VerifySubExpr().

Referenced by PHITranslateValue().


The documentation for this class was generated from the following files: