Instruction as Value in PHI

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.


Ah, I see. This is my instruction: = phi i32 [, ], [ sub (i32 0, i32 ptrtoint ([8 x [2 x i32]]* @Maxlogmap_Decode_next_state to i32)), ]

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.