On Thursday, July 6, 2017 4:48:23 PM PDT Matt Turner wrote: > The implementation of ballotARB() will start by zeroing the flags > register. So, a doing something like > > if (gl_SubGroupInvocationARB % 2u == 0u) { > ... = ballotARB(true); > [...] > } else { > ... = ballotARB(true); > [...] > } > > (like fs-ballot-if-else.shader_test does) would generate identical MOVs > to the same destination (the flag register!), and we definitely do not > want to pull that out of the control flow. > --- > src/intel/compiler/brw_fs_sel_peephole.cpp | 6 ++++-- > 1 file changed, 4 insertions(+), 2 deletions(-) > > diff --git a/src/intel/compiler/brw_fs_sel_peephole.cpp > b/src/intel/compiler/brw_fs_sel_peephole.cpp > index 8cd897f72e..fd02792beb 100644 > --- a/src/intel/compiler/brw_fs_sel_peephole.cpp > +++ b/src/intel/compiler/brw_fs_sel_peephole.cpp > @@ -68,7 +68,8 @@ count_movs_from_if(fs_inst *then_mov[MAX_MOVS], fs_inst > *else_mov[MAX_MOVS], > { > int then_movs = 0; > foreach_inst_in_block(fs_inst, inst, then_block) { > - if (then_movs == MAX_MOVS || inst->opcode != BRW_OPCODE_MOV) > + if (then_movs == MAX_MOVS || inst->opcode != BRW_OPCODE_MOV || > + inst->flags_written()) > break; > > then_mov[then_movs] = inst; > @@ -77,7 +78,8 @@ count_movs_from_if(fs_inst *then_mov[MAX_MOVS], fs_inst > *else_mov[MAX_MOVS], > > int else_movs = 0; > foreach_inst_in_block(fs_inst, inst, else_block) { > - if (else_movs == MAX_MOVS || inst->opcode != BRW_OPCODE_MOV) > + if (else_movs == MAX_MOVS || inst->opcode != BRW_OPCODE_MOV || > + inst->flags_written()) > break; > > else_mov[else_movs] = inst; >
Reviewed-by: Kenneth Graunke <kenn...@whitecape.org>
signature.asc
Description: This is a digitally signed message part.
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev