On Sat, Jul 8, 2017 at 1:30 AM, Michael Clark wrote: > Why does gcc branch on _Bool, but emits a conditional move for an integer? > can it emit cmovne instead of branching? also curious where one would change > this to learn about GCC internals.
The RTL generated for the int and _Bool case is different: ;; Function select_int (select_int, funcdef_no=0, decl_uid=1820, cgraph_uid=0, symbol_order=0) 3: NOTE_INSN_BASIC_BLOCK 2 2: NOTE_INSN_FUNCTION_BEG 5: flags:CCZ=cmp([`c'],0) 6: pc={(flags:CCZ==0)?L11:pc} 7: NOTE_INSN_BASIC_BLOCK 3 8: r88:SI=[`a'] 11: L11: 12: NOTE_INSN_BASIC_BLOCK 4 13: r88:SI=[`b'] 18: L18: 21: NOTE_INSN_BASIC_BLOCK 5 19: ax:SI=r88:SI 20: use ax:SI ;; Function select_bool (select_bool, funcdef_no=1, decl_uid=1822, cgraph_uid=1, symbol_order=1) 3: NOTE_INSN_BASIC_BLOCK 2 2: NOTE_INSN_FUNCTION_BEG 5: flags:CCZ=cmp([`C'],0) 6: pc={(flags:CCZ==0)?L13:pc} 7: NOTE_INSN_BASIC_BLOCK 3 8: flags:CCZ=cmp([`a'],0) 9: r90:QI=flags:CCZ!=0 13: L13: 14: NOTE_INSN_BASIC_BLOCK 4 15: flags:CCZ=cmp([`b'],0) 16: r90:QI=flags:CCZ!=0 22: L22: 25: NOTE_INSN_BASIC_BLOCK 5 23: ax:QI=r90:QI 24: use ax:QI As noted earlier, this causes RTL if-conversion to fail. Somewhat related to PR20070, but even with -fcrossjumping, the test case fails. (I expected cross-jumping to merge the "r90:QI=flags:CCZ!=0" insns.) Ciao! Steven <div id="DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2"><br /> <table style="border-top: 1px solid #D3D4DE;"> <tr> <td style="width: 55px; padding-top: 13px;"><a href="http://www.avg.com/email-signature?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail" target="_blank"><img src="https://ipmcdn.avast.com/images/icons/icon-envelope-tick-green-avg-v1.png" alt="" width="46" height="29" style="width: 46px; height: 29px;" /></a></td> <td style="width: 470px; padding-top: 12px; color: #41424e; font-size: 13px; font-family: Arial, Helvetica, sans-serif; line-height: 18px;">Virus-free. <a href="http://www.avg.com/email-signature?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail" target="_blank" style="color: #4453ea;">www.avg.com</a> </td> </tr> </table><a href="#DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2" width="1" height="1"></a></div>