Hello,

> We did just this change

> (on top of SMS patches we intend to send in the next
> couple of weeks) and it did helped a lot - we succeeded on all unrolled
> loops that could not be SMSed before. Do you think it is safe to remove this
> check? There was no regressions found in our testing. For note, we did our
> work on gcc 4.1 based branch.

what change?  Could you please send me the patch?  If you mean just
removing the check in doloop_condition_get, that is definitely wrong and
cannot change anything (at least on mainline, I am not sure about 4.1
branch -- but anyway, you cannot submit new changes for 4.1).

Zdenek

> Thanks,
> Vladimir
> 
> On 6/12/07, Zdenek Dvorak <[EMAIL PROTECTED]> wrote:
> >
> >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