x86 branches vs conditional moves

Steven Bosscher stevenb.gcc@gmail.com
Fri Aug 4 18:49:00 GMT 2017


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>



More information about the Gcc mailing list