intel/fs: Handle OR source modifiers in algebraic optimization
Found by inspection. Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
@@ -2596,7 +2596,16 @@ fs_visitor::opt_algebraic()
|
||||
case BRW_OPCODE_OR:
|
||||
if (inst->src[0].equals(inst->src[1]) ||
|
||||
inst->src[1].is_zero()) {
|
||||
inst->opcode = BRW_OPCODE_MOV;
|
||||
/* On Gen8+, the OR instruction can have a source modifier that
|
||||
* performs logical not on the operand. Cases of 'OR r0, ~r1, 0'
|
||||
* or 'OR r0, ~r1, ~r1' should become a NOT instead of a MOV.
|
||||
*/
|
||||
if (inst->src[0].negate) {
|
||||
inst->opcode = BRW_OPCODE_NOT;
|
||||
inst->src[0].negate = false;
|
||||
} else {
|
||||
inst->opcode = BRW_OPCODE_MOV;
|
||||
}
|
||||
inst->src[1] = reg_undef;
|
||||
progress = true;
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user