From: Alexandre Oliva Date: Wed, 24 Mar 2021 08:44:36 +0000 (-0300) Subject: tighten funcspec regexps X-Git-Tag: basepoints/gcc-12~446 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d42ab6885a46d73903643c24a4f65fbf28dd0ec2;p=thirdparty%2Fgcc.git tighten funcspec regexps 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. 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. --- diff --git a/gcc/testsuite/gcc.target/i386/funcspec-2.c b/gcc/testsuite/gcc.target/i386/funcspec-2.c index d607fbc79c91..147f62321fd7 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 613a1a0fb952..8fb425b925ad 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" } } */