From 1707bafaa50737e92d6d374b69a4de4d02ab4476 Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Tue, 23 Mar 2004 09:33:30 +0000 Subject: [PATCH] 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 --- gcc/ChangeLog | 7 +++++++ gcc/gcse.c | 22 ++++++++++++++++------ 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 357407ddb1d..d0c063c8e22 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2004-03-23 Richard Sandiford + + * 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. + 2004-03-22 Diego Novillo * c-typeck.c (same_translation_unit_p): Fix pasto. diff --git a/gcc/gcse.c b/gcc/gcse.c index eb37e18244b..88f94f6802e 100644 --- a/gcc/gcse.c +++ b/gcc/gcse.c @@ -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; -- 2.30.2