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>