diff --git a/src/intel/compiler/brw_fs_nir.cpp b/src/intel/compiler/brw_fs_nir.cpp index 4e233a4ed20..0b609871d7e 100644 --- a/src/intel/compiler/brw_fs_nir.cpp +++ b/src/intel/compiler/brw_fs_nir.cpp @@ -1633,8 +1633,9 @@ fs_nir_emit_alu(nir_to_brw_state &ntb, nir_alu_instr *instr, */ case nir_op_ishl: if (instr->def.bit_size < 32) { - bld.AND(result, op[1], brw_imm_ud(instr->def.bit_size - 1)); - bld.SHL(result, op[0], result); + bld.SHL(result, + op[0], + bld.AND(op[1], brw_imm_ud(instr->def.bit_size - 1))); } else { bld.SHL(result, op[0], op[1]); } @@ -1642,8 +1643,9 @@ fs_nir_emit_alu(nir_to_brw_state &ntb, nir_alu_instr *instr, break; case nir_op_ishr: if (instr->def.bit_size < 32) { - bld.AND(result, op[1], brw_imm_ud(instr->def.bit_size - 1)); - bld.ASR(result, op[0], result); + bld.ASR(result, + op[0], + bld.AND(op[1], brw_imm_ud(instr->def.bit_size - 1))); } else { bld.ASR(result, op[0], op[1]); } @@ -1651,8 +1653,9 @@ fs_nir_emit_alu(nir_to_brw_state &ntb, nir_alu_instr *instr, break; case nir_op_ushr: if (instr->def.bit_size < 32) { - bld.AND(result, op[1], brw_imm_ud(instr->def.bit_size - 1)); - bld.SHR(result, op[0], result); + bld.SHR(result, + op[0], + bld.AND(op[1], brw_imm_ud(instr->def.bit_size - 1))); } else { bld.SHR(result, op[0], op[1]); }