aco: use can_accept_constant in valu_can_accept_literal

Signed-off-by: Rhys Perry <pendingchaos02@gmail.com>
Reviewed-by: Daniel Schürmann <daniel@schuermann.dev>
This commit is contained in:
Rhys Perry 2019-09-24 13:36:16 +01:00
parent b37857bcea
commit 45d6c69b99
1 changed files with 8 additions and 7 deletions

View File

@ -439,12 +439,6 @@ void to_VOP3(opt_ctx& ctx, aco_ptr<Instruction>& instr)
}
}
bool valu_can_accept_literal(opt_ctx& ctx, aco_ptr<Instruction>& instr)
{
// TODO: VOP3 can take a literal on GFX10
return !instr->isSDWA() && !instr->isDPP() && !instr->isVOP3();
}
/* only covers special cases */
bool can_accept_constant(aco_ptr<Instruction>& instr, unsigned operand)
{
@ -473,6 +467,13 @@ bool can_accept_constant(aco_ptr<Instruction>& instr, unsigned operand)
}
}
bool valu_can_accept_literal(opt_ctx& ctx, aco_ptr<Instruction>& instr, unsigned operand)
{
// TODO: VOP3 can take a literal on GFX10
return !instr->isSDWA() && !instr->isDPP() && !instr->isVOP3() &&
operand == 0 && can_accept_constant(instr, operand);
}
bool parse_base_offset(opt_ctx &ctx, Instruction* instr, unsigned op_index, Temp *base, uint32_t *offset)
{
Operand op = instr->operands[op_index];
@ -2307,7 +2308,7 @@ void select_instruction(opt_ctx &ctx, aco_ptr<Instruction>& instr)
if (ctx.uses[instr->operands[literal_idx].tempId()] == 0)
instr->operands[literal_idx] = Operand(ctx.info[instr->operands[literal_idx].tempId()].val);
}
} else if (instr->isVALU() && valu_can_accept_literal(ctx, instr) &&
} else if (instr->isVALU() && valu_can_accept_literal(ctx, instr, 0) &&
instr->operands[0].isTemp() &&
ctx.info[instr->operands[0].tempId()].is_literal() &&
ctx.uses[instr->operands[0].tempId()] < threshold) {