On Mon, Feb 23, 2015 at 10:02:26AM -0800, Matt Turner wrote: > On Sun, Feb 22, 2015 at 3:06 PM, Ben Widawsky <b...@bwidawsk.net> wrote: > > On Sun, Feb 08, 2015 at 02:48:02PM -0800, Matt Turner wrote: > >> On Sun, Feb 8, 2015 at 1:59 PM, Ben Widawsky > >> <benjamin.widaw...@intel.com> wrote: > >> > + /* The LOAD_PAYLOAD helper seems like the obvious choice here. > >> > However, it > >> > + * requires a lot of information about the sources to appropriately > >> > figure > >> > + * out the number of registers needed to be used. Given this stage > >> > in our > >> > + * optimization, we may not have the appropriate GRFs required by > >> > + * LOAD_PAYLOAD at this point (copy propogation). Therefore, we need > >> > to > >> > >> typo: propagation > >> > >> I'm not sure what "w e may not have the appropriate GRFs ..." means? > > > > Here is the relevant part of the original IRC conversation: > > jekstrand [08:52:30] No, the problem is uniforms and immediates. > > jekstrand [08:52:58] They can't go in a LOAD_PAYLOAD directly because > > we don't know how many destination registers they take up. > > jekstrand [08:54:16] for LOAD_PAYLOAD to work, we need more > > information than a regular instruction. We need to know how many > > destination registers a given source takes up, we need to know whether it > > needs to use the second-half quarter control for the MOV that gets > > generated, etc. > > jekstrand [08:54:34] Using GRF sources more-or-less gives us this. > > Immediates don't. > > bwidawks [08:54:55] right - this is what confuses me though... the > > immediates seem to already be there. > > jekstrand [08:55:38] Right. The immediates can get there through > > copy-propagation and that's fine. However, they're not there when it's > > created. > > jekstrand [08:55:43] It's all a mess > > > > Do you have a preferred way to state this concisely? > > Heh, I'm not sure I understand LOAD_PAYLOAD anymore. The comment's > probably fine as-is. > > >> > @@ -3609,6 +3709,7 @@ fs_visitor::optimize() > >> > OPT(opt_peephole_predicated_break); > >> > OPT(opt_cmod_propagation); > >> > OPT(dead_code_eliminate); > >> > + OPT(opt_sampler_eot); > >> > >> Do you think we really need to do this in the optimization loop? > >> > >> I don't expect this to allow other optimization passes to make > >> additional progress, and we can obviously do it successfully only > >> once. I suspect we can do it after the optimization loop. > >> > > > > It's possible I didn't quite spot where you want me to put the > > optimization. I > > think that the way the code works right now, that will not work. The > > optimization is depending on DCE to kill off the only LOAD_PAYLOAD and it's > > corresponding MOVs. I agree that it is an optimization that can only occur > > once, > > and generally it doesn't belong in the progress loop though. > > Ah, sorry. I'd probably do it between the end of the optimization loop > and the call to lower_load_payload().
Right. I looked at this too and at least from the 5 second glance at the code, it seems this path can skip DCE. If you are certain that this cannot happen, I will gladly make the change. I defer to you regarding whether or not the optimizations can do more after this happens (ie. we definitely want to take it out of the loop). _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev