This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Update expanders to use optimize_insn_for_size predicate.


On Sat, Aug 2, 2008 at 9:15 PM, Jan Hubicka <jh@suse.cz> wrote:
> Hi,
> this patch replace some of optimize_size tests by
> optimize_insn_for_speed_p predicate so we can make decisions on per-BB
> granuality.

Ok.

Btw - can we revert the inlining changes caused by the function-specific
changes?  I think Meissner is waiting for your feedback.

Thanks,
Richard.

> Honza
>
>        * optabs.c (expand_binop, expand_builtin_pow, expand_builtin_powi,
>        expand_builtin_strcat): Upse optimize_insn_for_speed predicate.
>        * expmed.c (expand_smod_pow2): Likewise.
> Index: optabs.c
> ===================================================================
> *** optabs.c    (revision 138551)
> --- optabs.c    (working copy)
> *************** expand_binop (enum machine_mode mode, op
> *** 1786,1792 ****
>    if ((binoptab == lshr_optab || binoptab == ashl_optab
>         || binoptab == ashr_optab)
>        && mclass == MODE_INT
> !       && (GET_CODE (op1) == CONST_INT || !optimize_size)
>        && GET_MODE_SIZE (mode) == 2 * UNITS_PER_WORD
>        && optab_handler (binoptab, word_mode)->insn_code != CODE_FOR_nothing
>        && optab_handler (ashl_optab, word_mode)->insn_code != CODE_FOR_nothing
> --- 1786,1792 ----
>    if ((binoptab == lshr_optab || binoptab == ashl_optab
>         || binoptab == ashr_optab)
>        && mclass == MODE_INT
> !       && (GET_CODE (op1) == CONST_INT || optimize_insn_for_speed_p ())
>        && GET_MODE_SIZE (mode) == 2 * UNITS_PER_WORD
>        && optab_handler (binoptab, word_mode)->insn_code != CODE_FOR_nothing
>        && optab_handler (ashl_optab, word_mode)->insn_code != CODE_FOR_nothing
> Index: builtins.c
> ===================================================================
> *** builtins.c  (revision 138551)
> --- builtins.c  (working copy)
> *************** expand_builtin_pow (tree exp, rtx target
> *** 2911,2917 ****
>    if (real_identical (&c, &cint)
>        && ((n >= -1 && n <= 2)
>          || (flag_unsafe_math_optimizations
> !             && !optimize_size
>              && powi_cost (n) <= POWI_MAX_MULTS)))
>      {
>        op = expand_expr (arg0, subtarget, VOIDmode, EXPAND_NORMAL);
> --- 2911,2917 ----
>    if (real_identical (&c, &cint)
>        && ((n >= -1 && n <= 2)
>          || (flag_unsafe_math_optimizations
> !             && optimize_insn_for_speed_p ()
>              && powi_cost (n) <= POWI_MAX_MULTS)))
>      {
>        op = expand_expr (arg0, subtarget, VOIDmode, EXPAND_NORMAL);
> *************** expand_builtin_pow (tree exp, rtx target
> *** 2935,2941 ****
>        real_from_integer (&cint, VOIDmode, n, n < 0 ? -1 : 0, 0);
>        if (real_identical (&c2, &cint)
>          && ((flag_unsafe_math_optimizations
> !              && !optimize_size
>               && powi_cost (n/2) <= POWI_MAX_MULTS)
>              || n == 1))
>        {
> --- 2935,2941 ----
>        real_from_integer (&cint, VOIDmode, n, n < 0 ? -1 : 0, 0);
>        if (real_identical (&c2, &cint)
>          && ((flag_unsafe_math_optimizations
> !              && optimize_insn_for_speed_p ()
>               && powi_cost (n/2) <= POWI_MAX_MULTS)
>              || n == 1))
>        {
> *************** expand_builtin_pow (tree exp, rtx target
> *** 2980,2986 ****
>        real_arithmetic (&c2, RDIV_EXPR, &cint, &dconst3);
>        real_convert (&c2, mode, &c2);
>        if (real_identical (&c2, &c)
> !         && ((!optimize_size
>               && powi_cost (n/3) <= POWI_MAX_MULTS)
>              || n == 1))
>        {
> --- 2980,2986 ----
>        real_arithmetic (&c2, RDIV_EXPR, &cint, &dconst3);
>        real_convert (&c2, mode, &c2);
>        if (real_identical (&c2, &c)
> !         && ((optimize_insn_for_speed_p ()
>               && powi_cost (n/3) <= POWI_MAX_MULTS)
>              || n == 1))
>        {
> *************** expand_builtin_powi (tree exp, rtx targe
> *** 3042,3048 ****
>        if ((TREE_INT_CST_HIGH (arg1) == 0
>           || TREE_INT_CST_HIGH (arg1) == -1)
>          && ((n >= -1 && n <= 2)
> !             || (! optimize_size
>                  && powi_cost (n) <= POWI_MAX_MULTS)))
>        {
>          op0 = expand_expr (arg0, subtarget, VOIDmode, EXPAND_NORMAL);
> --- 3042,3048 ----
>        if ((TREE_INT_CST_HIGH (arg1) == 0
>           || TREE_INT_CST_HIGH (arg1) == -1)
>          && ((n >= -1 && n <= 2)
> !             || (optimize_insn_for_speed_p ()
>                  && powi_cost (n) <= POWI_MAX_MULTS)))
>        {
>          op0 = expand_expr (arg0, subtarget, VOIDmode, EXPAND_NORMAL);
> *************** expand_builtin_strcat (tree fndecl, tree
> *** 4464,4470 ****
>        if (p && *p == '\0')
>        return expand_expr (dst, target, mode, EXPAND_NORMAL);
>
> !       if (!optimize_size)
>        {
>          /* See if we can store by pieces into (dst + strlen(dst)).  */
>          tree newsrc, newdst,
> --- 4464,4470 ----
>        if (p && *p == '\0')
>        return expand_expr (dst, target, mode, EXPAND_NORMAL);
>
> !       if (optimize_insn_for_speed_p ())
>        {
>          /* See if we can store by pieces into (dst + strlen(dst)).  */
>          tree newsrc, newdst,
> Index: expmed.c
> ===================================================================
> *** expmed.c    (revision 138551)
> --- expmed.c    (working copy)
> *************** expand_smod_pow2 (enum machine_mode mode
> *** 3487,3493 ****
>
>    /* Avoid conditional branches when they're expensive.  */
>    if (BRANCH_COST >= 2
> !       && !optimize_size)
>      {
>        rtx signmask = emit_store_flag (result, LT, op0, const0_rtx,
>                                      mode, 0, -1);
> --- 3487,3493 ----
>
>    /* Avoid conditional branches when they're expensive.  */
>    if (BRANCH_COST >= 2
> !       && optimize_insn_for_speed_p ())
>      {
>        rtx signmask = emit_store_flag (result, LT, op0, const0_rtx,
>                                      mode, 0, -1);
>


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]