This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH, PR58066] preferred_stack_boundary update for tls expanded call
- From: Wei Mi <wmi at google dot com>
- To: Rainer Orth <ro at cebitec dot uni-bielefeld dot de>
- Cc: Dominique Dhumieres <dominiq at lps dot ens dot fr>, GCC Patches <gcc-patches at gcc dot gnu dot org>, iains at gcc dot gnu dot org, Uros Bizjak <ubizjak at gmail dot com>
- Date: Mon, 12 May 2014 10:38:19 -0700
- Subject: Re: [PATCH, PR58066] preferred_stack_boundary update for tls expanded call
- Authentication-results: sourceware.org; auth=none
- References: <20140510101615 dot 78EB7103 at mailhost dot lps dot ens dot fr> <yddzjip21b0 dot fsf at CeBiTec dot Uni-Bielefeld dot DE> <CA+4CFy4m-hwwhq=_aj+-8MhNf03_DRy6a_FpaabWY_pfXTErJw at mail dot gmail dot com> <ydd8uq7kpqv dot fsf at lokon dot CeBiTec dot Uni-Bielefeld dot DE>
>> 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" } } */