[LLVMdev] How to get the label field of PHI instruction?

Duncan Sands baldrick at free.fr
Thu May 10 01:19:20 PDT 2012


Hi Launcher,

> Typical PHI instruction in LLVM goes like this:
> %P = phi i32* [%A, %BB1], [%B, %BB2]
>
> When I try to access all the source operands, only %A and %B are included. I
> checked the methods in instruction.h, but I didn't find any methods
> obtaining the label fields i.e. %BB1, %BB2.

use getIncomingBlock.  You can also use getIncomingValue for getting the values
%A, %B rather than using getOperand.

> I notice that each label of a basic block is related with a value which can
> be referenced in 'br' instructions. Suppose BBPtr is a pointer of a basic
> block, when I use errs()<<BBPtr, I will get a string like '0x984402'.
> Similarly, I see both instruction pointer and operand pointer are able to
> return this kind of string which can be used to identify different object
> instances. The question is that whether there is any method that can return
> the string '0x984402'. I try errs<<getOperand(int i), and it can also
> display '0x984402'. Since getOperand(int i) returns Value* . I guess there
> must be some overload function of Value* to help display '0x984402'. But I
> didn't find it. Any suggestions about this are appreciated.

Use dump, eg: phi->getIncomingBlock(i)->dump().

Ciao, Duncan.



More information about the llvm-dev mailing list