tighten funcspec regexps

Uros Bizjak ubizjak@gmail.com
Wed Mar 24 06:55:35 GMT 2021


On Wed, Mar 24, 2021 at 7:51 AM Alexandre Oliva <oliva@adacore.com> wrote:
>
>
> In -mcmodel=large, callee symbols are pulled ahead of the call insns.
>
> The patterns in funcspec-[12].c tests in gcc.target/i386 match even
> line breaks between 'call' and a function symbol expected to be
> called, however, so it ends up unexpectedly matching a previous,
> unrelated indirect call, up to the insn that loads the address of the
> intended callee to a register, for all but the first callee, that
> doesn't have a call insn before it.
>
> All of these apparent passes are false positives.  We are NOT
> generating the expected call insns.
>
> This patch fixes only the patterns, so that they won't trigger false
> positives any more.  There are several dozens of other tests that fail
> with -mcmodel=large for similar reasons, but I'm still not sure about
> how to deal with them.  I see no point in holding up this small
> improvement over the lack of a larger solution of a different problem,
> though.
>
> Regstrapped on x86_64-linux-gnu and cross-tested for x86_64-vx7r2 along
> with other patches, mostly for the testsuite.  Ok to install?
>
>
> for  gcc/testsuite/ChangeLog
>
>         * gcc.target/i386/funcspec-2.c: Tighten regexps to avoid false
>         positives with -mcmodel=large.
>         * gcc.target/i386/funcspec-3.c: Likewise.

OK.

Thanks,
Uros.

> ---
>  gcc/testsuite/gcc.target/i386/funcspec-2.c |   16 ++++++++--------
>  gcc/testsuite/gcc.target/i386/funcspec-3.c |    6 +++---
>  2 files changed, 11 insertions(+), 11 deletions(-)
>
> diff --git a/gcc/testsuite/gcc.target/i386/funcspec-2.c b/gcc/testsuite/gcc.target/i386/funcspec-2.c
> index d607fbc79c91d..147f62321fd77 100644
> --- a/gcc/testsuite/gcc.target/i386/funcspec-2.c
> +++ b/gcc/testsuite/gcc.target/i386/funcspec-2.c
> @@ -89,11 +89,11 @@ int main ()
>  /* { dg-final { scan-assembler "vfnmaddsd" } } */
>  /* { dg-final { scan-assembler "vfnmsubss" } } */
>  /* { dg-final { scan-assembler "vfnmsubsd" } } */
> -/* { dg-final { scan-assembler "call\t(.*)flt_mul_add" } } */
> -/* { dg-final { scan-assembler "call\t(.*)flt_mul_sub" } } */
> -/* { dg-final { scan-assembler "call\t(.*)flt_neg_mul_add" } } */
> -/* { dg-final { scan-assembler "call\t(.*)flt_neg_mul_sub" } } */
> -/* { dg-final { scan-assembler "call\t(.*)dbl_mul_add" } } */
> -/* { dg-final { scan-assembler "call\t(.*)dbl_mul_sub" } } */
> -/* { dg-final { scan-assembler "call\t(.*)dbl_neg_mul_add" } } */
> -/* { dg-final { scan-assembler "call\t(.*)dbl_neg_mul_sub" } } */
> +/* { dg-final { scan-assembler "call\t(\[^\n\r\]*)flt_mul_add" } } */
> +/* { dg-final { scan-assembler "call\t(\[^\n\r\]*)flt_mul_sub" } } */
> +/* { dg-final { scan-assembler "call\t(\[^\n\r\]*)flt_neg_mul_add" } } */
> +/* { dg-final { scan-assembler "call\t(\[^\n\r\]*)flt_neg_mul_sub" } } */
> +/* { dg-final { scan-assembler "call\t(\[^\n\r\]*)dbl_mul_add" } } */
> +/* { dg-final { scan-assembler "call\t(\[^\n\r\]*)dbl_mul_sub" } } */
> +/* { dg-final { scan-assembler "call\t(\[^\n\r\]*)dbl_neg_mul_add" } } */
> +/* { dg-final { scan-assembler "call\t(\[^\n\r\]*)dbl_neg_mul_sub" } } */
> diff --git a/gcc/testsuite/gcc.target/i386/funcspec-3.c b/gcc/testsuite/gcc.target/i386/funcspec-3.c
> index 613a1a0fb9521..8fb425b925add 100644
> --- a/gcc/testsuite/gcc.target/i386/funcspec-3.c
> +++ b/gcc/testsuite/gcc.target/i386/funcspec-3.c
> @@ -63,6 +63,6 @@ int main ()
>  /* { dg-final { scan-assembler "popcntl" { target { ! *-*-darwin* } } } } */
>  /* { dg-final { scan-assembler "popcntq" { target { ! *-*-darwin* } } } } */
>  /* { dg-final { scan-assembler-times "popcnt" 2 { target *-*-darwin* } } } */
> -/* { dg-final { scan-assembler "call\t(.*)sse4a_pop_i" } } */
> -/* { dg-final { scan-assembler "call\t(.*)sse42_pop_l" } } */
> -/* { dg-final { scan-assembler "call\t(.*)popcountdi2" } } */
> +/* { dg-final { scan-assembler "call\t(\[^\n\r\]*)sse4a_pop_i" } } */
> +/* { dg-final { scan-assembler "call\t(\[^\n\r\]*)sse42_pop_l" } } */
> +/* { dg-final { scan-assembler "call\t(\[^\n\r\]*)popcountdi2" } } */
>
>
> --
> Alexandre Oliva, happy hacker  https://FSFLA.org/blogs/lxo/
>    Free Software Activist         GNU Toolchain Engineer
>         Vim, Vi, Voltei pro Emacs -- GNUlius Caesar


More information about the Gcc-patches mailing list