> On Thu, 21 May 2015, H.J. Lu wrote: > > > On Thu, May 21, 2015 at 12:32 PM, Alexander Monakov <amona...@ispras.ru> > > wrote: > > > On Thu, 21 May 2015, H.J. Lu wrote: > > >> On Thu, May 21, 2015 at 12:06 PM, Richard Henderson <r...@redhat.com> > > >> wrote: > > >> > On 05/21/2015 12:01 PM, H.J. Lu wrote: > > >> >> +++ b/gcc/testsuite/gcc.target/i386/pr66232-1.c > > >> >> @@ -0,0 +1,13 @@ > > >> >> +/* { dg-do compile { target *-*-linux* } } */ > > >> >> +/* { dg-options "-O2 -fpic -fno-plt" } */ > > >> >> + > > >> >> +extern void bar (void); > > >> >> + > > >> >> +void > > >> >> +foo (void) > > >> >> +{ > > >> >> + bar (); > > >> >> +} > > >> >> + > > >> >> +/* { dg-final { scan-assembler "jmp\[ \t\]*.bar@GOTPCREL" { target { > > >> >> ! ia32 } } } } */ > > >> >> +/* { dg-final { scan-assembler "call\[ \t\]*.bar@GOT\\(" { target > > >> >> ia32 } } } */ > > >> > > > >> > Do you really want to check for no tail call for ia32 here? > > >> > That's really just a missed optimization, surely. > > >> > > > >> > > > >> > > >> I'd like to keep it. When it is fixed, we can update it. I tried: > > >> > > >> https://gcc.gnu.org/ml/gcc-patches/2015-05/msg00230.html > > >> > > >> and got > > >> > > >> call __x86.get_pc_thunk.ax > > >> addl $_GLOBAL_OFFSET_TABLE_, %eax > > >> subl $28, %esp > > >> .cfi_def_cfa_offset 32 > > >> movl bar@GOT(%eax), %eax > > >> movl %eax, 12(%esp) > > >> addl $28, %esp > > >> .cfi_def_cfa_offset 4 > > >> jmp *%eax > > >> > > >> This is very odd code, comparing against > > > > > > To avoid that, you need the CLOBBERED_REGS patch too: > > > https://gcc.gnu.org/ml/gcc-patches/2015-05/msg00227.html > > > > > > > Should both patches be needed for ia32 tail call? > > I don't really understand the question. The first patch (that you've linked) > is required to produce a tail call, the second patch (that I've linked) helps > to produce clean code. To match the scan-assembler test as written in your > testcase, both patches are needed.
I have pushed those patches and updated the scan patterns to match memory-indirect jump rather than call. Alexander