[Beignet] [PATCH] backend: use simd-1 for scalar dst in indirectMov.

Yang, Rong R rong.r.yang at intel.com
Thu Sep 21 07:14:48 UTC 2017


LGTM, pushed, thanks.

> -----Original Message-----
> From: Beignet [mailto:beignet-bounces at lists.freedesktop.org] On Behalf Of
> Ruiling Song
> Sent: Wednesday, September 13, 2017 2:07 PM
> To: beignet at lists.freedesktop.org
> Cc: Song, Ruiling <ruiling.song at intel.com>
> Subject: [Beignet] [PATCH] backend: use simd-1 for scalar dst in indirectMov.
> 
> This fix a failure introduced by load-store optimization on IVB.
> the test case is: builtin_kernel_block_motion_estimate_intel
> 
> Signed-off-by: Ruiling Song <ruiling.song at intel.com>
> ---
>  backend/src/backend/gen_context.cpp | 38 +++++++++++++++++++++++--------
> ------
>  1 file changed, 24 insertions(+), 14 deletions(-)
> 
> diff --git a/backend/src/backend/gen_context.cpp
> b/backend/src/backend/gen_context.cpp
> index 0b171ff..6fc3159 100644
> --- a/backend/src/backend/gen_context.cpp
> +++ b/backend/src/backend/gen_context.cpp
> @@ -1949,23 +1949,33 @@ namespace gbe
>      indirect_src = GenRegister::indirect(dst.type, 0, GEN_WIDTH_1,
>                                           GEN_VERTICAL_STRIDE_ONE_DIMENSIONAL,
> GEN_HORIZONTAL_STRIDE_0);
> 
> -    p->push();
> -      p->curr.execWidth = 8;
> -      p->curr.quarterControl = GEN_COMPRESSION_Q1;
> -      p->MOV(a0, tmp);
> -      p->MOV(dst, indirect_src);
> -    p->pop();
> -
> -    if (simdWidth == 16) {
> +    if (sel->isScalarReg(dst.reg())) {
> +      p->push();
> +        p->curr.execWidth = 1;
> +        p->curr.predicate = GEN_PREDICATE_NONE;
> +        p->curr.noMask = 1;
> +        p->MOV(a0, tmp);
> +        p->MOV(dst, indirect_src);
> +      p->pop();
> +    } else {
>        p->push();
>          p->curr.execWidth = 8;
> -        p->curr.quarterControl = GEN_COMPRESSION_Q2;
> -
> -        const GenRegister nextDst = GenRegister::Qn(dst, 1);
> -        const GenRegister nextOffset = GenRegister::Qn(tmp, 1);
> -        p->MOV(a0, nextOffset);
> -        p->MOV(nextDst, indirect_src);
> +        p->curr.quarterControl = GEN_COMPRESSION_Q1;
> +        p->MOV(a0, tmp);
> +        p->MOV(dst, indirect_src);
>        p->pop();
> +
> +      if (simdWidth == 16) {
> +        p->push();
> +          p->curr.execWidth = 8;
> +          p->curr.quarterControl = GEN_COMPRESSION_Q2;
> +
> +          const GenRegister nextDst = GenRegister::Qn(dst, 1);
> +          const GenRegister nextOffset = GenRegister::Qn(tmp, 1);
> +          p->MOV(a0, nextOffset);
> +          p->MOV(nextDst, indirect_src);
> +        p->pop();
> +      }
>      }
>    }
> 
> --
> 2.4.1
> 
> _______________________________________________
> Beignet mailing list
> Beignet at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/beignet


More information about the Beignet mailing list