https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68232
--- Comment #8 from James Greenhalgh <jgreenhalgh at gcc dot gnu.org> --- (In reply to Pat Haugen from comment #6) > (In reply to James Greenhalgh from comment #5) > > "Fixed" with the testsuite skips. Feel free to add any other target triplets > > for which this test is unreliable. > > I was going to modify the powerpc64le triplet to just powerpc*-*-* since it > also fails for powerpc64 (big endian) and powerpc-ibm-aix, but looking at > gcc/config/rs6000/rs6000.h, it has BRANCH_COST defined to a non-zero value: > > #define BRANCH_COST(speed_p, predictable_p) 3 > > > So there must be something more than just "doesn't work for targets with > branch cost == 0". I'm still happy to make the change if there are other > reasons, but didn't want to do so without hearing first. Sorry that I took a while to get round to looking at this. For powerpc64 you'll need to enable conditional move instructions using "-misel" (or equivalent) for this test to pass. For hppa64, the "experimental" movdicc pattern has this restriction: if (GET_MODE (XEXP (operands[1], 0)) != DImode || GET_MODE (XEXP (operands[1], 0)) != GET_MODE (XEXP (operands[1], 1))) But, we're trying to expand with this comparison in operands[1]: (le (subreg/s/u:SI (reg/v:DI 70 [ x+-4 ]) 4) (subreg/s/u:SI (reg/v:DI 71 [ y+-4 ]) 4)) so this test fails, and we fail to ifcvt the sequence. The test should be skipped on hppa64 until more complete support for conditional moves is added.