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
|