From d5861a7ae04bbac479f33f6d0b6114847810255a Mon Sep 17 00:00:00 2001 From: David Edelsohn Date: Thu, 5 Aug 2004 13:05:48 -0400 Subject: [PATCH] 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 --- gcc/ChangeLog | 8 +++++++- gcc/config/rs6000/rs6000.c | 25 ++++++++++++++++++++----- 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 32ef013b52f..1794b807633 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2004-08-05 David Edelsohn + + * 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 * config/linux.h, config/i386/linux.h, config/sparc/linux.h: @@ -286,7 +292,7 @@ * config/i386/xmmintrin.h: Include . 2004-08-03 H.J. Lu - Tanguy Fautrà + Tanguy Fautrà * config/i386/pmm_malloc.h: New file. diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 035c02599c7..338ed825031 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: -- 2.30.2