History log of /external/mesa3d/src/gallium/drivers/vc4/vc4_opt_copy_propagation.c
Revision Date Author Comments (<<< Hide modified files) (Show modified files >>>)
314f0c57e4c00b0a5cb544fa43e356c1069acd8f 15-Nov-2016 Eric Anholt <eric@anholt.net> vc4: Refactor qir_get_op_nsrc(enum qop) to qir_get_nsrc(struct qinst *).

Every caller was dereffing the qinst, and this will let us make the number
of sources vary depending on the destination of the qinst so that we can
have general ALU ops that store to tex_[strb] and get an implicit uniform.
/external/mesa3d/src/gallium/drivers/vc4/vc4_opt_copy_propagation.c
8ce65261789f085e657e6a487db93d38ee6bea63 25-Aug-2016 Eric Anholt <eric@anholt.net> vc4: Add support for MUL output rotation.

Extracted from a patch by jonasarrow on github.
/external/mesa3d/src/gallium/drivers/vc4/vc4_opt_copy_propagation.c
4e797bd98f3aaea8d295c661f7501053156d211a 13-Jul-2016 Eric Anholt <eric@anholt.net> vc4: Update copy propagation for control flow.

Previously, we could assume that a MOV from a temp was always an available
copy, because all temps were SSA in NIR, and their non-SSA state in QIR
was just due to the fact that they were from a bcsel or pack_unorm_4x8, so
we could use the current value of the temp after that series of QIR
instructions to define it.

However, this is no longer the case with control flow. Instead, we track
a new array of MOVs defined within the block that haven't had their source
or dest killed yet, and use that primarily. We fall back to looking
through the QIR defs array to handle across-block MOVs, but now require
that copies from the SSA defs have an SSA src as well.
/external/mesa3d/src/gallium/drivers/vc4/vc4_opt_copy_propagation.c
d3cdbf6fd817ae5e7a8a72bcc3f43cc1b04a709b 09-Jul-2016 Eric Anholt <eric@anholt.net> vc4: Add a "qir_for_each_inst_inorder" macro and use it in many places.

We have the prior list_foreach() all over the code, but I need to move
where instructions live as part of adding support for control flow. Start
by just converting to a helper iterator macro. (The simpler
"qir_for_each_inst()" will be used for the for-each-inst-in-a-block
iterator macro later)
/external/mesa3d/src/gallium/drivers/vc4/vc4_opt_copy_propagation.c
3359ad6cda49fb977d837eb00e8ae4d781d95c2a 06-Aug-2015 Eric Anholt <eric@anholt.net> vc4: Add support for copy propagation with unpack flags present.

total instructions in shared programs: 89251 -> 87862 (-1.56%)
instructions in affected programs: 52971 -> 51582 (-2.62%)
/external/mesa3d/src/gallium/drivers/vc4/vc4_opt_copy_propagation.c
6eb0760f4896d2dd45820ec1fcab36496228b761 25-Oct-2015 Eric Anholt <eric@anholt.net> vc4: Only copy propagate raw MOVs.

No problems being fixed, but needed for the new unpack changes.
/external/mesa3d/src/gallium/drivers/vc4/vc4_opt_copy_propagation.c
2002438c91981b22991ae70fefc5d492dda72835 21-Aug-2015 Eric Anholt <eric@anholt.net> vc4: Use the SSA defs list for figuring out eligible MOVs for copy prop.

I thought I'd converted this over previously. It was copy propagating
MOVs badly with the new destination packing flags.
/external/mesa3d/src/gallium/drivers/vc4/vc4_opt_copy_propagation.c
cc8fb2904673588d31b660dbfaf692615b5202dd 31-Jul-2015 Eric Anholt <eric@anholt.net> vc4: Make r4-writes implicitly move to a temp, and allocate temps to r4.

Previously, SFU values always moved to a temporary, and TLB color reads
and texture reads always lived in r4. Instead, we can have these results
just be normal temporaries, and the register allocator can leave the
values in r4 when they don't interfere with anything else using r4.

shader-db results:
total instructions in shared programs: 100809 -> 100040 (-0.76%)
instructions in affected programs: 42383 -> 41614 (-1.81%)
/external/mesa3d/src/gallium/drivers/vc4/vc4_opt_copy_propagation.c
78c773bb3646295e4a4f1fe7d6d10f05758ee48b 30-May-2015 Eric Anholt <eric@anholt.net> vc4: Convert from simple_list.h to list.h

list.h is a nicer and more familiar set of list functions/macros.
/external/mesa3d/src/gallium/drivers/vc4/vc4_opt_copy_propagation.c
85316d059c899ac096331251de6b233229aa0b4f 19-Feb-2015 Eric Anholt <eric@anholt.net> vc4: Keep an array of pointers to instructions defining the temps around.

The optimization passes are always regenerating it and throwing it away,
but it's not hard to keep track of.
/external/mesa3d/src/gallium/drivers/vc4/vc4_opt_copy_propagation.c
14dc281c1332518b6144718e1fb3845abbe23ff7 19-Feb-2015 Eric Anholt <eric@anholt.net> vc4: Enforce one-uniform-per-instruction after optimization.

This lets us more intelligently decide which uniform values should be put
into temporaries, by choosing the most reused values to push to temps
first.

total uniforms in shared programs: 13457 -> 13433 (-0.18%)
uniforms in affected programs: 1524 -> 1500 (-1.57%)
total instructions in shared programs: 40198 -> 40019 (-0.45%)
instructions in affected programs: 6027 -> 5848 (-2.97%)

I noticed this opportunity because with the NIR work, some programs were
happening to make different uniform copy propagation choices that
significantly increased instruction counts.
/external/mesa3d/src/gallium/drivers/vc4/vc4_opt_copy_propagation.c
a58ae83882b3ad3ecb53271f42cf1fd8f9c2907c 10-Jan-2015 Eric Anholt <eric@anholt.net> vc4: Redo VPM reads as a read file.

This will let us do copy propagation of the VPM reads.
/external/mesa3d/src/gallium/drivers/vc4/vc4_opt_copy_propagation.c
3093bfacf042516cd2a0fa2346da1e9df5f321ec 09-Jan-2015 Eric Anholt <eric@anholt.net> vc4: Fix the no-copy-propagating-from-TLB_COLOR_READ check.

Our MOV's dst obviously won't be the TLB_COLOR_READ's def, because we're
ssa.
/external/mesa3d/src/gallium/drivers/vc4/vc4_opt_copy_propagation.c
93cac2637ba5a7cd5c79a0e74b87298fae807135 09-Oct-2014 Eric Anholt <eric@anholt.net> vc4: Prevent copy propagating out the MOVs from r4.

Copy propagating these might result in reading the r4 after some other
instruction has written r4. Just prevent all copy propagation of this for
now.

Fixes bad rendering with upcoming indirect register access support, where
the copy propagation was consistently happening across another read.
/external/mesa3d/src/gallium/drivers/vc4/vc4_opt_copy_propagation.c
64122b16ce74a3fb65269bab325c651c26ccd2d0 25-Sep-2014 Eric Anholt <eric@anholt.net> vc4: Dump constant uniform values in VC4_DEBUG=qir.

Definitely helps when trying to understand and optimize a program.
/external/mesa3d/src/gallium/drivers/vc4/vc4_opt_copy_propagation.c
71d4fc88d6b97d6b9a8f1a324d2dcd0c56b79f3d 17-Sep-2014 Eric Anholt <eric@anholt.net> vc4: Allow copy propagation of uniforms.

Fixes 12 piglit tests (and 8 more crash -> fail) from reducing register
pressure.
/external/mesa3d/src/gallium/drivers/vc4/vc4_opt_copy_propagation.c
4bca922878a4d433077d21d4918b1db71b3a15f7 13-Aug-2014 Eric Anholt <eric@anholt.net> vc4: Merge qcompile and tgsi_to_qir

The split between these two didn't make much sense. I'm going to want the
chance to look at uniform contents in optimization passes, and the QPU
emit I think is going to end up rewriting the uniforms stream.
/external/mesa3d/src/gallium/drivers/vc4/vc4_opt_copy_propagation.c
b0a1e401a93b7b13870b936bc667b3fc15dba6d5 19-Aug-2014 Eric Anholt <eric@anholt.net> vc4: Include stdio/stdlib in headers so I don't have to include it per file.

There are a few tools I want to have always available, and fprintf() and
abort() are among them.
/external/mesa3d/src/gallium/drivers/vc4/vc4_opt_copy_propagation.c
ec9da314baf11bea57f315346091ae941ac4f662 04-Jul-2014 Eric Anholt <eric@anholt.net> vc4: Add copy propagation between temps.

We put in a bunch of extra MOVs for program outputs, and this can clean
those up. We should do uniforms, too, though.

v2: Fix missing flagging of progress when we actually optimize. Caught by
Aaron Watry.
/external/mesa3d/src/gallium/drivers/vc4/vc4_opt_copy_propagation.c