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 <[EMAIL PROTECTED]> 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)))
> >

Reply via email to