diff options
author | Rhys Perry <[email protected]> | 2019-09-24 13:32:56 +0100 |
---|---|---|
committer | Rhys Perry <[email protected]> | 2019-10-11 14:26:58 +0000 |
commit | b37857bcea79e85e9cae6dbfe858ed7aac772afe (patch) | |
tree | c334a958d4dccc4b3e18d6a4c4458283dadb818b /src | |
parent | 599d634c2c179434950ea93dc0f622d825814ee2 (diff) |
aco: don't apply sgprs/constants to read/write lane instructions
Signed-off-by: Rhys Perry <[email protected]>
Reviewed-by: Daniel Schürmann <[email protected]>
Diffstat (limited to 'src')
-rw-r--r-- | src/amd/compiler/aco_optimizer.cpp | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/src/amd/compiler/aco_optimizer.cpp b/src/amd/compiler/aco_optimizer.cpp index fe05634c280..a142ccba9a1 100644 --- a/src/amd/compiler/aco_optimizer.cpp +++ b/src/amd/compiler/aco_optimizer.cpp @@ -412,6 +412,13 @@ bool can_use_VOP3(aco_ptr<Instruction>& instr) instr->opcode != aco_opcode::v_madak_f16; } +bool can_apply_sgprs(aco_ptr<Instruction>& instr) +{ + return instr->opcode != aco_opcode::v_readfirstlane_b32 && + instr->opcode != aco_opcode::v_readlane_b32 && + instr->opcode != aco_opcode::v_writelane_b32; +} + void to_VOP3(opt_ctx& ctx, aco_ptr<Instruction>& instr) { if (instr->isVOP3()) @@ -452,6 +459,8 @@ bool can_accept_constant(aco_ptr<Instruction>& instr, unsigned operand) case aco_opcode::p_wqm: case aco_opcode::p_extract_vector: case aco_opcode::p_split_vector: + case aco_opcode::v_readlane_b32: + case aco_opcode::v_readfirstlane_b32: return operand != 0; default: if ((instr->format == Format::MUBUF || @@ -1970,7 +1979,8 @@ void combine_instruction(opt_ctx &ctx, aco_ptr<Instruction>& instr) return; if (instr->isVALU()) { - apply_sgprs(ctx, instr); + if (can_apply_sgprs(instr)) + apply_sgprs(ctx, instr); if (apply_omod_clamp(ctx, instr)) return; } |