[Mesa-dev] [PATCH 1/3] i965/fs: Remove SNB embedded-comparison support from optimizations.
Jason Ekstrand
jason at jlekstrand.net
Sun Oct 4 23:25:45 PDT 2015
Series is
Reviewed-by: Jason Ekstrand <jason.ekstrand at intel.com>
On Sat, Oct 3, 2015 at 10:58 AM, Matt Turner <mattst88 at gmail.com> wrote:
> We never emit IF instructions with an embedded comparison (lost in the
> switch to NIR), so this code is not used. If we want to readd support,
> we should have a pass that merges a CMP instruction with an IF or a
> WHILE instruction after other optimizations have run.
> ---
> .../dri/i965/brw_fs_peephole_predicated_break.cpp | 14 ++------------
> src/mesa/drivers/dri/i965/brw_fs_sel_peephole.cpp | 21 +--------------------
> 2 files changed, 3 insertions(+), 32 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_fs_peephole_predicated_break.cpp b/src/mesa/drivers/dri/i965/brw_fs_peephole_predicated_break.cpp
> index b75f40b..8f7bd83 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs_peephole_predicated_break.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_fs_peephole_predicated_break.cpp
> @@ -83,18 +83,8 @@ fs_visitor::opt_peephole_predicated_break()
> bblock_t *if_block = jump_block->prev();
> bblock_t *endif_block = jump_block->next();
>
> - /* For Sandybridge with IF with embedded comparison we need to emit an
> - * instruction to set the flag register.
> - */
> - if (devinfo->gen == 6 && if_inst->conditional_mod) {
> - const fs_builder ibld(this, if_block, if_inst);
> - ibld.CMP(ibld.null_reg_d(), if_inst->src[0], if_inst->src[1],
> - if_inst->conditional_mod);
> - jump_inst->predicate = BRW_PREDICATE_NORMAL;
> - } else {
> - jump_inst->predicate = if_inst->predicate;
> - jump_inst->predicate_inverse = if_inst->predicate_inverse;
> - }
> + jump_inst->predicate = if_inst->predicate;
> + jump_inst->predicate_inverse = if_inst->predicate_inverse;
>
> bblock_t *earlier_block = if_block;
> if (if_block->start_ip == if_block->end_ip) {
> diff --git a/src/mesa/drivers/dri/i965/brw_fs_sel_peephole.cpp b/src/mesa/drivers/dri/i965/brw_fs_sel_peephole.cpp
> index d190d8e..8613725 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs_sel_peephole.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_fs_sel_peephole.cpp
> @@ -155,18 +155,6 @@ fs_visitor::opt_peephole_sel()
> if (movs == 0)
> continue;
>
> - enum brw_predicate predicate;
> - bool predicate_inverse;
> - if (devinfo->gen == 6 && if_inst->conditional_mod) {
> - /* For Sandybridge with IF with embedded comparison */
> - predicate = BRW_PREDICATE_NORMAL;
> - predicate_inverse = false;
> - } else {
> - /* Separate CMP and IF instructions */
> - predicate = if_inst->predicate;
> - predicate_inverse = if_inst->predicate_inverse;
> - }
> -
> /* Generate SEL instructions for pairs of MOVs to a common destination. */
> for (int i = 0; i < movs; i++) {
> if (!then_mov[i] || !else_mov[i])
> @@ -195,13 +183,6 @@ fs_visitor::opt_peephole_sel()
> if (movs == 0)
> continue;
>
> - /* Emit a CMP if our IF used the embedded comparison */
> - if (devinfo->gen == 6 && if_inst->conditional_mod) {
> - const fs_builder ibld(this, block, if_inst);
> - ibld.CMP(ibld.null_reg_d(), if_inst->src[0], if_inst->src[1],
> - if_inst->conditional_mod);
> - }
> -
> for (int i = 0; i < movs; i++) {
> const fs_builder ibld = fs_builder(this, then_block, then_mov[i])
> .at(block, if_inst);
> @@ -220,7 +201,7 @@ fs_visitor::opt_peephole_sel()
> ibld.MOV(src0, then_mov[i]->src[0]);
> }
>
> - set_predicate_inv(predicate, predicate_inverse,
> + set_predicate_inv(if_inst->predicate, if_inst->predicate_inverse,
> ibld.SEL(then_mov[i]->dst, src0,
> else_mov[i]->src[0]));
> }
> --
> 2.4.9
>
> _______________________________________________
> 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