[m-rev.] for review: conditional structure reuse for LLDS backends

Zoltan Somogyi zs at csse.unimelb.edu.au
Mon Feb 11 15:31:56 AEDT 2008

On Wed, 30 Jan 2008, Peter Wang wrote:
>    /* flag_reg is non-zero iff reuse is possible */
>    if (flag_reg) {
> 	goto skip;
>    }
>    ...assign fields which don't need to be assigned in reuse case...
>  skip:
>    ...assign fields which must be assigned in both cases...
> It may be that it is not worth the branch to avoid assigning known fields.
> I haven't yet checked.

That code isn't right; there needs to be a goto after the first set of
assignments, otherwise you assign to many fields twice.

Whether avoiding assignments to known same fields is worthwhile depends
on how many of them there are compared to fields that need to be assigned.
If you have (say) ten fields, and you can avoid an assignment to one,
using the if-then-else will definitely lead to a slowdown, because

- the code will touch the same number of cache blocks anyway, and therefore
- even a small percentage of mispredicted branches will cost more than you
  can possibly save.

On the other hand, if you can avoid assignments to nine out ten fields,
the if-then-else may be worthwhile.

So if you want to test this, do it with a tunable parameter, e.g. one
that gives what percentage of field assignments you need to be able avoid
before resorting to the if-then-else.

mercury-reviews mailing list
Post messages to:       mercury-reviews at csse.unimelb.edu.au
Administrative Queries: owner-mercury-reviews at csse.unimelb.edu.au
Subscriptions:          mercury-reviews-request at csse.unimelb.edu.au

More information about the reviews mailing list