Matt Turner <matts...@gmail.com> writes: > On Thu, Feb 11, 2016 at 4:41 PM, Matt Turner <matts...@gmail.com> wrote: >> Gen4/5's SEL instruction cannot use conditional modifiers, so min/max >> are implemented as CMP + SEL. Handling that after optimization lets us >> CSE more. >> >> On Ironlake: >> >> total instructions in shared programs: 6426035 -> 6422753 (-0.05%) >> instructions in affected programs: 326604 -> 323322 (-1.00%) >> helped: 1411 >> >> total cycles in shared programs: 129184700 -> 129101586 (-0.06%) >> cycles in affected programs: 18950290 -> 18867176 (-0.44%) >> helped: 2419 >> HURT: 328 >> --- >> src/mesa/drivers/dri/i965/brw_fs.cpp | 37 >> +++++++++++++++++++++++++ >> src/mesa/drivers/dri/i965/brw_fs.h | 1 + >> src/mesa/drivers/dri/i965/brw_fs_builder.h | 10 ++----- >> src/mesa/drivers/dri/i965/brw_fs_nir.cpp | 20 +++----------- >> src/mesa/drivers/dri/i965/brw_vec4.cpp | 38 >> ++++++++++++++++++++++++++ >> src/mesa/drivers/dri/i965/brw_vec4.h | 2 ++ >> src/mesa/drivers/dri/i965/brw_vec4_builder.h | 10 ++----- >> src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp | 14 ++-------- >> 8 files changed, 88 insertions(+), 44 deletions(-) >> >> diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp >> b/src/mesa/drivers/dri/i965/brw_fs.cpp >> index 0ce7ed1..e83f0ba 100644 >> --- a/src/mesa/drivers/dri/i965/brw_fs.cpp >> +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp >> @@ -3475,6 +3475,36 @@ fs_visitor::lower_integer_multiplication() >> return progress; >> } >> >> +bool >> +fs_visitor::lower_minmax() >> +{ >> + assert(devinfo->gen < 6); >> + >> + bool progress = false; >> + >> + foreach_block_and_inst_safe(block, fs_inst, inst, cfg) { >> + const fs_builder ibld(this, block, inst); >> + >> + if (inst->opcode == BRW_OPCODE_SEL && >> + inst->predicate == BRW_PREDICATE_NONE) { >> + assert(inst->conditional_mod == BRW_CONDITIONAL_GE || >> + inst->conditional_mod == BRW_CONDITIONAL_L); > > Ken asked at the office if this assertion is necessary. I think it is. > The PRM doesn't say anything about SEL with conditional modifiers > other than .ge or .l.
I'm pretty sure it's not, the SEL instruction works fine with other conditional mods, and I've found it moderately useful in the past. And at least the internal hardware docs mention explicitly that conditional mods other than .l and .ge follow the cmp rules (rather than the cmpn rules), which implies they're allowed... > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev
signature.asc
Description: PGP signature
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev