>> 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?

Thanks,
Wei.

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 } */
+/* { 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" } } */

Reply via email to