intel/compiler: Lower find_lsb in NIR

No shader-db or fossil-db changes on any Intel platform.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/19042>
This commit is contained in:
Ian Romanick
2022-10-10 13:41:59 -07:00
committed by Marge Bot
parent 66840b98e4
commit 15c6c859cf
3 changed files with 6 additions and 45 deletions

View File

@@ -1688,32 +1688,11 @@ vec4_visitor::nir_emit_alu(nir_alu_instr *instr)
break;
}
case nir_op_find_lsb: {
case nir_op_find_lsb:
assert(nir_dest_bit_size(instr->dest.dest) < 64);
vec4_builder bld = vec4_builder(this).at_end();
if (devinfo->ver < 7) {
dst_reg temp = bld.vgrf(BRW_REGISTER_TYPE_D);
/* (x & -x) generates a value that consists of only the LSB of x.
* For all powers of 2, findMSB(y) == findLSB(y).
*/
src_reg src = src_reg(retype(op[0], BRW_REGISTER_TYPE_D));
src_reg negated_src = src;
/* One must be negated, and the other must be non-negated. It
* doesn't matter which is which.
*/
negated_src.negate = true;
src.negate = false;
bld.AND(temp, src, negated_src);
emit_find_msb_using_lzd(bld, dst, src_reg(temp), false);
} else {
bld.FBL(dst, op[0]);
}
assert(devinfo->ver >= 7);
emit(FBL(dst, op[0]));
break;
}
case nir_op_ubitfield_extract:
case nir_op_ibitfield_extract: