mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 11:18:08 +02:00
i965/fs: Do not move MOVs writing the flag outside of control flow
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.
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
parent
f1b7c47913
commit
8238930510
1 changed files with 4 additions and 2 deletions
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue