[PATCH 6/7] [NDS32] Handle subreg correctly in wext_odd_dep_p.

Shiva Chen shiva0217@gmail.com
Mon Apr 1 05:31:00 GMT 2019


LGTM.

Kito Cheng <kito@andestech.com> 於 2019年3月26日 週二 下午1:29寫道:

> From: Kito Cheng <kito.cheng@gmail.com>
>
> Kito Cheng  <kito.cheng@gmail.com>
> Shiva Chen  <shiva0217@gmail.com>
>
> ChangeLog:
> gcc/
>         * config/nds32/nds32-pipelines-auxiliary.c (wext_odd_dep_p):
>         Handle subreg.
>
> gcc/testsuite
>         * gcc.target/nds32/wext-dep.c: New.
> ---
>  gcc/config/nds32/nds32-pipelines-auxiliary.c | 16 ++++++++++++----
>  gcc/testsuite/gcc.target/nds32/wext-dep.c    | 11 +++++++++++
>  2 files changed, 23 insertions(+), 4 deletions(-)
>  create mode 100644 gcc/testsuite/gcc.target/nds32/wext-dep.c
>
> diff --git a/gcc/config/nds32/nds32-pipelines-auxiliary.c
> b/gcc/config/nds32/nds32-pipelines-auxiliary.c
> index 0c043d4..07ba037 100644
> --- a/gcc/config/nds32/nds32-pipelines-auxiliary.c
> +++ b/gcc/config/nds32/nds32-pipelines-auxiliary.c
> @@ -363,14 +363,19 @@ wext_odd_dep_p (rtx insn, rtx def_reg)
>      return reg_overlap_p (def_reg, use_reg);
>
>    gcc_assert (REG_P (def_reg) || GET_CODE (def_reg) == SUBREG);
> -  gcc_assert (REG_P (use_reg));
> +  gcc_assert (REG_P (use_reg) || GET_CODE (use_reg) == SUBREG);
>
>    if (REG_P (def_reg))
>      {
> -      if (!TARGET_BIG_ENDIAN)
> -       return REGNO (def_reg) == REGNO (use_reg) + 1;
> +      if REG_P (use_reg)
> +       {
> +         if (!TARGET_BIG_ENDIAN)
> +           return REGNO (def_reg) == REGNO (use_reg) + 1;
> +         else
> +           return REGNO (def_reg) == REGNO (use_reg);
> +       }
>        else
> -       return  REGNO (def_reg) == REGNO (use_reg);
> +       return true;
>      }
>
>    if (GET_CODE (def_reg) == SUBREG)
> @@ -378,6 +383,9 @@ wext_odd_dep_p (rtx insn, rtx def_reg)
>        if (!reg_overlap_p (def_reg, use_reg))
>         return false;
>
> +      if (GET_CODE (use_reg) == SUBREG)
> +       return true;
> +
>        if (!TARGET_BIG_ENDIAN)
>         return SUBREG_BYTE (def_reg) == 4;
>        else
> diff --git a/gcc/testsuite/gcc.target/nds32/wext-dep.c
> b/gcc/testsuite/gcc.target/nds32/wext-dep.c
> new file mode 100644
> index 0000000..2af04d0
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/nds32/wext-dep.c
> @@ -0,0 +1,11 @@
> +/* { dg-do compile } */
> +/* { dg-options "-mext-dsp -mcpu=n15" { target nds32*-*-* } } */
> +
> +/* The test case check that wext_odd_dep_p in nds32-pipelines-auxiliary.c
> +   could handle the use_reg is SUBREG. */
> +typedef long long T;
> +typedef T vl_t __attribute__((vector_size(2 * sizeof (T))));
> +
> +void foo(vl_t *a, vl_t *b, int c) {
> +  *a = *b >> c;
> +}
> --
> 1.8.3.1
>
>



More information about the Gcc-patches mailing list