Commit a247af83 by Richard Henderson Committed by Richard Henderson

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
parent 87b78516
2012-06-26 Richard Henderson <rth@redhat.com> 2012-06-26 Richard Henderson <rth@redhat.com>
* 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 <rth@redhat.com>
* config/i386/i386.c (bdesc_args): Update. Change * config/i386/i386.c (bdesc_args): Update. Change
IX86_BUILTIN_VEC_WIDEN_SMUL_ODD_V4SI to OPTION_MASK_ISA_SSE2. IX86_BUILTIN_VEC_WIDEN_SMUL_ODD_V4SI to OPTION_MASK_ISA_SSE2.
(IX86_BUILTIN_VEC_WIDEN_SMUL_EVEN_V4SI): New. (IX86_BUILTIN_VEC_WIDEN_SMUL_EVEN_V4SI): New.
......
...@@ -32102,24 +32102,38 @@ ix86_rtx_costs (rtx x, int code_i, int outer_code_i, int opno, int *total, ...@@ -32102,24 +32102,38 @@ ix86_rtx_costs (rtx x, int code_i, int outer_code_i, int opno, int *total,
case CONST_DOUBLE: case CONST_DOUBLE:
if (mode == VOIDmode) if (mode == VOIDmode)
*total = 0; {
else *total = 0;
switch (standard_80387_constant_p (x)) return true;
{ }
case 1: /* 0.0 */ switch (standard_80387_constant_p (x))
*total = 1; {
break; case 1: /* 0.0 */
default: /* Other constants */ *total = 1;
*total = 2; return true;
break; default: /* Other constants */
case 0: *total = 2;
case -1: return true;
break; case 0:
} case -1:
/* FALLTHRU */ break;
}
if (SSE_FLOAT_MODE_P (mode))
{
case CONST_VECTOR: 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. */ it'll probably end up. Add a penalty for size. */
*total = (COSTS_N_INSNS (1) *total = (COSTS_N_INSNS (1)
+ (flag_pic != 0 && !TARGET_64BIT) + (flag_pic != 0 && !TARGET_64BIT)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment