mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-01 23:18:20 +02:00
i965: Improve dead control flow elimination.
... to eliminate an ELSE instruction followed immediately by an ENDIF. instructions in affected programs: 704 -> 700 (-0.57%) Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
parent
0ddc28b026
commit
ac2acf04f7
1 changed files with 15 additions and 10 deletions
|
|
@ -32,6 +32,7 @@
|
|||
/* Look for and eliminate dead control flow:
|
||||
*
|
||||
* - if/endif
|
||||
* . else in else/endif
|
||||
* - if/else/endif
|
||||
*/
|
||||
bool
|
||||
|
|
@ -54,24 +55,28 @@ dead_control_flow_eliminate(backend_visitor *v)
|
|||
|
||||
backend_instruction *if_inst = NULL, *else_inst = NULL;
|
||||
backend_instruction *prev_inst = (backend_instruction *) endif_inst->prev;
|
||||
if (prev_inst->opcode == BRW_OPCODE_ELSE) {
|
||||
else_inst = prev_inst;
|
||||
found = true;
|
||||
|
||||
prev_inst = (backend_instruction *) prev_inst->prev;
|
||||
}
|
||||
|
||||
if (prev_inst->opcode == BRW_OPCODE_IF) {
|
||||
if_inst = prev_inst;
|
||||
found = true;
|
||||
} else if (prev_inst->opcode == BRW_OPCODE_ELSE) {
|
||||
else_inst = prev_inst;
|
||||
|
||||
prev_inst = (backend_instruction *) prev_inst->prev;
|
||||
if (prev_inst->opcode == BRW_OPCODE_IF) {
|
||||
if_inst = prev_inst;
|
||||
found = true;
|
||||
}
|
||||
} else {
|
||||
/* Don't remove the ENDIF if we didn't find a dead IF. */
|
||||
endif_inst = NULL;
|
||||
}
|
||||
|
||||
if (found) {
|
||||
if_inst->remove();
|
||||
if (if_inst)
|
||||
if_inst->remove();
|
||||
if (else_inst)
|
||||
else_inst->remove();
|
||||
endif_inst->remove();
|
||||
if (endif_inst)
|
||||
endif_inst->remove();
|
||||
progress = true;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue