diff options
author | Alexandre Oliva <oliva@adacore.com> | 2021-03-24 05:44:36 -0300 |
---|---|---|
committer | Alexandre Oliva <oliva@gnu.org> | 2021-03-24 05:44:36 -0300 |
commit | d42ab6885a46d73903643c24a4f65fbf28dd0ec2 (patch) | |
tree | e178b5698fab10916a5a29baa33e7990539be1af /gcc | |
parent | 4be312862dec5c8e49c76249dd5aed220c72039e (diff) | |
download | gcc-d42ab6885a46d73903643c24a4f65fbf28dd0ec2.zip gcc-d42ab6885a46d73903643c24a4f65fbf28dd0ec2.tar.gz gcc-d42ab6885a46d73903643c24a4f65fbf28dd0ec2.tar.bz2 |
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.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/testsuite/gcc.target/i386/funcspec-2.c | 16 | ||||
-rw-r--r-- | 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 d607fbc..147f623 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 613a1a0..8fb425b 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" } } */ |