From: Steve Ellcey Date: Tue, 22 Oct 2013 18:24:43 +0000 (+0000) Subject: mips.c (mips_rtx_costs): Fix cost estimate for nor (AND (NOT OP1) (NOT OP2)). X-Git-Tag: releases/gcc-4.9.0~3300 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ade97eb169cc5dd93cd617f4b13d6de21873756b;p=thirdparty%2Fgcc.git mips.c (mips_rtx_costs): Fix cost estimate for nor (AND (NOT OP1) (NOT OP2)). 2013-10-22 Steve Ellcey * config/mips/mips.c (mips_rtx_costs): Fix cost estimate for nor (AND (NOT OP1) (NOT OP2)). From-SVN: r203932 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c1d3ba81e39b..71fdd7d4b10a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2013-10-22 Steve Ellcey + + * config/mips/mips.c (mips_rtx_costs): Fix cost estimate for nor + (AND (NOT OP1) (NOT OP2)). + 2013-10-22 Bill Schmidt * config/rs6000/rs6000.c (altivec_expand_vec_perm_const): Reverse diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c index 5993aabe5781..60e5e788f902 100644 --- a/gcc/config/mips/mips.c +++ b/gcc/config/mips/mips.c @@ -3796,6 +3796,18 @@ mips_rtx_costs (rtx x, int code, int outer_code, int opno ATTRIBUTE_UNUSED, return true; } } + /* (AND (NOT op0) (NOT op1) is a nor operation that can be done in + a single instruction. */ + if (!TARGET_MIPS16 + && GET_CODE (XEXP (x, 0)) == NOT + && GET_CODE (XEXP (x, 1)) == NOT) + { + cost = GET_MODE_SIZE (mode) > UNITS_PER_WORD ? 2 : 1; + *total = (COSTS_N_INSNS (cost) + + set_src_cost (XEXP (XEXP (x, 0), 0), speed) + + set_src_cost (XEXP (XEXP (x, 1), 0), speed)); + return true; + } /* Fall through. */