[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