This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH 2/2] [ARC] Fix millicode wrong blink restore.
- From: Andrew Burgess <andrew dot burgess at embecosm dot com>
- To: Claudiu Zissulescu <claziss at gmail dot com>
- Cc: gcc-patches at gcc dot gnu dot org, fbedard at synopsys dot com, claziss at synopsys dot com
- Date: Wed, 12 Dec 2018 16:18:48 +0000
- Subject: Re: [PATCH 2/2] [ARC] Fix millicode wrong blink restore.
- References: <20181211102335.4643-1-claziss@gmail.com> <20181211102335.4643-3-claziss@gmail.com>
* Claudiu Zissulescu <claziss@gmail.com> [2018-12-11 12:23:35 +0200]:
> The blink is restored wrongly when using millicode and regular load
> instructions.
>
> gcc/
> xxxx-xx-xx Claudiu Zissulescu <claziss@synopsys.com>
>
> * config/arc/arc.c (arc_restore_callee_milli) Don't clobber off
> variable.
>
> testsuite/
> xxxx-xx-xx Claudiu Zissulescu <claziss@synopsys.com>
>
> * gcc.target/arc/milli-1.c: New test.
Looks good, and thanks for the new test.
Andrew
> ---
> gcc/config/arc/arc.c | 4 +---
> gcc/testsuite/gcc.target/arc/milli-1.c | 23 +++++++++++++++++++++++
> 2 files changed, 24 insertions(+), 3 deletions(-)
> create mode 100644 gcc/testsuite/gcc.target/arc/milli-1.c
>
> diff --git a/gcc/config/arc/arc.c b/gcc/config/arc/arc.c
> index 55175215bfe..5af3ee6c9e0 100644
> --- a/gcc/config/arc/arc.c
> +++ b/gcc/config/arc/arc.c
> @@ -3597,9 +3597,7 @@ arc_restore_callee_milli (unsigned int gmask,
> insn = frame_insn (insn);
>
> /* Add DWARF info. */
> - for (regno = start_reg, off = 0;
> - regno <= end_reg;
> - regno++, off += UNITS_PER_WORD)
> + for (regno = start_reg; regno <= end_reg; regno++)
> {
> reg = gen_rtx_REG (SImode, regno);
> add_reg_note (insn, REG_CFA_RESTORE, reg);
> diff --git a/gcc/testsuite/gcc.target/arc/milli-1.c b/gcc/testsuite/gcc.target/arc/milli-1.c
> new file mode 100644
> index 00000000000..b501b39eb81
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/arc/milli-1.c
> @@ -0,0 +1,23 @@
> +/* { dg-do compile } */
> +/* { dg-options "-Os" } */
> +
> +/* Test if we restore correctly blink when using millicode. */
> +extern void bar (void);
> +
> +void foo (void)
> +{
> + __asm__ volatile ( "" : : : "r13","r14","r15","r16","r17","r18","r20","r21");
> + bar();
> +}
> +
> +void foo2 (void)
> +{
> + bar();
> + __asm__ volatile ( "" : : : "r13","r14","r15","r16","r17","r18","r20","r21");
> +}
> +
> +/* { dg-final { scan-assembler-not "st.*r13,\\\[sp" } } */
> +/* { dg-final { scan-assembler-not "st.*r14,\\\[sp" } } */
> +/* { dg-final { scan-assembler-not "st.*r15,\\\[sp" } } */
> +/* { dg-final { scan-assembler "ld.*blink,\\\[sp,32" } } */
> +/* { dg-final { scan-assembler "mov_s.*r12,32" } } */
> --
> 2.19.1
>