diff options
author | Richard Sandiford <rsandifo@redhat.com> | 2004-03-23 09:33:30 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2004-03-23 09:33:30 +0000 |
commit | 1707bafaa50737e92d6d374b69a4de4d02ab4476 (patch) | |
tree | fb7805eaa3dd4f5f9578071423db5c11ddeef1e1 /gcc/gcse.c | |
parent | 63185fabbac3d69f62a463c5d1dc18c9a92c9cac (diff) | |
download | gcc-1707bafaa50737e92d6d374b69a4de4d02ab4476.zip gcc-1707bafaa50737e92d6d374b69a4de4d02ab4476.tar.gz gcc-1707bafaa50737e92d6d374b69a4de4d02ab4476.tar.bz2 |
gcse.c (can_assign_to_reg_p): New function, split out from...
* gcse.c (can_assign_to_reg_p): New function, split out from...
(want_to_gcse_p): ...here.
(compute_ld_motion_mems): Use can_assign_to_reg_p to validate
the rhs of a store.
From-SVN: r79856
Diffstat (limited to 'gcc/gcse.c')
-rw-r--r-- | gcc/gcse.c | 22 |
1 files changed, 16 insertions, 6 deletions
@@ -568,6 +568,7 @@ static void hash_scan_set (rtx, rtx, struct hash_table *); static void hash_scan_clobber (rtx, rtx, struct hash_table *); static void hash_scan_call (rtx, rtx, struct hash_table *); static int want_to_gcse_p (rtx); +static bool can_assign_to_reg_p (rtx); static bool gcse_constant_p (rtx); static int oprs_unchanged_p (rtx, rtx, int); static int oprs_anticipatable_p (rtx, rtx); @@ -1269,13 +1270,9 @@ static basic_block current_bb; /* See whether X, the source of a set, is something we want to consider for GCSE. */ -static GTY(()) rtx test_insn; static int want_to_gcse_p (rtx x) { - int num_clobbers = 0; - int icode; - switch (GET_CODE (x)) { case REG: @@ -1288,8 +1285,21 @@ want_to_gcse_p (rtx x) return 0; default: - break; + return can_assign_to_reg_p (x); } +} + +/* Used internally by can_assign_to_reg_p. */ + +static GTY(()) rtx test_insn; + +/* Return true if we can assign X to a pseudo register. */ + +static bool +can_assign_to_reg_p (rtx x) +{ + int num_clobbers = 0; + int icode; /* If this is a valid operand, we are OK. If it's VOIDmode, we aren't. */ if (general_operand (x, GET_MODE (x))) @@ -6838,7 +6848,7 @@ compute_ld_motion_mems (void) && GET_CODE (src) != ASM_OPERANDS /* Check for REG manually since want_to_gcse_p returns 0 for all REGs. */ - && (REG_P (src) || want_to_gcse_p (src))) + && can_assign_to_reg_p (src)) ptr->stores = alloc_INSN_LIST (insn, ptr->stores); else ptr->invalid = 1; |