public inbox for gcc@gcc.gnu.org
 help / color / mirror / Atom feed
From: Richard Biener <richard.guenther@gmail.com>
To: Krister Walfridsson <krister.walfridsson@gmail.com>
Cc: gcc@gcc.gnu.org
Subject: Re: Translation validation
Date: Wed, 14 Sep 2022 08:10:31 +0200	[thread overview]
Message-ID: <CAFiYyc2yfhk9M74wpj9-DmNdohSaL+ftH-VZXXJHXJbaWcfMBA@mail.gmail.com> (raw)
In-Reply-To: <Pine.NEB.4.64.2209132124440.8497@gateway.kwa>

On Tue, Sep 13, 2022 at 11:33 PM Krister Walfridsson via Gcc
<gcc@gcc.gnu.org> wrote:
>
> I have implemented a tool for translation validation (similar to Alive2
> for LLVM). The tool takes GIMPLE IR for two functions and checks that the
> second is a refinement of the first. That is,
>   * The returned value is the same for both functions for all input that
>     does not invoke undefined behavior.
>   * The second does not have any undefined behavior that the first does not
>     have.
>   * The global memory is the same after invoking both functions with input
>     that does not invoke undefined behavior.
>
> The implementation is rather limited, but I have already found a few bugs
> in GCC (PR 106513, 106523, 106744, 106883, and 106884) by running the tool
> on the c-c++-common, gcc.c-torture, gcc.dg, and gcc.misc-tests test
> suites.
>
> The tool is available at https://github.com/kristerw/pysmtgcc and there
> is some additional information in the blog post
> https://kristerw.github.io/2022/09/13/translation-validation/

Nice!

Note that the folding/peephole optimizations done early can be avoided
when you separate opportunities in the source to multiple statements,
like change

  int a, b;
  a = b + 1 - b;

to

 a = b + 1;
 a = a - b;

note that parts of the folding optimizations are shared between GENERIC
and GIMPLE (those generated from match.pd), so those will be exercised.
Fully exercising and verifying the fold-const.cc only optimizations which
happen on GENERIC only is indeed going to be difficult.

Another way to avoid some of the pre-SSA optimizations is to feed the
plugin with input from the GIMPLE frontend.  Look at
gcc/testsuite/gcc.dg/gimplefe-*.c for examples, IL can be dumped
roughly in a format suitable as GIMPLE frontend input by dumping
with -fdump-tree-<opt>-gimple (but note all type, global variable and function
declarations are missing ...)

Richard.

>
>     /Krister

  reply	other threads:[~2022-09-14  6:10 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-09-13 21:31 Krister Walfridsson
2022-09-14  6:10 ` Richard Biener [this message]
2022-09-20 23:40   ` Krister Walfridsson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAFiYyc2yfhk9M74wpj9-DmNdohSaL+ftH-VZXXJHXJbaWcfMBA@mail.gmail.com \
    --to=richard.guenther@gmail.com \
    --cc=gcc@gcc.gnu.org \
    --cc=krister.walfridsson@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).