[Beignet] [Patch V3] Fix a upsample regression.
Zhigang Gong
zhigang.gong at linux.intel.com
Thu Oct 16 17:43:44 PDT 2014
This version LGTM, just pushed, thanks.
On Thu, Oct 16, 2014 at 04:51:12PM +0800, Yang Rong wrote:
> In GenEncoder, unpack is not good, so move the upsample int/short from GenEncoder to instruction selection.
> Still handle upsample long in GenContext.
>
> Signed-off-by: Yang Rong <rong.r.yang at intel.com>
> ---
> backend/src/backend/gen_context.cpp | 2 --
> backend/src/backend/gen_encoder.cpp | 18 ------------------
> backend/src/backend/gen_encoder.hpp | 2 --
> backend/src/backend/gen_insn_selection.cpp | 22 ++++++++++++++++++----
> backend/src/backend/gen_insn_selection.hxx | 2 --
> 5 files changed, 18 insertions(+), 28 deletions(-)
>
> diff --git a/backend/src/backend/gen_context.cpp b/backend/src/backend/gen_context.cpp
> index ead455f..c05d4e7 100644
> --- a/backend/src/backend/gen_context.cpp
> +++ b/backend/src/backend/gen_context.cpp
> @@ -442,8 +442,6 @@ namespace gbe
> case SEL_OP_ADD: p->ADD(dst, src0, src1); break;
> case SEL_OP_MUL: p->MUL(dst, src0, src1); break;
> case SEL_OP_MACH: p->MACH(dst, src0, src1); break;
> - case SEL_OP_UPSAMPLE_SHORT: p->UPSAMPLE_SHORT(dst, src0, src1); break;
> - case SEL_OP_UPSAMPLE_INT: p->UPSAMPLE_INT(dst, src0, src1); break;
> case SEL_OP_UPSAMPLE_LONG:
> {
> GenRegister xdst = GenRegister::retype(dst, GEN_TYPE_UL),
> diff --git a/backend/src/backend/gen_encoder.cpp b/backend/src/backend/gen_encoder.cpp
> index 847ab7b..589617f 100644
> --- a/backend/src/backend/gen_encoder.cpp
> +++ b/backend/src/backend/gen_encoder.cpp
> @@ -612,24 +612,6 @@ namespace gbe
> pop();
> }
>
> - void GenEncoder::UPSAMPLE_SHORT(GenRegister dest, GenRegister src0, GenRegister src1) {
> - dest = GenRegister::retype(GenRegister::unpacked_uw(dest.nr, dest.subnr), GEN_TYPE_B);
> - src0 = GenRegister::retype(GenRegister::unpacked_uw(src0.nr, src0.subnr), GEN_TYPE_B);
> - src1 = GenRegister::retype(GenRegister::unpacked_uw(src1.nr, src1.subnr), GEN_TYPE_B);
> - MOV(dest, src1);
> - dest.subnr ++;
> - MOV(dest, src0);
> - }
> -
> - void GenEncoder::UPSAMPLE_INT(GenRegister dest, GenRegister src0, GenRegister src1) {
> - dest = GenRegister::unpacked_uw(dest.nr, dest.subnr);
> - src0 = GenRegister::unpacked_uw(src0.nr, src0.subnr);
> - src1 = GenRegister::unpacked_uw(src1.nr, src1.subnr);
> - MOV(dest, src1);
> - dest.subnr += 2;
> - MOV(dest, src0);
> - }
> -
> void GenEncoder::LOAD_INT64_IMM(GenRegister dest, int64_t value) {
> GenRegister u0 = GenRegister::immd((int)value), u1 = GenRegister::immd(value >> 32);
> MOV(dest.bottom_half(), u0);
> diff --git a/backend/src/backend/gen_encoder.hpp b/backend/src/backend/gen_encoder.hpp
> index 3df7a57..9170d70 100644
> --- a/backend/src/backend/gen_encoder.hpp
> +++ b/backend/src/backend/gen_encoder.hpp
> @@ -101,8 +101,6 @@ namespace gbe
> ALU1(FBL)
> ALU1(CBIT)
> ALU2(SUBB)
> - ALU2(UPSAMPLE_SHORT)
> - ALU2(UPSAMPLE_INT)
> ALU1(RNDZ)
> ALU1(RNDE)
> ALU1(RNDD)
> diff --git a/backend/src/backend/gen_insn_selection.cpp b/backend/src/backend/gen_insn_selection.cpp
> index 2b7bf47..5ca363a 100644
> --- a/backend/src/backend/gen_insn_selection.cpp
> +++ b/backend/src/backend/gen_insn_selection.cpp
> @@ -498,8 +498,6 @@ namespace gbe
> ALU1(CBIT)
> ALU2WithTemp(HADD)
> ALU2WithTemp(RHADD)
> - ALU2(UPSAMPLE_SHORT)
> - ALU2(UPSAMPLE_INT)
> ALU2(UPSAMPLE_LONG)
> ALU1WithTemp(CONVI_TO_I64)
> ALU1WithTemp(CONVF_TO_I64)
> @@ -2291,11 +2289,27 @@ namespace gbe
> break;
> }
> case OP_UPSAMPLE_SHORT:
> - sel.UPSAMPLE_SHORT(dst, src0, src1);
> + {
> + dst = GenRegister::retype(sel.unpacked_uw(dst.reg()), GEN_TYPE_B);
> + src0 = GenRegister::retype(sel.unpacked_uw(src0.reg()), GEN_TYPE_B);
> + src1 = GenRegister::retype(sel.unpacked_uw(src1.reg()), GEN_TYPE_B);
> + sel.MOV(dst, src1);
> + dst.subphysical = 1;
> + dst = dst.offset(dst, 0, typeSize(GEN_TYPE_B));
> + sel.MOV(dst, src0);
> break;
> + }
> case OP_UPSAMPLE_INT:
> - sel.UPSAMPLE_INT(dst, src0, src1);
> + {
> + dst = sel.unpacked_uw(dst.reg());
> + src0 = sel.unpacked_uw(src0.reg());
> + src1 = sel.unpacked_uw(src1.reg());
> + sel.MOV(dst, src1);
> + dst.subphysical = 1;
> + dst = dst.offset(dst, 0, typeSize(GEN_TYPE_W));
> + sel.MOV(dst, src0);
> break;
> + }
> case OP_UPSAMPLE_LONG:
> sel.UPSAMPLE_LONG(dst, src0, src1);
> break;
> diff --git a/backend/src/backend/gen_insn_selection.hxx b/backend/src/backend/gen_insn_selection.hxx
> index d80dc58..da8086e 100644
> --- a/backend/src/backend/gen_insn_selection.hxx
> +++ b/backend/src/backend/gen_insn_selection.hxx
> @@ -73,8 +73,6 @@ DECL_SELECTION_IR(HADD, BinaryWithTempInstruction)
> DECL_SELECTION_IR(RHADD, BinaryWithTempInstruction)
> DECL_SELECTION_IR(I64HADD, I64HADDInstruction)
> DECL_SELECTION_IR(I64RHADD, I64RHADDInstruction)
> -DECL_SELECTION_IR(UPSAMPLE_SHORT, BinaryInstruction)
> -DECL_SELECTION_IR(UPSAMPLE_INT, BinaryInstruction)
> DECL_SELECTION_IR(UPSAMPLE_LONG, BinaryInstruction)
> DECL_SELECTION_IR(CONVI_TO_I64, UnaryWithTempInstruction)
> DECL_SELECTION_IR(CONVI64_TO_I, UnaryInstruction)
> --
> 1.9.1
>
> _______________________________________________
> Beignet mailing list
> Beignet at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/beignet
More information about the Beignet
mailing list