aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Edelsohn <edelsohn@gnu.org>2006-04-07 14:24:44 +0000
committerDavid Edelsohn <dje@gcc.gnu.org>2006-04-07 10:24:44 -0400
commitf6fe3a224f950446f94f5746782ef2fe3b79d405 (patch)
tree3bd5f90341203b350db9151e9cd27c5edf2e7714
parent28e6f134a1e8cfda974cf2f54999137fe7480b13 (diff)
downloadgcc-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/ChangeLog5
-rw-r--r--gcc/config/rs6000/rs6000.c39
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 */