diff options
author | Uros Bizjak <ubizjak@gmail.com> | 2016-05-20 19:44:29 +0200 |
---|---|---|
committer | Uros Bizjak <uros@gcc.gnu.org> | 2016-05-20 19:44:29 +0200 |
commit | 78520f3ff1f922bb86bdaa6188b3168e68fbb908 (patch) | |
tree | 8f8b0fa6d1c57ec6ed834885289dd16b47f8e6c2 | |
parent | 7dea4ab37d04bef8ba6d59154e8d9c6f6dcdc183 (diff) | |
download | gcc-78520f3ff1f922bb86bdaa6188b3168e68fbb908.zip gcc-78520f3ff1f922bb86bdaa6188b3168e68fbb908.tar.gz gcc-78520f3ff1f922bb86bdaa6188b3168e68fbb908.tar.bz2 |
i386.c (ix86_rtx_costs): Use IS_STACK_MODE when calculating cost of standard 80387 constants.
* gcc/config/i386/i386.c (ix86_rtx_costs) <case CONST_DOUBLE>:
Use IS_STACK_MODE when calculating cost of standard 80387 constants.
Fallthru to CONST_VECTOR case to calculate cost of standard SSE
constants.
<case CONST_WIDE_INT>: Calculate cost of (MEM (SYMBOL_REF)).
(ix86_legitimate_constant_p): Use CASE_CONST_SCALAR_INT
and CASE_CONST_ANY.
From-SVN: r236524
-rw-r--r-- | gcc/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/config/i386/i386.c | 69 |
2 files changed, 43 insertions, 36 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 69d61ee..07dceaa 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2016-05-20 Uros Bizjak <ubizjak@gmail.com> + + * gcc/config/i386/i386.c (ix86_rtx_costs) <case CONST_DOUBLE>: + Use IS_STACK_MODE when calculating cost of standard 80387 constants. + Fallthru to CONST_VECTOR case to calculate cost of standard SSE + constants. + <case CONST_WIDE_INT>: Calculate cost of (MEM (SYMBOL_REF)). + (ix86_legitimate_constant_p): Use CASE_CONST_SCALAR_INT + and CASE_CONST_ANY. + 2016-05-20 Cesar Philippidis <cesar@codesourcery.com> * config/nvptx/nvptx.md (sincossf3): New pattern. diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index af434ec..5448316 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -14867,8 +14867,7 @@ ix86_legitimate_constant_p (machine_mode mode, rtx x) #endif break; - case CONST_INT: - case CONST_WIDE_INT: + CASE_CONST_SCALAR_INT: switch (mode) { case TImode: @@ -14903,18 +14902,16 @@ ix86_legitimate_constant_p (machine_mode mode, rtx x) static bool ix86_cannot_force_const_mem (machine_mode mode, rtx x) { - /* We can always put integral constants and vectors in memory. */ + /* We can put any immediate constant in memory. */ switch (GET_CODE (x)) { - case CONST_INT: - case CONST_WIDE_INT: - case CONST_DOUBLE: - case CONST_VECTOR: + CASE_CONST_ANY: return false; default: break; } + return !ix86_legitimate_constant_p (mode, x); } @@ -44076,43 +44073,43 @@ ix86_rtx_costs (rtx x, machine_mode mode, int outer_code_i, int opno, *total = 0; return true; - case CONST_WIDE_INT: - *total = 0; - return true; - case CONST_DOUBLE: - switch (standard_80387_constant_p (x)) + if (TARGET_80387 && IS_STACK_MODE (mode)) + switch (standard_80387_constant_p (x)) + { + case -1: + case 0: + break; + case 1: /* 0.0 */ + *total = 1; + return true; + default: /* Other constants */ + *total = 2; + return true; + } + /* FALLTHRU */ + + case CONST_VECTOR: + switch (standard_sse_constant_p (x, mode)) { - case 1: /* 0.0 */ - *total = 1; - return true; - default: /* Other constants */ - *total = 2; - return true; case 0: - case -1: break; + case 1: /* 0: xor eliminates false dependency */ + *total = 0; + return true; + default: /* -1: cmp contains false dependency */ + *total = 1; + return true; } - if (SSE_FLOAT_MODE_P (mode)) - { - case CONST_VECTOR: - switch (standard_sse_constant_p (x, mode)) - { - case 0: - break; - case 1: /* 0: xor eliminates false dependency */ - *total = 0; - return true; - default: /* -1: cmp contains false dependency */ - *total = 1; - return true; - } - } + /* FALLTHRU */ + + case CONST_WIDE_INT: /* 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) - + (mode == SFmode ? 0 : mode == DFmode ? 1 : 2)); + + (!TARGET_64BIT && flag_pic) + + (GET_MODE_SIZE (mode) <= 4 + ? 0 : GET_MODE_SIZE (mode) <= 8 ? 1 : 2)); return true; case ZERO_EXTEND: |