aco: Determine whether a few more instructions need exec.
These don't really need the exec mask (and never have), but we haven't needed to include them in needs_exec_mask yet. No Fossil DB changes. Signed-off-by: Timur Kristóf <timur.kristof@gmail.com> Reviewed-by: Tony Wasserka <tony.wasserka@gmx.de> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10691>
This commit is contained in:
parent
b06b24191f
commit
662bbf6ad4
|
@ -447,9 +447,9 @@ uint32_t get_reduction_identity(ReduceOp op, unsigned idx)
|
|||
}
|
||||
|
||||
bool needs_exec_mask(const Instruction* instr) {
|
||||
if (instr->isSALU())
|
||||
if (instr->isSALU() || instr->isBranch())
|
||||
return instr->reads_exec();
|
||||
if (instr->isSMEM() || instr->isSALU())
|
||||
if (instr->isSMEM())
|
||||
return false;
|
||||
if (instr->isBarrier())
|
||||
return false;
|
||||
|
@ -459,6 +459,8 @@ bool needs_exec_mask(const Instruction* instr) {
|
|||
case aco_opcode::p_create_vector:
|
||||
case aco_opcode::p_extract_vector:
|
||||
case aco_opcode::p_split_vector:
|
||||
case aco_opcode::p_phi:
|
||||
case aco_opcode::p_parallelcopy:
|
||||
for (Definition def : instr->definitions) {
|
||||
if (def.getTemp().type() == RegType::vgpr)
|
||||
return true;
|
||||
|
@ -466,6 +468,9 @@ bool needs_exec_mask(const Instruction* instr) {
|
|||
return false;
|
||||
case aco_opcode::p_spill:
|
||||
case aco_opcode::p_reload:
|
||||
case aco_opcode::p_logical_start:
|
||||
case aco_opcode::p_logical_end:
|
||||
case aco_opcode::p_startpgm:
|
||||
return false;
|
||||
default:
|
||||
break;
|
||||
|
|
Loading…
Reference in New Issue