This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: Does unrolling prevents doloop optimizations?
Hello,
> To make sure I understood you correctly, does it mean that the change
> (below in /* */) in doloop_condition_get is safe?
>
> /* We expect a GE or NE comparison with 0 or 1. */
> if (/*(GET_CODE (condition) != GE
> && GET_CODE (condition) != NE)
> ||*/ (XEXP (condition, 1) != const0_rtx
> && XEXP (condition, 1) != const1_rtx))
> return 0;
no; that there is nothing wrong with doloop_condition_get --
changing it will not help, as it is not applied to the
exit condition of the loop at all. The problem must be somewhere
else.
Zdenek
> Thanks,
> Vladimir
>
>
> On 6/12/07, Zdenek Dvorak <rakdver@kam.mff.cuni.cz> wrote:
> >Hello,
> >
> >> In file loop_doloop.c function doloop_condition_get makes sure that
> >> the condition is GE or NE
> >> otherwise it prevents doloop optimizations. This caused a problem for
> >> a loop which had NE condition without unrolling and EQ if unrolling
> >> was run.
> >
> >actually, doloop_condition_get is not applied to the code of the
> >program, so this change is irrelevant (doloop_condition_get is applied
> >to the doloop pattern from the machine description). So there must be
> >some other reason why doloop transformation is not applied for your
> >loop.
> >
> >Zdenek
> >
> >> Can I make doloop work after the unroller?
> >>
> >> Thanks,
> >> Vladimir
> >>
> >>
> >----------------------------------------------------------------------------------------
> >> Without unrolling:
> >> (insn 135 80 136 4 (set (reg:SI 204 [ LastIndex ])
> >> (plus:SI (reg:SI 204 [ LastIndex ])
> >> (const_int -1 [0xffffffffffffffff]))) 51 {addsi3} (nil)
> >> (nil))
> >>
> >> (jump_insn 136 135 84 4 (set (pc)
> >> (if_then_else (ne:SI (reg:SI 204 [ LastIndex ])
> >> (const_int 0 [0x0]))
> >> (label_ref:SI 69)
> >> (pc))) 368 {*spu.md:3288} (insn_list:REG_DEP_TRUE 135 (nil))
> >> (expr_list:REG_BR_PROB (const_int 9000 [0x2328])
> >> (nil)))
> >>
> >>
> >> After unrolling:
> >> (insn 445 421 446 21 (set (reg:SI 213)
> >> (plus:SI (reg:SI 213)
> >> (const_int -1 [0xffffffffffffffff]))) 51 {addsi3} (nil)
> >> (nil))
> >>
> >> (jump_insn 446 445 667 21 (set (pc)
> >> (if_then_else (eq:SI (reg:SI 213)
> >> (const_int 0 [0x0]))
> >> (label_ref:SI 465)
> >> (pc))) 368 {*spu.md:3288} (insn_list:REG_DEP_TRUE 445 (nil))
> >> (expr_list:REG_BR_PROB (const_int 1000 [0x3e8])
> >> (nil)))
> >