On 21/07/11 17:30, zhr...@ispras.ru wrote: > This patch eliminates fake doloop_end pattern for ARM platform. The problem > with such a pattern is that it slows down the loop when SMS doesn't create > good > schedule. So, i suppose fake pattern is no longer needed with new loop forms > supported. > > 2011-07-20 Roman Zhuykov <zhr...@ispras.ru> > * config/arm/thumb2.md (doloop_end): Delete.
I have no objections to this patch, but committing it needs to be co-ordinated with the other SMS changes that are being discussed. Deleting it today will, I think, cause SMS to be disabled and I don't want that to happen. R. > --- > gcc/config/arm/thumb2.md | 51 > ---------------------------------------------- > 1 files changed, 0 insertions(+), 51 deletions(-) > > diff --git a/gcc/config/arm/thumb2.md b/gcc/config/arm/thumb2.md > index 9a11012..492e765 100644 > --- a/gcc/config/arm/thumb2.md > +++ b/gcc/config/arm/thumb2.md > @@ -1101,54 +1101,3 @@ > operands[2] = GEN_INT (32 - INTVAL (operands[2])); > ") > > -;; Define the subtract-one-and-jump insns so loop.c > -;; knows what to generate. > -(define_expand "doloop_end" > - [(use (match_operand 0 "" "")) ; loop pseudo > - (use (match_operand 1 "" "")) ; iterations; zero if unknown > - (use (match_operand 2 "" "")) ; max iterations > - (use (match_operand 3 "" "")) ; loop level > - (use (match_operand 4 "" ""))] ; label > - "TARGET_32BIT" > - " > - { > - /* Currently SMS relies on the do-loop pattern to recognize loops > - where (1) the control part consists of all insns defining and/or > - using a certain 'count' register and (2) the loop count can be > - adjusted by modifying this register prior to the loop. > - ??? The possible introduction of a new block to initialize the > - new IV can potentially affect branch optimizations. */ > - if (optimize > 0 && flag_modulo_sched) > - { > - rtx s0; > - rtx bcomp; > - rtx loc_ref; > - rtx cc_reg; > - rtx insn; > - rtx cmp; > - > - /* Only use this on innermost loops. */ > - if (INTVAL (operands[3]) > 1) > - FAIL; > - > - if (GET_MODE (operands[0]) != SImode) > - FAIL; > - > - s0 = operands [0]; > - if (TARGET_THUMB2) > - insn = emit_insn (gen_thumb2_addsi3_compare0 (s0, s0, GEN_INT (-1))); > - else > - insn = emit_insn (gen_addsi3_compare0 (s0, s0, GEN_INT (-1))); > - > - cmp = XVECEXP (PATTERN (insn), 0, 0); > - cc_reg = SET_DEST (cmp); > - bcomp = gen_rtx_NE (VOIDmode, cc_reg, const0_rtx); > - loc_ref = gen_rtx_LABEL_REF (VOIDmode, operands [4]); > - emit_jump_insn (gen_rtx_SET (VOIDmode, pc_rtx, > - gen_rtx_IF_THEN_ELSE (VOIDmode, bcomp, > - loc_ref, pc_rtx))); > - DONE; > - }else > - FAIL; > - }") > -