rs6000: Workaround for new ifcvt behavior [PR104335].
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.
This commit is contained in:
parent
73a118c209
commit
fac15bf848
1 changed files with 6 additions and 0 deletions
|
@ -16215,6 +16215,12 @@ rs6000_emit_int_cmove (rtx dest, rtx op, rtx true_cond, rtx false_cond)
|
|||
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. */
|
||||
|
|
Loading…
Add table
Reference in a new issue