diff options
author | David Edelsohn <dje@gcc.gnu.org> | 2004-08-05 13:05:48 -0400 |
---|---|---|
committer | David Edelsohn <dje@gcc.gnu.org> | 2004-08-05 13:05:48 -0400 |
commit | d5861a7ae04bbac479f33f6d0b6114847810255a (patch) | |
tree | 3f3235bad81654e7df13d846b5f0cef1cbba1920 | |
parent | 0a2b72a6ec53c08ec143fedd2811efe4d23dcc1c (diff) | |
download | gcc-d5861a7ae04bbac479f33f6d0b6114847810255a.zip gcc-d5861a7ae04bbac479f33f6d0b6114847810255a.tar.gz gcc-d5861a7ae04bbac479f33f6d0b6114847810255a.tar.bz2 |
rs6000.c (rs6000_rtx_costs): Fix mask_operand and mask64_operand thinkos.
* config/rs6000/rs6000.c (rs6000_rtx_costs): Fix mask_operand
and mask64_operand thinkos. Handle ZERO_EXTRACT. Handle
SIGN_EXTEND / ZERO_EXTEND of MEM. Handle rlwinm patterns.
From-SVN: r85604
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000.c | 25 |
2 files changed, 27 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 32ef013..1794b80 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2004-08-05 David Edelsohn <edelsohn@gnu.org> + + * config/rs6000/rs6000.c (rs6000_rtx_costs): Fix mask_operand + and mask64_operand thinkos. Handle ZERO_EXTRACT. Handle + SIGN_EXTEND / ZERO_EXTEND of MEM. Handle rlwinm patterns. + 2004-08-05 Joseph S. Myers <jsm@polyomino.org.uk> * config/linux.h, config/i386/linux.h, config/sparc/linux.h: @@ -286,7 +292,7 @@ * config/i386/xmmintrin.h: Include <mm_malloc.h>. 2004-08-03 H.J. Lu <hongjiu.lu@intel.com> - Tanguy Fautrà <tfautre@pandora.be> + Tanguy Fautrà <tfautre@pandora.be> * config/i386/pmm_malloc.h: New file. diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 035c025..338ed82 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -16533,12 +16533,13 @@ rs6000_rtx_costs (rtx x, int code, int outer_code ATTRIBUTE_UNUSED, || (outer_code == AND && (CONST_OK_FOR_LETTER_P (INTVAL (x), 'K') || CONST_OK_FOR_LETTER_P (INTVAL (x), 'L') - || CONST_OK_FOR_LETTER_P (INTVAL (x), 'T'))) + || mask_operand (x, VOIDmode))) || outer_code == ASHIFT || outer_code == ASHIFTRT || outer_code == LSHIFTRT || outer_code == ROTATE || outer_code == ROTATERT + || outer_code == ZERO_EXTRACT || (outer_code == MULT && CONST_OK_FOR_LETTER_P (INTVAL (x), 'I')) || (outer_code == COMPARE @@ -16568,7 +16569,7 @@ rs6000_rtx_costs (rtx x, int code, int outer_code ATTRIBUTE_UNUSED, && ((outer_code == AND && (CONST_OK_FOR_LETTER_P (INTVAL (x), 'K') || CONST_OK_FOR_LETTER_P (INTVAL (x), 'L') - || CONST_OK_FOR_LETTER_P (INTVAL (x), 'S'))) + || mask64_operand (x, DImode))) || ((outer_code == IOR || outer_code == XOR) && CONST_DOUBLE_HIGH (x) == 0 && (CONST_DOUBLE_LOW (x) @@ -16728,13 +16729,16 @@ rs6000_rtx_costs (rtx x, int code, int outer_code ATTRIBUTE_UNUSED, case AND: case IOR: case XOR: + case ZERO_EXTRACT: + *total = COSTS_N_INSNS (1); + return false; + case ASHIFT: case ASHIFTRT: case LSHIFTRT: case ROTATE: case ROTATERT: - case SIGN_EXTEND: - case ZERO_EXTEND: + /* Handle mul_highpart. */ if (outer_code == TRUNCATE && GET_CODE (XEXP (x, 0)) == MULT) { @@ -16744,7 +16748,18 @@ rs6000_rtx_costs (rtx x, int code, int outer_code ATTRIBUTE_UNUSED, *total = rs6000_cost->mulsi; return true; } - *total = COSTS_N_INSNS (1); + else if (outer_code == AND) + *total = 0; + else + *total = COSTS_N_INSNS (1); + return false; + + case SIGN_EXTEND: + case ZERO_EXTEND: + if (GET_CODE (XEXP (x, 0)) == MEM) + *total = 0; + else + *total = COSTS_N_INSNS (1); return false; case COMPARE: |