diff options
author | David Edelsohn <edelsohn@gnu.org> | 2006-04-07 14:24:44 +0000 |
---|---|---|
committer | David Edelsohn <dje@gcc.gnu.org> | 2006-04-07 10:24:44 -0400 |
commit | f6fe3a224f950446f94f5746782ef2fe3b79d405 (patch) | |
tree | 3bd5f90341203b350db9151e9cd27c5edf2e7714 | |
parent | 28e6f134a1e8cfda974cf2f54999137fe7480b13 (diff) | |
download | gcc-f6fe3a224f950446f94f5746782ef2fe3b79d405.zip gcc-f6fe3a224f950446f94f5746782ef2fe3b79d405.tar.gz gcc-f6fe3a224f950446f94f5746782ef2fe3b79d405.tar.bz2 |
rs6000.c (rs6000_rtx_costs): Do not treat CONST_DOUBLE as INTVAL.
* config/rs6000/rs6000.c (rs6000_rtx_costs) <CONST_DOUBLE>: Do not
treat CONST_DOUBLE as INTVAL. and64_2_operands require an extra
insn.
From-SVN: r112752
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000.c | 39 |
2 files changed, 23 insertions, 21 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 98d7ce0..486c018 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2006-04-07 David Edelsohn <edelsohn@gnu.org> + + * config/rs6000/rs6000.c (rs6000_rtx_costs) <CONST_DOUBLE>: Do not + treat CONST_DOUBLE as INTVAL. and64_2_operands require an extra + insn. 2006-04-07 Jan Hubicka <jh@suse.cz> diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 085fa72..ec2cfde 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -18642,28 +18642,25 @@ rs6000_rtx_costs (rtx x, int code, int outer_code, int *total) /* FALLTHRU */ case CONST_DOUBLE: - if (mode == DImode - && ((outer_code == AND - && (satisfies_constraint_K (x) - || satisfies_constraint_L (x) - || mask_operand (x, DImode) - || mask64_operand (x, DImode))) - || ((outer_code == IOR || outer_code == XOR) - && CONST_DOUBLE_HIGH (x) == 0 - && (CONST_DOUBLE_LOW (x) - & ~ (unsigned HOST_WIDE_INT) 0xffff) == 0))) + if (mode == DImode && code == CONST_DOUBLE) { - *total = 0; - return true; - } - else if (mode == DImode - && (outer_code == SET - || outer_code == IOR - || outer_code == XOR) - && CONST_DOUBLE_HIGH (x) == 0) - { - *total = COSTS_N_INSNS (1); - return true; + if ((outer_code == IOR || outer_code == XOR) + && CONST_DOUBLE_HIGH (x) == 0 + && (CONST_DOUBLE_LOW (x) + & ~ (unsigned HOST_WIDE_INT) 0xffff) == 0) + { + *total = 0; + return true; + } + else if ((outer_code == AND && and64_2_operand (x, DImode)) + || ((outer_code == SET + || outer_code == IOR + || outer_code == XOR) + && CONST_DOUBLE_HIGH (x) == 0)) + { + *total = COSTS_N_INSNS (1); + return true; + } } /* FALLTHRU */ |