I have a patch to upgrade most genrecog warnings into errors. This patch fixes one for bfin about {push,pop}_multiple_operation not being defined at the .md level.
Tested by building bfin-elf with the warnings turned to errors, and by comparing the before and after assembly output at -O2 for gcc.c-torture, gcc.dg and g++.dg. OK to install? Thanks, Richard gcc/ * config/bfin/bfin-protos.h (push_multiple_operation): Delete. (pop_multiple_operation): Delete. (push_multiple_operation_p, pop_multiple_operation_p): Declare. * config/bfin/bfin.c (push_multiple_operation): Rename to... (push_multiple_operation_p): ...this and remove mode argument. (pop_multiple_operation): Rename to... (pop_multiple_operation_p): ...this and remove mode argument. * config/bfin/predicates.md (push_multiple_operation): Define. (pop_multiple_operation): Likewise. Index: gcc/config/bfin/bfin-protos.h =================================================================== --- gcc/config/bfin/bfin-protos.h 2013-11-16 21:52:15.083787117 +0000 +++ gcc/config/bfin/bfin-protos.h 2013-11-16 21:58:55.616017138 +0000 @@ -105,8 +105,8 @@ extern rtx bfin_va_arg (tree, tree); extern void bfin_expand_prologue (void); extern void bfin_expand_epilogue (int, int, bool); -extern int push_multiple_operation (rtx, enum machine_mode); -extern int pop_multiple_operation (rtx, enum machine_mode); +extern int push_multiple_operation_p (rtx); +extern int pop_multiple_operation_p (rtx); extern void output_push_multiple (rtx, rtx *); extern void output_pop_multiple (rtx, rtx *); extern int bfin_hard_regno_rename_ok (unsigned int, unsigned int); Index: gcc/config/bfin/bfin.c =================================================================== --- gcc/config/bfin/bfin.c 2013-11-16 21:52:15.083787117 +0000 +++ gcc/config/bfin/bfin.c 2013-11-16 21:58:55.616017138 +0000 @@ -2990,7 +2990,7 @@ bfin_rtx_costs (rtx x, int code_i, int o static int n_regs_to_save; int -push_multiple_operation (rtx op, enum machine_mode mode ATTRIBUTE_UNUSED) +push_multiple_operation_p (rtx op) { int lastdreg = 8, lastpreg = 6; int i, group; @@ -3061,7 +3061,7 @@ push_multiple_operation (rtx op, enum ma } int -pop_multiple_operation (rtx op, enum machine_mode mode ATTRIBUTE_UNUSED) +pop_multiple_operation_p (rtx op) { int lastdreg = 8, lastpreg = 6; int i, group; @@ -3130,7 +3130,7 @@ output_push_multiple (rtx insn, rtx *ope int ok; /* Validate the insn again, and compute first_[dp]reg_to_save. */ - ok = push_multiple_operation (PATTERN (insn), VOIDmode); + ok = push_multiple_operation_p (PATTERN (insn)); gcc_assert (ok); if (first_dreg_to_save == 8) @@ -3154,7 +3154,7 @@ output_pop_multiple (rtx insn, rtx *oper int ok; /* Validate the insn again, and compute first_[dp]reg_to_save. */ - ok = pop_multiple_operation (PATTERN (insn), VOIDmode); + ok = pop_multiple_operation_p (PATTERN (insn)); gcc_assert (ok); if (first_dreg_to_save == 8) @@ -4134,8 +4134,8 @@ workaround_rts_anomaly (void) if (GET_CODE (pat) == PARALLEL) { - if (push_multiple_operation (pat, VOIDmode) - || pop_multiple_operation (pat, VOIDmode)) + if (push_multiple_operation_p (pat) + || pop_multiple_operation_p (pat)) this_cycles = n_regs_to_save; } else Index: gcc/config/bfin/predicates.md =================================================================== --- gcc/config/bfin/predicates.md 2013-11-16 21:52:15.083787117 +0000 +++ gcc/config/bfin/predicates.md 2013-11-16 21:58:55.617017146 +0000 @@ -239,3 +239,11 @@ (define_predicate "mem_i_address_operand gcc_assert (REG_P (op)); return IREG_P (op); }) + +(define_predicate "push_multiple_operation" + (and (match_code "parallel") + (match_test "push_multiple_operation_p (op)"))) + +(define_predicate "pop_multiple_operation" + (and (match_code "parallel") + (match_test "pop_multiple_operation_p (op)")))