}
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;
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;
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;