diff options
author | Richard Kenner <kenner@gcc.gnu.org> | 1993-03-11 19:10:28 -0500 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 1993-03-11 19:10:28 -0500 |
commit | b49e978eeb127b2df5125bfe80b841c464eef8fd (patch) | |
tree | 0866a19f91c89aaaf72fe53b5ce114e478fa4055 | |
parent | e14fa9c45a5fd9b4be62dedd78daa5559f4c83fc (diff) | |
download | gcc-b49e978eeb127b2df5125bfe80b841c464eef8fd.zip gcc-b49e978eeb127b2df5125bfe80b841c464eef8fd.tar.gz gcc-b49e978eeb127b2df5125bfe80b841c464eef8fd.tar.bz2 |
(RTX_COST, case MULT): Handle s8addx and s4addx.
(RTX_COST, case MULT): Correctly assign cost to multiplies by a power of two.
(RTX_COST, case ASHIFT, ASHIFTRT, LSHIFTRT, IF_THEN_ELSE): New cases.
From-SVN: r3710
-rw-r--r-- | gcc/config/alpha/alpha.h | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/gcc/config/alpha/alpha.h b/gcc/config/alpha/alpha.h index 23adda2..67123e8 100644 --- a/gcc/config/alpha/alpha.h +++ b/gcc/config/alpha/alpha.h @@ -1290,12 +1290,26 @@ extern char *current_function_name; case MINUS: \ if (GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT) \ return COSTS_N_INSNS (6); \ + else if (GET_CODE (XEXP (X, 0)) == MULT \ + && const48_operand (XEXP (XEXP (X, 0), 1), VOIDmode)) \ + return 2 + rtx_cost (XEXP (XEXP (X, 0), 0)) + rtx_cost (XEXP (X, 1)); \ break; \ case MULT: \ if (GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT) \ return COSTS_N_INSNS (6); \ - else \ + else if (GET_CODE (XEXP (X, 1)) != CONST_INT \ + || exact_log2 (INTVAL (XEXP (X, 1))) < 0) \ return COSTS_N_INSNS (21); \ + else if (const48_operand (XEXP (X, 1), VOIDmode)) \ + break; \ + return COSTS_N_INSNS (2); \ + case ASHIFT: \ + if (GET_CODE (XEXP (X, 1)) == CONST_INT \ + && INTVAL (XEXP (X, 1)) <= 3) \ + break; \ + /* ... fall through ... */ \ + case ASHIFTRT: case LSHIFTRT: case IF_THEN_ELSE: \ + return COSTS_N_INSNS (2); \ case DIV: \ case UDIV: \ case MOD: \ |