diff options
author | Richard Kenner <kenner@gcc.gnu.org> | 1997-05-17 16:00:55 -0400 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 1997-05-17 16:00:55 -0400 |
commit | 954a5693c0d9adf74cb0954c3006ce54d43f7661 (patch) | |
tree | d2c0272f19ba6b8489396e70821d0380cb6336ce | |
parent | 50196afaca12b3d80a75fd1d5c4c7fca44e6ba75 (diff) | |
download | gcc-954a5693c0d9adf74cb0954c3006ce54d43f7661.zip gcc-954a5693c0d9adf74cb0954c3006ce54d43f7661.tar.gz gcc-954a5693c0d9adf74cb0954c3006ce54d43f7661.tar.bz2 |
(notreg_cost): New function, extracted from COST macro.
(COST): Use notreg_cost.
From-SVN: r14075
-rw-r--r-- | gcc/cse.c | 37 |
1 files changed, 24 insertions, 13 deletions
@@ -483,19 +483,7 @@ struct table_elt ? (CHEAP_REG (X) ? 0 \ : REGNO (X) >= FIRST_PSEUDO_REGISTER ? 1 \ : 2) \ - : ((GET_CODE (X) == SUBREG \ - && GET_CODE (SUBREG_REG (X)) == REG \ - && GET_MODE_CLASS (GET_MODE (X)) == MODE_INT \ - && GET_MODE_CLASS (GET_MODE (SUBREG_REG (X))) == MODE_INT \ - && (GET_MODE_SIZE (GET_MODE (X)) \ - < GET_MODE_SIZE (GET_MODE (SUBREG_REG (X)))) \ - && subreg_lowpart_p (X) \ - && TRULY_NOOP_TRUNCATION (GET_MODE_BITSIZE (GET_MODE (X)), \ - GET_MODE_BITSIZE (GET_MODE (SUBREG_REG (X))))) \ - ? (CHEAP_REG (SUBREG_REG (X)) ? 0 \ - : REGNO (SUBREG_REG (X)) >= FIRST_PSEUDO_REGISTER ? 1 \ - : 2) \ - : rtx_cost (X, SET) * 2)) + : notreg_cost(X)) /* Determine if the quantity number for register X represents a valid index into the `qty_...' variables. */ @@ -620,6 +608,7 @@ struct cse_basic_block_data { || XEXP (X, 0) == virtual_stack_dynamic_rtx \ || XEXP (X, 0) == virtual_outgoing_args_rtx))) +static int notreg_cost PROTO((rtx)); static void new_basic_block PROTO((void)); static void make_new_qty PROTO((int)); static void make_regs_eqv PROTO((int, int)); @@ -685,6 +674,28 @@ extern int rtx_equal_function_value_matters; Another is in rtl generation, to pick the cheapest way to multiply. Other uses like the latter are expected in the future. */ +/* Internal function, to compute cost when X is not a register; called + from COST macro to keep it simple. */ + +static int +notreg_cost (x) + rtx x; +{ + return ((GET_CODE (x) == SUBREG + && GET_CODE (SUBREG_REG (x)) == REG + && GET_MODE_CLASS (GET_MODE (x)) == MODE_INT + && GET_MODE_CLASS (GET_MODE (SUBREG_REG (x))) == MODE_INT + && (GET_MODE_SIZE (GET_MODE (x)) + < GET_MODE_SIZE (GET_MODE (SUBREG_REG (x)))) + && subreg_lowpart_p (x) + && TRULY_NOOP_TRUNCATION (GET_MODE_BITSIZE (GET_MODE (x)), + GET_MODE_BITSIZE (GET_MODE (SUBREG_REG (x))))) + ? (CHEAP_REG (SUBREG_REG (x)) ? 0 + : (REGNO (SUBREG_REG (x)) >= FIRST_PSEUDO_REGISTER ? 1 + : 2)) + : rtx_cost (x, SET) * 2); +} + /* Return the right cost to give to an operation to make the cost of the corresponding register-to-register instruction N times that of a fast register-to-register instruction. */ |