------- Comment #5 from ubizjak at gmail dot com 2009-01-07 17:56 ------- Following patch that changes addsi3 and subsi3 expander constraint fixes this problem:
--cut here-- Index: alpha.md =================================================================== --- alpha.md (revision 143157) +++ alpha.md (working copy) @@ -261,7 +261,7 @@ [(set (match_operand:SI 0 "register_operand" "") (plus:SI (match_operand:SI 1 "reg_or_0_operand" "") (match_operand:SI 2 "add_operand" "")))] - "! optimize" + "" "") (define_insn "*addsi_internal" @@ -622,7 +622,7 @@ [(set (match_operand:SI 0 "register_operand" "") (minus:SI (match_operand:SI 1 "reg_or_0_operand" "") (match_operand:SI 2 "reg_or_8bit_operand" "")))] - "! optimize" + "" "") (define_insn "*subsi_internal" --cut here-- With the patch (gcc -O2): f: s4addl $16,$17,$0 ret $31,($26),1 g: s4subl $16,$16,$0 ret $31,($26),1 This regression was introduced by: Sat Feb 23 08:42:47 2002 Richard Kenner <ken...@vlsi1.ultra.nyu.edu> * expr.c (store_expr): When converting expression to promoted equivalent type, allow using SUBREG_REG of TARGET as the target of the expansion of EXP. * loop.c (basic_induction_var, case SUBREG): Always look inside. * config/alpha/alpha.c (rtx_equiv_function_matters): Delete decl. (alpha_emit_set_const): Handle SImode when can't make new pseudos. (alpha_emit_set_const_1, alpha_sa_mask): Use no_new_pseudos. * config/alpha/alpha.md (addsi3, subsi3): Don't use if optimizing. And the comment above addsi3 says: ;; Don't say we have addsi3 if optimizing. This generates better code. We ;; have the anonymous addsi3 pattern below in case combine wants to make it. So, is this still true? Can somebody benchmark this patch? We can perhaps look at csibe numbers. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=8603