[Mesa-dev] [PATCH 1/2] [RFC] i965/vec4: Reward spills in if/else/endif blocks

Ben Widawsky ben at bwidawsk.net
Fri Jun 19 20:04:05 PDT 2015


I'm not seeing where it does anything other than what I say. Beforehand the cost
is increased (*=) from DO->WHILE. Now it should be decreased (/= 10) from
IF->ENDIF. The factor of 10 probably needs to be modified since I suspect

Can you help me see what I'm not seeing?

On Fri, Jun 19, 2015 at 06:53:28PM -0700, Connor Abbott wrote:
> I don't think this is doing what you think it's doing. This code is
> for calculating the *cost* of spills, so a higher cost means a lower
> priority for choosing the register. We increase the cost for things
> inside loops because we don't want to spill inside loops, and by doing
> the same thing for if's you're actually discouraging spills inside an
> if block.
> 
> On Fri, Jun 19, 2015 at 5:21 PM, Ben Widawsky
> <benjamin.widawsky at intel.com> wrote:
> > If we have a register that needs spilling in an if/else block, there is a chance
> > that we may not need to spill if we do[n't] take the branch.
> >
> > The downside of this patch is the case where the register being spilled ends up
> > in both if/else blocks. For that case, preferring this path will increase code
> > size with no possible performance benefit.
> >
> > Same patch for FS coming up.
> >
> > Signed-off-by: Ben Widawsky <ben at bwidawsk.net>
> > ---
> >  src/mesa/drivers/dri/i965/brw_vec4_reg_allocate.cpp | 2 ++
> >  1 file changed, 2 insertions(+)
> >
> > diff --git a/src/mesa/drivers/dri/i965/brw_vec4_reg_allocate.cpp b/src/mesa/drivers/dri/i965/brw_vec4_reg_allocate.cpp
> > index b9db908..b345f27 100644
> > --- a/src/mesa/drivers/dri/i965/brw_vec4_reg_allocate.cpp
> > +++ b/src/mesa/drivers/dri/i965/brw_vec4_reg_allocate.cpp
> > @@ -309,10 +309,12 @@ vec4_visitor::evaluate_spill_costs(float *spill_costs, bool *no_spill)
> >
> >        switch (inst->opcode) {
> >
> > +      case BRW_OPCODE_ENDIF:
> >        case BRW_OPCODE_DO:
> >          loop_scale *= 10;
> >          break;
> >
> > +      case BRW_OPCODE_IF:
> >        case BRW_OPCODE_WHILE:
> >          loop_scale /= 10;
> >          break;
> > --
> > 2.4.4
> >
> > _______________________________________________
> > mesa-dev mailing list
> > mesa-dev at lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list