Add dg test for matching function bodies
authorRichard Sandiford <richard.sandiford@arm.com>
Mon, 29 Jul 2019 08:46:46 +0000 (08:46 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Mon, 29 Jul 2019 08:46:46 +0000 (08:46 +0000)
commit4d706ff86ea86868615558e92407674a4f4b4af9
tree74dec2539f4b43e34c43b95439896bec5b92e6ab
parent708cc6132bb374e2c5bd1c4f43f9fe7306d20970
Add dg test for matching function bodies

There isn't a 1:1 mapping from SVE intrinsics to SVE instructions,
but the intrinsics are still close enough to the instructions for
there to be a specific preferred sequence (or sometimes choice of
preferred sequences) for a given combination of operands.  Sometimes
these sequences will be one instruction, sometimes they'll be several.

I therefore wanted a convenient way of matching the exact assembly
implementation of a given function.  It's possible to do that using
single scan-assembler lines, but:

(a) they become hard to read for multiline matches
(b) the PASS/FAIL lines tend to be overly long
(c) it's useful to have a single place that skips over uninteresting
    lines, such as entry block labels and .cfi_* directives, without
    being overly broad

This patch therefore adds a new check-function-bodies dg-final test
that looks for specially-formatted comments.  As a demo, the patch
converts the SVE vec_init tests to use the new harness instead of
scan-assembler.

The regexps in parse_function_bodies are fairly general, but might
still need to be extended in future for targets like Darwin or AIX.

2019-07-29  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
* doc/sourcebuild.texi (check-function-bodies): Document.

gcc/testsuite/
* lib/scanasm.exp (parse_function_bodies, check_function_body)
(check-function-bodies): New procedures.
* gcc.target/aarch64/sve/init_1.c: Use check-function-bodies
instead of scan-assembler.
* gcc.target/aarch64/sve/init_2.c: Likewise.
* gcc.target/aarch64/sve/init_3.c: Likewise.
* gcc.target/aarch64/sve/init_4.c: Likewise.
* gcc.target/aarch64/sve/init_5.c: Likewise.
* gcc.target/aarch64/sve/init_6.c: Likewise.
* gcc.target/aarch64/sve/init_7.c: Likewise.
* gcc.target/aarch64/sve/init_8.c: Likewise.
* gcc.target/aarch64/sve/init_9.c: Likewise.
* gcc.target/aarch64/sve/init_10.c: Likewise.
* gcc.target/aarch64/sve/init_11.c: Likewise.
* gcc.target/aarch64/sve/init_12.c: Likewise.

From-SVN: r273869
16 files changed:
gcc/ChangeLog
gcc/doc/sourcebuild.texi
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/aarch64/sve/init_1.c
gcc/testsuite/gcc.target/aarch64/sve/init_10.c
gcc/testsuite/gcc.target/aarch64/sve/init_11.c
gcc/testsuite/gcc.target/aarch64/sve/init_12.c
gcc/testsuite/gcc.target/aarch64/sve/init_2.c
gcc/testsuite/gcc.target/aarch64/sve/init_3.c
gcc/testsuite/gcc.target/aarch64/sve/init_4.c
gcc/testsuite/gcc.target/aarch64/sve/init_5.c
gcc/testsuite/gcc.target/aarch64/sve/init_6.c
gcc/testsuite/gcc.target/aarch64/sve/init_7.c
gcc/testsuite/gcc.target/aarch64/sve/init_8.c
gcc/testsuite/gcc.target/aarch64/sve/init_9.c
gcc/testsuite/lib/scanasm.exp