Is there any way to disable short-circuit evaluation of expressions in Clang/LLVM?<div><br></div><div>Let's say I have C code like the following:</div><div><br></div><div><div><font class="Apple-style-span" face="'courier new', monospace">bool validX = get_group_id(0) > 32;</font></div>
<div><font class="Apple-style-span" face="'courier new', monospace">  </font></div><div><font class="Apple-style-span" face="'courier new', monospace">int globalIndexY0 = get_group_id(1)*186 + 6*get_local_id(1) + 0 + 1;</font></div>
<div><font class="Apple-style-span" face="'courier new', monospace">bool valid0       = validX && globalIndexY0 >= 4 && globalIndexY0 < 3910;</font></div><div><font class="Apple-style-span" face="'courier new', monospace"><br>
</font></div><div><font class="Apple-style-span" face="'courier new', monospace">int globalIndexY1 = get_group_id(1)*186 + 6*get_local_id(1) + 1 + 1;</font></div><div><font class="Apple-style-span" face="'courier new', monospace">bool valid1       = validX && globalIndexY1 >= 4 && globalIndexY1 < 3910;</font></div>
<div><font class="Apple-style-span" face="'courier new', monospace"><br></font></div><div><font class="Apple-style-span" face="'courier new', monospace">int globalIndexY2 = get_group_id(1)*186 + 6*get_local_id(1) + 2 + 1;</font></div>
<div><font class="Apple-style-span" face="'courier new', monospace">bool valid2       = validX && globalIndexY2 >= 4 && globalIndexY2 < 3910;</font></div><div><br></div><div>Clang, even at -O0, is performing short-circuit evaluation of these expressions, resulting in a fair number of branch instructions being generated.  For most targets, this is a beneficial optimizations.  However, for my target (PTX), it would be most beneficial to actually evaluate the entire expression and remove the unneeded branches.  Is this possible with current Clang/LLVM?</div>
<div><br></div>-- <br><br><div>Thanks,</div><div><br></div><div>Justin Holewinski</div><br>
</div>