mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-07 04:20:18 +01:00
i965/cfg: Eliminate an empty then-branch of an if/else/endif
On BDW, total instructions in shared programs: 8448571 -> 8448367 (-0.00%) instructions in affected programs: 21000 -> 20796 (-0.97%) helped: 116 HURT: 0 v2: Remove spurious attempt to combine the if_block with the (removed!) else_block. Suggested by Matt and Curro. Correct the comment describing what the new pass does. Suggested by Matt. Signed-off-by: Ian Romanick <ian.d.romanick@intel.com> Reviewed-by: Francisco Jerez <currojerez@riseup.net>
This commit is contained in:
parent
c7deee69ea
commit
69bb063ec2
1 changed files with 14 additions and 0 deletions
|
|
@ -34,6 +34,7 @@
|
|||
* - if/endif
|
||||
* . else in else/endif
|
||||
* - if/else/endif
|
||||
* - else in if/else
|
||||
*/
|
||||
bool
|
||||
dead_control_flow_eliminate(backend_shader *s)
|
||||
|
|
@ -114,6 +115,19 @@ dead_control_flow_eliminate(backend_shader *s)
|
|||
|
||||
progress = true;
|
||||
}
|
||||
} else if (inst->opcode == BRW_OPCODE_ELSE &&
|
||||
prev_inst->opcode == BRW_OPCODE_IF) {
|
||||
bblock_t *const else_block = block;
|
||||
backend_instruction *const if_inst = prev_inst;
|
||||
backend_instruction *const else_inst = inst;
|
||||
|
||||
/* Since the else-branch is becoming the new then-branch, the
|
||||
* condition has to be inverted.
|
||||
*/
|
||||
if_inst->predicate_inverse = !if_inst->predicate_inverse;
|
||||
else_inst->remove(else_block);
|
||||
|
||||
progress = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue