This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Small retpoline clean-up.


> Hello.
> 
> The patch is small clean-up of retpoline stuff. I know that H.J. is planning
> to introduce an option driving which retpoline loop filler is selected.
> Hopefully the suggested patch clarifies current default selection of
> the filler.
> 
> Patch survives make check -k -j10 RUNTESTFLAGS="i386.exp".
> 
> Ready to install?
> Thanks,
> Martin
> 
> 
> gcc/ChangeLog:
> 
> 2018-01-18  Martin Liska  <mliska@suse.cz>
> 
> 	* config/i386/i386.c (indirect_thunk_name): Document that also
> 	lfence is emitted.
> 	(output_indirect_thunk): Document why both instructions
> 	(pause and lfence) are generated.

OK,
thanks!
Honza
> 
> gcc/testsuite/ChangeLog:
> 
> 2018-01-18  Martin Liska  <mliska@suse.cz>
> 
> 	* gcc.target/i386/indirect-thunk-3.c: Remove duplicate options.
> 	* gcc.target/i386/indirect-thunk-4.c: Likewise.
> 	* gcc.target/i386/indirect-thunk-6.c: Likewise.
> 	* gcc.target/i386/indirect-thunk-bnd-4.c: Likewise.
> 	* gcc.target/i386/ret-thunk-10.c: Likewise.
> 	* gcc.target/i386/ret-thunk-11.c: Likewise.
> 	* gcc.target/i386/ret-thunk-12.c: Likewise.
> 	* gcc.target/i386/ret-thunk-15.c: Likewise.
> 	* gcc.target/i386/ret-thunk-9.c: Likewise.
> ---
>  gcc/config/i386/i386.c                               | 5 ++++-
>  gcc/testsuite/gcc.target/i386/indirect-thunk-3.c     | 2 +-
>  gcc/testsuite/gcc.target/i386/indirect-thunk-4.c     | 2 +-
>  gcc/testsuite/gcc.target/i386/indirect-thunk-6.c     | 2 +-
>  gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.c | 2 +-
>  gcc/testsuite/gcc.target/i386/ret-thunk-10.c         | 2 +-
>  gcc/testsuite/gcc.target/i386/ret-thunk-11.c         | 2 +-
>  gcc/testsuite/gcc.target/i386/ret-thunk-12.c         | 2 +-
>  gcc/testsuite/gcc.target/i386/ret-thunk-15.c         | 2 +-
>  gcc/testsuite/gcc.target/i386/ret-thunk-9.c          | 2 +-
>  10 files changed, 13 insertions(+), 10 deletions(-)
> 
> 

> diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
> index cb0f4ed5e6a..72d25ae4f72 100644
> --- a/gcc/config/i386/i386.c
> +++ b/gcc/config/i386/i386.c
> @@ -10826,6 +10826,7 @@ indirect_thunk_name (char name[32], unsigned int regno,
>  	call	L2
>     L1:
>  	pause
> +	lfence
>  	jmp	L1
>     L2:
>  	mov	%REG, (%sp)
> @@ -10837,6 +10838,7 @@ indirect_thunk_name (char name[32], unsigned int regno,
>  	call L2
>    L1:
>  	pause
> +	lfence
>  	jmp L1
>    L2:
>  	lea WORD_SIZE(%sp), %sp
> @@ -10864,7 +10866,8 @@ output_indirect_thunk (bool need_bnd_p, unsigned int regno)
>  
>    ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, indirectlabel1);
>  
> -  /* Pause + lfence.  */
> +  /* AMD and Intel CPUs prefer each a different instruction as loop filler.
> +     Usage of both pause + lfence is compromise solution.  */
>    fprintf (asm_out_file, "\tpause\n\tlfence\n");
>  
>    /* Jump.  */
> diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c
> index 9e24a385387..dab7ac2ef25 100644
> --- a/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c
> +++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c
> @@ -1,5 +1,5 @@
>  /* { dg-do compile } */
> -/* { dg-options "-O2 -mno-indirect-branch-register -mno-indirect-branch-register -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */
> +/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */
>  
>  typedef void (*dispatch_t)(long offset);
>  
> diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c
> index 127b5d94523..44cc5f52f45 100644
> --- a/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c
> +++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c
> @@ -1,5 +1,5 @@
>  /* { dg-do compile } */
> -/* { dg-options "-O2 -mno-indirect-branch-register -mno-indirect-branch-register -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */
> +/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */
>  
>  typedef void (*dispatch_t)(long offset);
>  
> diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-6.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-6.c
> index e4649283d10..1490f5336ca 100644
> --- a/gcc/testsuite/gcc.target/i386/indirect-thunk-6.c
> +++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-6.c
> @@ -1,5 +1,5 @@
>  /* { dg-do compile { target *-*-linux* } } */
> -/* { dg-options "-O2 -mno-indirect-branch-register -mno-indirect-branch-register -mno-indirect-branch-register -mfunction-return=keep -fpic -fno-plt -mindirect-branch=thunk" } */
> +/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -fpic -fno-plt -mindirect-branch=thunk" } */
>  
>  extern void bar (void);
>  
> diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.c
> index 0e19830de4d..a5fc4a23351 100644
> --- a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.c
> +++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.c
> @@ -1,5 +1,5 @@
>  /* { dg-do compile { target { *-*-linux* && { ! x32 } } } } */
> -/* { dg-options "-O2 -mno-indirect-branch-register -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fpic -fno-plt" } */
> +/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fpic -fno-plt" } */
>  
>  void bar (char *);
>  char buf[10];
> diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-10.c b/gcc/testsuite/gcc.target/i386/ret-thunk-10.c
> index e6fea84a4d9..6de9b8c9f4f 100644
> --- a/gcc/testsuite/gcc.target/i386/ret-thunk-10.c
> +++ b/gcc/testsuite/gcc.target/i386/ret-thunk-10.c
> @@ -1,5 +1,5 @@
>  /* { dg-do compile } */
> -/* { dg-options "-O2 -mno-indirect-branch-register -mno-indirect-branch-register -mfunction-return=thunk-inline -mindirect-branch=thunk -fno-pic" } */
> +/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=thunk-inline -mindirect-branch=thunk -fno-pic" } */
>  
>  extern void (*bar) (void);
>  
> diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-11.c b/gcc/testsuite/gcc.target/i386/ret-thunk-11.c
> index e239ec4542f..36598037541 100644
> --- a/gcc/testsuite/gcc.target/i386/ret-thunk-11.c
> +++ b/gcc/testsuite/gcc.target/i386/ret-thunk-11.c
> @@ -1,5 +1,5 @@
>  /* { dg-do compile } */
> -/* { dg-options "-O2 -mno-indirect-branch-register -mno-indirect-branch-register -mno-indirect-branch-register -mno-indirect-branch-register -mfunction-return=thunk-extern -mindirect-branch=thunk -fno-pic" } */
> +/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=thunk-extern -mindirect-branch=thunk -fno-pic" } */
>  
>  extern void (*bar) (void);
>  
> diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-12.c b/gcc/testsuite/gcc.target/i386/ret-thunk-12.c
> index fa3181303c9..5fb1a4de776 100644
> --- a/gcc/testsuite/gcc.target/i386/ret-thunk-12.c
> +++ b/gcc/testsuite/gcc.target/i386/ret-thunk-12.c
> @@ -1,5 +1,5 @@
>  /* { dg-do compile } */
> -/* { dg-options "-O2 -mno-indirect-branch-register -mno-indirect-branch-register -mno-indirect-branch-register -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */
> +/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */
>  
>  extern void (*bar) (void);
>  
> diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-15.c b/gcc/testsuite/gcc.target/i386/ret-thunk-15.c
> index 75e45e226b8..2038644aa59 100644
> --- a/gcc/testsuite/gcc.target/i386/ret-thunk-15.c
> +++ b/gcc/testsuite/gcc.target/i386/ret-thunk-15.c
> @@ -1,5 +1,5 @@
>  /* { dg-do compile } */
> -/* { dg-options "-O2 -mno-indirect-branch-register -mno-indirect-branch-register -mno-indirect-branch-register -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=keep -fno-pic" } */
> +/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=keep -fno-pic" } */
>  
>  extern void (*bar) (void);
>  
> diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-9.c b/gcc/testsuite/gcc.target/i386/ret-thunk-9.c
> index d1db41cc128..d34dd4e6dc7 100644
> --- a/gcc/testsuite/gcc.target/i386/ret-thunk-9.c
> +++ b/gcc/testsuite/gcc.target/i386/ret-thunk-9.c
> @@ -1,5 +1,5 @@
>  /* { dg-do compile } */
> -/* { dg-options "-O2 -mno-indirect-branch-register -mno-indirect-branch-register -mfunction-return=thunk -mindirect-branch=thunk -fno-pic" } */
> +/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=thunk -mindirect-branch=thunk -fno-pic" } */
>  
>  extern void (*bar) (void);
>  
> 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]