aboutsummaryrefslogtreecommitdiff
path: root/gcc/cse.c
diff options
context:
space:
mode:
authorRoger Sayle <roger@eyesopen.com>2003-10-11 03:49:54 +0000
committerRoger Sayle <sayle@gcc.gnu.org>2003-10-11 03:49:54 +0000
commitdd0ba2813d6150d6b4c8ddbf9f259c6efbba110f (patch)
tree21edeff789f11f21f721ad4c372bd423b1038dca /gcc/cse.c
parent796d7a8605529b8a88f0f3eebf6a3fc4316a1d4a (diff)
downloadgcc-dd0ba2813d6150d6b4c8ddbf9f259c6efbba110f.zip
gcc-dd0ba2813d6150d6b4c8ddbf9f259c6efbba110f.tar.gz
gcc-dd0ba2813d6150d6b4c8ddbf9f259c6efbba110f.tar.bz2
cse.c (constant_pool_entries_regcost): New global variable to hold the register cost component of...
* cse.c (constant_pool_entries_regcost): New global variable to hold the register cost component of constant_pool_entries_cost. (fold_rtx): Calculate constant_pool_entries_regcost at the same time as constant_pool_entries_cost. (cse_insn): Set both src_folded_cost and src_folded_regcost from constant_pool_entries_cost and constant_pool_entries_regcost. (cse_main): Initialize constant_pool_entries_regcost to zero. * optabs.c (expand_unop): Attach a REG_EQUAL note describing the semantics of the sequence of bit operations used to negate a floating-point value. (expand_abs_nojump): Likewise attach a REG_EQUAL note describing the semantics of the bit operations used to abs a floating point value. From-SVN: r72326
Diffstat (limited to 'gcc/cse.c')
-rw-r--r--gcc/cse.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/gcc/cse.c b/gcc/cse.c
index 8683f4a..7cdc72f 100644
--- a/gcc/cse.c
+++ b/gcc/cse.c
@@ -569,6 +569,7 @@ static struct table_elt *last_jump_equiv_class;
the insn. */
static int constant_pool_entries_cost;
+static int constant_pool_entries_regcost;
/* This data describes a block that will be processed by cse_basic_block. */
@@ -3529,7 +3530,10 @@ fold_rtx (rtx x, rtx insn)
rtx new;
if (CONSTANT_P (constant) && GET_CODE (constant) != CONST_INT)
- constant_pool_entries_cost = COST (constant);
+ {
+ constant_pool_entries_cost = COST (constant);
+ constant_pool_entries_regcost = approx_reg_cost (constant);
+ }
/* If we are loading the full constant, we have an equivalence. */
if (offset == 0 && mode == const_mode)
@@ -5507,6 +5511,7 @@ cse_insn (rtx insn, rtx libcall_insn)
src_folded_force_flag = 1;
src_folded = trial;
src_folded_cost = constant_pool_entries_cost;
+ src_folded_regcost = constant_pool_entries_regcost;
}
}
@@ -6939,6 +6944,7 @@ cse_main (rtx f, int nregs, int after_loop, FILE *file)
cse_jumps_altered = 0;
recorded_label_ref = 0;
constant_pool_entries_cost = 0;
+ constant_pool_entries_regcost = 0;
val.path_size = 0;
init_recog ();