On Mon, May 12, 2014 at 7:38 PM, Wei Mi <w...@google.com> wrote: >>> Here is a patch for the test. It contains two changes: >>> 1. For emutls, there will be an explicit call generated at expand >>> pass, and no stack adjustment is needed. So add /* { >>> dg-require-effective-target tls_native } */ in the test. >>> 2. Replace cfi_def_cfa_offset with insn sequence check. >>> >>> Is it ok? >> >> No, the test FAILs for 32-bit i386-pc-solaris2.11 with Sun as/ld: >> >> FAIL: gcc.target/i386/pr58066.c scan-assembler >> sub[^\r\n]*8[^\r\n]*sp.*call[^\r\n]*__tls_get_addr.*sub[^\r\n]*8[^\r\n]*sp.*call[^\r\n]*__tls_get_addr >> >> The TLS code sequence is different here: >> >> subl $8, %esp >> leal ccc1@tlsgd(,%ebx,1), %eax >> call ccc1@tlsgdplt >> >> I fear this insn scanning is going to be extremely fragile. >> >> Rainer > > Thanks for trying the testcase. rtl scanning will be slightly better > than assembly scanning. So how about this one?
This is OK, with a small effective-target addition, as shown below. Thanks, Uros. > Index: testsuite/gcc.target/i386/pr58066.c > =================================================================== > --- testsuite/gcc.target/i386/pr58066.c (revision 210222) > +++ testsuite/gcc.target/i386/pr58066.c (working copy) > @@ -1,5 +1,6 @@ > /* { dg-do compile } */ > -/* { dg-options "-fPIC -O2" } */ > +/* { dg-require-effective-target tls_native } */ Please also add /* { dg-require-effective-target fpic } */ > +/* { dg-options "-fPIC -fomit-frame-pointer -O2 -fdump-rtl-final" } */ > > /* Check whether the stack frame starting addresses of tls expanded calls > in foo and goo are 16bytes aligned. */ > @@ -15,4 +16,6 @@ void* goo() > return &ccc2; > } > > -/* { dg-final { scan-assembler-times ".cfi_def_cfa_offset 16" 2 } } */ > +/* { dg-final { scan-rtl-dump "Function > foo.*set\[^\r\n\]*sp\\)\[\r\n\]\[^\r\n\]*plus\[^\r\n\]*sp\\)\[\r\n\]\[^\r\n\]*const_int > -8.*UNSPEC_TLS.*Function goo" "final" } } */ > +/* { dg-final { scan-rtl-dump "Function > goo.*set\[^\r\n\]*sp\\)\[\r\n\]\[^\r\n\]*plus\[^\r\n\]*sp\\)\[\r\n\]\[^\r\n\]*const_int > -8.*UNSPEC_TLS" "final" } } */ > +/* { dg-final { cleanup-rtl-dump "final" } } */