From: Richard Henderson Date: Wed, 27 Jun 2012 03:20:08 +0000 (-0700) Subject: i386: Correct costs on CONST_DOUBLE and CONST_VECTOR X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=a247af8371ad9ad4e244cf664ed33ca7d945b768;p=gcc.git i386: Correct costs on CONST_DOUBLE and CONST_VECTOR We were always falling through to the memory default. Also use standard_sse_constant_p on CONST_VECTOR. * config/i386/i386.c (ix86_rtx_costs): Use standard_sse_constant_p and don't fall thru from standard_80387_constant_p to the memory fallback, From-SVN: r189007 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2eb52597665..1d98b79c720 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2012-06-26 Richard Henderson + + * config/i386/i386.c (ix86_rtx_costs): Use standard_sse_constant_p + and don't fall thru from standard_80387_constant_p to the memory + fallback, + 2012-06-26 Richard Henderson * config/i386/i386.c (bdesc_args): Update. Change diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index b96fc6e5371..edfc6498d73 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -32102,24 +32102,38 @@ ix86_rtx_costs (rtx x, int code_i, int outer_code_i, int opno, int *total, case CONST_DOUBLE: if (mode == VOIDmode) - *total = 0; - else - switch (standard_80387_constant_p (x)) - { - case 1: /* 0.0 */ - *total = 1; - break; - default: /* Other constants */ - *total = 2; - break; - case 0: - case -1: - break; - } - /* FALLTHRU */ - + { + *total = 0; + return true; + } + switch (standard_80387_constant_p (x)) + { + case 1: /* 0.0 */ + *total = 1; + return true; + default: /* Other constants */ + *total = 2; + return true; + case 0: + case -1: + break; + } + if (SSE_FLOAT_MODE_P (mode)) + { case CONST_VECTOR: - /* Start with (MEM (SYMBOL_REF)), since that's where + switch (standard_sse_constant_p (x)) + { + case 0: + break; + case 1: /* 0: xor eliminates false dependency */ + *total = 0; + return true; + default: /* -1: cmp contains false dependency */ + *total = 1; + return true; + } + } + /* Fall back to (MEM (SYMBOL_REF)), since that's where it'll probably end up. Add a penalty for size. */ *total = (COSTS_N_INSNS (1) + (flag_pic != 0 && !TARGET_64BIT)