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, PR58066] preferred_stack_boundary update for tls expanded call


On Mon, May 12, 2014 at 7:38 PM, Wei Mi <wmi@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" } } */


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