https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104335

rdapp at linux dot ibm.com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |rdapp at linux dot ibm.com

--- Comment #1 from rdapp at linux dot ibm.com ---
The problem is that we pass a CC comparison to rs6000_emit_cmove ().  In the
sequence before it will return false via

  if (FLOAT_MODE_P (compare_mode) && !FLOAT_MODE_P (result_mode))

because compare_mode == SFmode and result_mode == DImode.

Now it continues with compare_mode == CCFPmode and result_mode still DImode. 
Finally, in rs6000_generate_compare the validation fails.

It looks like this function does not expect CC comparison.  It looks like you
always try to generate one in the .md file already, regardless of whether the
incoming comparison already is a CC comparison or not.

I'm not really sure how to proceed.  I guess CCFPmode is not a real FLOAT_MODE
but maybe we should not continue at this point anyway?  Or would we need some
other mechanism now to make backends aware that this situation can occur now? 
I haven't checked all of them but I was expecting the backend to just return
NULL_RTX if it cannot handle a specific combination of ops.

Reply via email to