This patch fixes the MIPS octeon-baddu-1.c failures. As Andrew says in the PR, the problem is that the combined instruction seems more expensive than the separate ones.
Tested on mips64-linux-gnu and applied. Richard gcc/ PR target/51278 * config/mips/mips.c (mips_rtx_costs): Handle baddu. Index: gcc/config/mips/mips.c =================================================================== --- gcc/config/mips/mips.c 2011-11-26 12:51:05.000000000 +0000 +++ gcc/config/mips/mips.c 2011-11-26 12:57:02.000000000 +0000 @@ -3777,6 +3777,16 @@ mips_rtx_costs (rtx x, int code, int out return false; case ZERO_EXTEND: + if (outer_code == SET + && ISA_HAS_BADDU + && (GET_CODE (XEXP (x, 0)) == TRUNCATE + || GET_CODE (XEXP (x, 0)) == SUBREG) + && GET_MODE (XEXP (x, 0)) == QImode + && GET_CODE (XEXP (XEXP (x, 0), 0)) == PLUS) + { + *total = set_src_cost (XEXP (XEXP (x, 0), 0), speed); + return true; + } *total = mips_zero_extend_cost (mode, XEXP (x, 0)); return false;