PHINode in entry block

All,

Consider the case where the entry block to a function acts like a loop (e.g. it ends with a conditional break to itself and somewhere else). How would one create a PHINode (representing an index perhaps) which has a constant index (say 0) when entering the function, and (oldval+1) when looping.

I understand how to do this if the loop were not in the entry block (by simply using node->addIncoming(ConstantInt(…), entry), node->addIncoming(builder.CreateAdd(node,…),loopBlock) ).

My question is how would one do this using the C++ API when there is no predecessor since it is the entry block.

Thanks,
Billy Moses

Hi,

An entry block cannot have any phi-nodes. If you have a function that starts with a loop, then your entry block will be a single unconditional branch to a basic block which is the first basic block of the loop. Regards, John Criswell

Hi William,

From: llvmdev-bounces@cs.uiuc.edu [mailto:llvmdev-bounces@cs.uiuc.edu]
On Behalf Of William Moses
Subject: [LLVMdev] PHINode in entry block

Consider the case where the entry block to a function acts like a loop (e.g. it
ends with a conditional break to itself and somewhere else). How would one create
a PHINode (representing an index perhaps) which has a constant index (say 0) when
entering the function, and (oldval+1) when looping.

My question is how would one do this using the C++ API when there is no predecessor
since it is the entry block.

In this case you need to create an essentially empty entry block as a predecessor containing nothing but a branch to the starting block of the loop; its sole purpose is to provide a block for the PHI node to reference.

- Chuck