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.

Reply via email to