summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>2011-08-18 12:36:51 +0000
committerrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>2011-08-18 12:36:51 +0000
commitb72d459f396af780bd6506f992b421663c4bb676 (patch)
tree3787f76119cc3035cbfc30cc522d9e6e59efca62
parent1bc4fc63366accfa3926cb5f068fe07356d84ab7 (diff)
downloadgcc-b72d459f396af780bd6506f992b421663c4bb676.tar.gz
gcc/
* rtl.h (set_rtx_cost, get_full_set_rtx_cost): New functions. * auto-inc-dec.c (attempt_change): Use set_rtx_cost. * cfgloopanal.c (seq_cost): Likewise. * loop-invariant.c (create_new_invariant): Likewise. * postreload.c (move2add_use_add2_insn, move2add_use_add3_insn) (reload_cse_move2add): Use get_full_set_rtx_cost. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@177850 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/auto-inc-dec.c2
-rw-r--r--gcc/cfgloopanal.c2
-rw-r--r--gcc/loop-invariant.c2
-rw-r--r--gcc/postreload.c10
-rw-r--r--gcc/rtl.h18
6 files changed, 35 insertions, 8 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c9b49b67c0b..f3a95bb3b0b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,12 @@
+2011-08-18 Richard Sandiford <richard.sandiford@linaro.org>
+
+ * rtl.h (set_rtx_cost, get_full_set_rtx_cost): New functions.
+ * auto-inc-dec.c (attempt_change): Use set_rtx_cost.
+ * cfgloopanal.c (seq_cost): Likewise.
+ * loop-invariant.c (create_new_invariant): Likewise.
+ * postreload.c (move2add_use_add2_insn, move2add_use_add3_insn)
+ (reload_cse_move2add): Use get_full_set_rtx_cost.
+
2011-08-18 Richard Guenther <rguenther@suse.de>
* expr.c (get_inner_reference): Fix typo in last change.
diff --git a/gcc/auto-inc-dec.c b/gcc/auto-inc-dec.c
index dbd12e72f21..0444daecf9b 100644
--- a/gcc/auto-inc-dec.c
+++ b/gcc/auto-inc-dec.c
@@ -484,7 +484,7 @@ attempt_change (rtx new_addr, rtx inc_reg)
XEXP (mem_tmp, 0) = new_addr;
old_cost = (rtx_cost (mem, SET, speed)
- + rtx_cost (PATTERN (inc_insn.insn), SET, speed));
+ + set_rtx_cost (PATTERN (inc_insn.insn), speed));
new_cost = rtx_cost (mem_tmp, SET, speed);
/* The first item of business is to see if this is profitable. */
diff --git a/gcc/cfgloopanal.c b/gcc/cfgloopanal.c
index 02f02657699..652fc4d8b62 100644
--- a/gcc/cfgloopanal.c
+++ b/gcc/cfgloopanal.c
@@ -314,7 +314,7 @@ seq_cost (const_rtx seq, bool speed)
{
set = single_set (seq);
if (set)
- cost += rtx_cost (set, SET, speed);
+ cost += set_rtx_cost (set, speed);
else
cost++;
}
diff --git a/gcc/loop-invariant.c b/gcc/loop-invariant.c
index b9238a9554f..61ca446f079 100644
--- a/gcc/loop-invariant.c
+++ b/gcc/loop-invariant.c
@@ -704,7 +704,7 @@ create_new_invariant (struct def *def, rtx insn, bitmap depends_on,
the loop. Otherwise we save only cost of the computation. */
if (def)
{
- inv->cost = rtx_cost (set, SET, speed);
+ inv->cost = set_rtx_cost (set, speed);
/* ??? Try to determine cheapness of address computation. Unfortunately
the address cost is only a relative measure, we can't really compare
it with any absolute number, but only with other address costs.
diff --git a/gcc/postreload.c b/gcc/postreload.c
index 72e487e057f..88b401f511c 100644
--- a/gcc/postreload.c
+++ b/gcc/postreload.c
@@ -1683,9 +1683,9 @@ move2add_use_add2_insn (rtx reg, rtx sym, rtx off, rtx insn)
struct full_rtx_costs oldcst, newcst;
rtx tem = gen_rtx_PLUS (GET_MODE (reg), reg, new_src);
- get_full_rtx_cost (pat, SET, &oldcst);
+ get_full_set_rtx_cost (pat, &oldcst);
SET_SRC (pat) = tem;
- get_full_rtx_cost (pat, SET, &newcst);
+ get_full_set_rtx_cost (pat, &newcst);
SET_SRC (pat) = src;
if (costs_lt_p (&newcst, &oldcst, speed)
@@ -1752,7 +1752,7 @@ move2add_use_add3_insn (rtx reg, rtx sym, rtx off, rtx insn)
rtx plus_expr;
init_costs_to_max (&mincst);
- get_full_rtx_cost (pat, SET, &oldcst);
+ get_full_set_rtx_cost (pat, &oldcst);
plus_expr = gen_rtx_PLUS (GET_MODE (reg), reg, const0_rtx);
SET_SRC (pat) = plus_expr;
@@ -1781,7 +1781,7 @@ move2add_use_add3_insn (rtx reg, rtx sym, rtx off, rtx insn)
else
{
XEXP (plus_expr, 1) = new_src;
- get_full_rtx_cost (pat, SET, &newcst);
+ get_full_set_rtx_cost (pat, &newcst);
if (costs_lt_p (&newcst, &mincst, speed))
{
@@ -1934,7 +1934,7 @@ reload_cse_move2add (rtx first)
struct full_rtx_costs oldcst, newcst;
rtx tem = gen_rtx_PLUS (GET_MODE (reg), reg, new_src);
- get_full_rtx_cost (set, SET, &oldcst);
+ get_full_set_rtx_cost (set, &oldcst);
SET_SRC (set) = tem;
get_full_rtx_cost (tem, SET, &newcst);
SET_SRC (set) = old_src;
diff --git a/gcc/rtl.h b/gcc/rtl.h
index d5d7b023ec5..84166c47fc2 100644
--- a/gcc/rtl.h
+++ b/gcc/rtl.h
@@ -1217,6 +1217,24 @@ extern bool constant_pool_constant_p (rtx);
extern bool truncated_to_mode (enum machine_mode, const_rtx);
extern int low_bitmask_len (enum machine_mode, unsigned HOST_WIDE_INT);
+#ifndef GENERATOR_FILE
+/* Return the cost of SET X. SPEED_P is true if optimizing for speed
+ rather than size. */
+
+static inline int
+set_rtx_cost (rtx x, bool speed_p)
+{
+ return rtx_cost (x, INSN, speed_p);
+}
+
+/* Like set_rtx_cost, but return both the speed and size costs in C. */
+
+static inline void
+get_full_set_rtx_cost (rtx x, struct full_rtx_costs *c)
+{
+ get_full_rtx_cost (x, INSN, c);
+}
+#endif
/* 1 if RTX is a subreg containing a reg that is already known to be
sign- or zero-extended from the mode of the subreg to the mode of