[LLVMdev] Instruction as Value in PHI

Ryan Taylor ryta1203 at gmail.com
Thu Sep 20 15:38:42 PDT 2012

Ah, I see. This is my instruction:

%lsr.iv125.us.ph = phi i32 [ %lsr.iv.next126.us, %limit.exit281.i.us ], [
sub (i32 0, i32 ptrtoint ([8 x [2 x i32]]* @Maxlogmap_Decode_next_state to
i32)), %for.cond195.preheader.i.us ]

So there is a ptrtoint inside a sub inside a phi.

I'm just going to write a pass that promotes/demotes the embedded instr,
shouldn't take long.


On Thu, Sep 20, 2012 at 3:33 PM, Eli Friedman <eli.friedman at gmail.com>wrote:

> On Thu, Sep 20, 2012 at 3:18 PM, Ryan Taylor <ryta1203 at gmail.com> wrote:
> > Curious, is there a pass/mechanism that exists to promote an instruction
> > that is a value of a PHI?
> >
> > For example, if one of the incoming values is a sub(x, y) from BB2, does
> > there exist something to promote this instruction back to BB2 (such that
> tmp
> > = sub(x,y)) and the PHI replaces the sub instr with tmp?
> >
> > Or is the above the natural state that is then optimized into using sub,
> is
> > there a call that does this that I can turn off?
> It sounds like you're talking about a ConstantExpr.  Those don't
> normally get lowered until CodeGen.  You could expand it at the IR
> level, but there isn't any builtin function to do that IIRC.
> -Eli
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20120920/31e96b93/attachment.html>

More information about the llvm-dev mailing list