[LLVMdev] complex branching generation
Villmow, Micah
Micah.Villmow at amd.com
Wed Oct 1 13:19:52 PDT 2008
LLVM seems to be generating way too complex of branching based on the
short-circuit optimization. The code in question is as follows:
define void @ test_fc_while_and(float %x, float %y, float addrspace(11)*
%result) nounwind {
entry:
%tobool3 = fcmp une float %x, 0.000000e+000 ; <i1>
[#uses=1]
%tobool24 = fcmp une float %y, 0.000000e+000 ; <i1>
[#uses=2]
%or.cond5 = and i1 %tobool3, %tobool24 ; <i1> [#uses=1]
br i1 %or.cond5, label %bb.nph, label %whileexit
bb.nph: ; preds = %entry
br i1 %tobool24, label %whilebody.us, label %whilebody
whilebody.us: ; preds = %whilebody.us, %bb.nph
...code here...
br i1 %phitmp, label %whilebody.us, label %whileexit
whilebody: ; preds = %bb.nph
...code here...
br label %whileexit
whileexit: ; preds = %whilebody, %whilebody.us, %entry
%z.0.lcssa = phi float [ 0.000000e+000, %entry ], [ %add,
%whilebody ], [ %add.us, %whilebody.us ] ; <float>
[#uses=1]
store float %z.0.lcssa, float addrspace(11)* %result
ret void
}
based on original code of:
void test_fc_while_and(float x, float y, float* result)
{
float z = (float)0;
while (x && y) {
z += (x * y);
++x
}
*result = z;
}
Now the problem issue is with the bolded code. The two comparisons and
the and instruction that are mapped to the bolded while statement. What
I am trying to figure out why the bb.nph branch is even required and how
do I disable it from being generated? The first branch instruction
handles correctly the condition that I wanted, so there should be no
reason that bb.nph is generated. The same for whilebody, as it shouldn't
be there.
Any ideas?
Thanks,
Micah Villmow
Systems Engineer
Advanced Technology & Performance
Advanced Micro Devices Inc.
4555 Great America Pkwy,
Santa Clara, CA. 95054
P: 408-572-6219
F: 408-572-6596
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20081001/83ae99fa/attachment.html>
More information about the llvm-dev
mailing list