Since r12-6747-gaa8cfe785953a0 ifcvt passes a "cc comparison"
i.e. the representation of the result of a comparison to the
backend. rs6000_emit_int_cmove () is not prepared to handle this.
Therefore, this patch makes it return false in such a case.
PR target/104335
gcc/ChangeLog:
* config/rs6000/rs6000.cc (rs6000_emit_int_cmove): Return false
if the expected comparison's first operand is of mode MODE_CC.
if (mode != SImode && (!TARGET_POWERPC64 || mode != DImode))
return false;
+ /* PR104335: We now need to expect CC-mode "comparisons"
+ coming from ifcvt. The following code expects proper
+ comparisons so better abort here. */
+ if (GET_MODE_CLASS (GET_MODE (XEXP (op, 0))) == MODE_CC)
+ return false;
+
/* We still have to do the compare, because isel doesn't do a
compare, it just looks at the CRx bits set by a previous compare
instruction. */