Hi,
How does the requirement that phi instructions have one value per predecessor basic block interact with indirectbr instructions? For instance, take the following code:
L1:
br i1 %somevalue, label %L2, label %L3
L2:
%ret1 = i8* blockaddress(@myfunction, %L5)
br label %L4
L3:
%ret2 = i8* blockaddress(@myfunction, %L6)
br label %L4
L4:
%ret = phi i8* [%ret1, L2], [%ret2, L3]
indirectbr i8* %ret, [label %L5, label %L6]
L5:
%myval = phi i32 [0, %L2], [1, %L3] ; are both of these values required, even though the only real possible predecessor block is L2?
ret i32 %myval
L6:
%myval = phi i32 [0, %L2], [1, %L3] ; likewise
ret i32 %myval
Boiled down, I think my question is, “how strict is the ‘one value per predecessor block’ rule on a phi instruction?”
FYI, I am planning on using indirectbr to implement jsr and ret instructions in Java. I fully expect that there are syntax errors in the above code - but I hope you get the idea.
Thanks,
Joshua