浏览代码

i965/fs/nir: Optimize integer multiply by a 16-bit constant.

Gen8+ support was just broken, since MUL now consumes 32-bits from both
sources. Fixes 986 piglit tests on my BDW.

total instructions in shared programs: 7753873 -> 7753522 (-0.00%)
instructions in affected programs:     28164 -> 27813 (-1.25%)
helped:                                77
GAINED:                                47

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
tags/10.6-branchpoint
Matt Turner 10 年前
父节点
当前提交
b8582d18e6
共有 1 个文件被更改,包括 23 次插入1 次删除
  1. 23
    1
      src/mesa/drivers/dri/i965/brw_fs_nir.cpp

+ 23
- 1
src/mesa/drivers/dri/i965/brw_fs_nir.cpp 查看文件

@@ -832,7 +832,29 @@ fs_visitor::nir_emit_alu(nir_alu_instr *instr)
break;

case nir_op_imul: {
/* TODO put in the 16-bit constant optimization once we have SSA */
if (brw->gen >= 8) {
emit(MUL(result, op[0], op[1]));
break;
} else {
nir_const_value *value0 = nir_src_as_const_value(instr->src[0].src);
nir_const_value *value1 = nir_src_as_const_value(instr->src[1].src);

if (value0 && value0->u[0] < (1 << 16)) {
if (brw->gen < 7) {
emit(MUL(result, op[0], op[1]));
} else {
emit(MUL(result, op[1], op[0]));
}
break;
} else if (value1 && value1->u[0] < (1 << 16)) {
if (brw->gen < 7) {
emit(MUL(result, op[1], op[0]));
} else {
emit(MUL(result, op[0], op[1]));
}
break;
}
}

if (brw->gen >= 7)
no16("SIMD16 explicit accumulator operands unsupported\n");

正在加载...
取消
保存