- /* omod has no effect if denormals are enabled */
- /* apply omod / clamp modifiers if the def is used only once and the instruction can have modifiers */
- if (!instr->definitions.empty() && ctx.uses[instr->definitions[0].tempId()] == 1 &&
- can_use_VOP3(ctx, instr) && instr_info.can_use_output_modifiers[(int)instr->opcode]) {
- bool can_use_omod = (instr->definitions[0].bytes() == 4 ? block.fp_mode.denorm32 : block.fp_mode.denorm16_64) == 0;
- ssa_info& def_info = ctx.info[instr->definitions[0].tempId()];
- if (can_use_omod && def_info.is_omod2() && ctx.uses[def_info.temp.id()]) {
- to_VOP3(ctx, instr);
- static_cast<VOP3A_instruction*>(instr.get())->omod = 1;
- def_info.set_omod_success(instr.get());
- } else if (can_use_omod && def_info.is_omod4() && ctx.uses[def_info.temp.id()]) {
- to_VOP3(ctx, instr);
- static_cast<VOP3A_instruction*>(instr.get())->omod = 2;
- def_info.set_omod_success(instr.get());
- } else if (can_use_omod && def_info.is_omod5() && ctx.uses[def_info.temp.id()]) {
- to_VOP3(ctx, instr);
- static_cast<VOP3A_instruction*>(instr.get())->omod = 3;
- def_info.set_omod_success(instr.get());
- } else if (def_info.is_clamp() && ctx.uses[def_info.temp.id()]) {
- to_VOP3(ctx, instr);
- static_cast<VOP3A_instruction*>(instr.get())->clamp = true;
- def_info.set_clamp_success(instr.get());
- }
- }