From c271ba771118b065187992424ccb86091a4e55a9 Mon Sep 17 00:00:00 2001 From: Kazu Hirata Date: Tue, 12 Oct 2004 17:14:42 +0000 Subject: [PATCH] re PR rtl-optimization/17931 (andl and testb are not combined) PR rtl-optimization/17931 * config/i386/i386.c (ix86_rtx_costs): Handle COMPARE with ZERO_EXTRACT in it. From-SVN: r88943 --- gcc/ChangeLog | 6 ++++++ gcc/config/i386/i386.c | 15 +++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d91d2606467..6ac3aa1925a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2004-10-12 Kazu Hirata + + PR rtl-optimization/17931 + * config/i386/i386.c (ix86_rtx_costs): Handle COMPARE with + ZERO_EXTRACT in it. + 2004-10-12 Richard Earnshaw * arm.c (arm_print_operand): Use output_operand_lossage where possible diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 540d390d50c..ba515867ed7 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -14326,6 +14326,21 @@ ix86_rtx_costs (rtx x, int code, int outer_code, int *total) *total = COSTS_N_INSNS (ix86_cost->add); return false; + case COMPARE: + if (GET_CODE (XEXP (x, 0)) == ZERO_EXTRACT + && XEXP (XEXP (x, 0), 1) == const1_rtx + && GET_CODE (XEXP (XEXP (x, 0), 2)) == CONST_INT + && XEXP (x, 1) == const0_rtx) + { + /* This kind of construct is implemented using test[bwl]. + Treat it as if we had an AND. */ + *total = (COSTS_N_INSNS (ix86_cost->add) + + rtx_cost (XEXP (XEXP (x, 0), 0), outer_code) + + rtx_cost (const1_rtx, outer_code)); + return true; + } + return false; + case FLOAT_EXTEND: if (!TARGET_SSE_MATH || !VALID_SSE_REG_MODE (mode)) *total = 0; -- 2.30.2