On Thu, Jan 26, 2017 at 5:52 PM, David Malcolm <dmalc...@redhat.com> wrote:
> The "internals" documentation has a "Testsuites" chapter; this patch
> adds some notes to it, describing the __GIMPLE and __RTL extensions
> to the C frontend.
>
> Builds; passed visual inspection of .info, .html, .pdf. and .dvi.
>
> OK for trunk?
>
> gcc/ChangeLog:
>         * doc/sourcebuild.texi (Testsuites): Add "GIMPLE Tests" and
>         "RTL Tests" to menu.
>         (GIMPLE Tests): New node.
>         (RTL Tests): New node.
> ---
>  gcc/doc/sourcebuild.texi | 89 
> ++++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 89 insertions(+)
>
> diff --git a/gcc/doc/sourcebuild.texi b/gcc/doc/sourcebuild.texi
> index 292a3c7..6c047288 100644
> --- a/gcc/doc/sourcebuild.texi
> +++ b/gcc/doc/sourcebuild.texi
> @@ -863,6 +863,8 @@ here; FIXME: document the others.
>  * profopt Testing:: Support for testing profile-directed optimizations.
>  * compat Testing::  Support for testing binary compatibility.
>  * Torture Tests::   Support for torture testing using multiple options.
> +* GIMPLE Tests::    Support for testing GIMPLE passes.
> +* RTL Tests::       Support for testing RTL passes.
>  @end menu
>
>  @node Test Idioms
> @@ -2931,3 +2933,90 @@ set ADDITIONAL_TORTURE_OPTIONS  [list \
>    @{ -O2 -ftree-loop-linear @} \
>    @{ -O2 -fpeel-loops @} ]
>  @end smallexample
> +
> +@node GIMPLE Tests
> +@section Support for testing GIMPLE passes
> +
> +As of gcc 7, C functions can be tagged with @code{__GIMPLE} to indicate
> +that the function body will be RTL, rather than C.  The compiler requires the

GIMPLE, not RTL

> +option @option{-fgimple} to enable this functionality.  For example:
> +
> +@smallexample
> +/* @{ dg-do compile @} */
> +/* @{ dg-options "-O -fgimple" @} */
> +
> +void __GIMPLE (startwith ("dse2")) foo ()
> +@{
> +  int a;
> +
> +bb_2:
> +  if (a > 4)
> +    goto bb_3;
> +  else
> +    goto bb_4;
> +
> +bb_3:
> +  a_2 = 10;
> +  goto bb_5;
> +
> +bb_4:
> +  a_3 = 20;
> +
> +bb_5:
> +  a_1 = __PHI (bb_3: a_2, bb_4: a_3);
> +  a_4 = a_1 + 4;
> +
> +  return;
> +@}
> +@end smallexample
> +
> +The @code{startwith} argument indicates at which pass to begin.
> +
> +Example DejaGnu tests of RTL can be seen in the source tree at
> +@file{gcc/testsuite/gcc.dg/gimplefe-*.c}.
> +
> +The @code{__GIMPLE} parser is integrated with the C tokenizer and
> +preprocessor, so it should be possible to use macros to build out
> +test coverage.

Can you add a sentence "A dump modifier -gimple exists to make tree dumps
look more closely to valid GIMPLE input."  or something along this line?

Ok with these changes (and thanks for finding a proper place for some docs)

Richard.

> +
> +@node RTL Tests
> +@section Support for testing RTL passes
> +
> +As of gcc 7, C functions can be tagged with @code{__RTL} to indicate that the
> +function body will be RTL, rather than C.  For example:
> +
> +@smallexample
> +double __RTL (startwith ("ira")) test (struct foo *f, const struct bar *b)
> +@{
> +  (function "test"
> +     [...snip; various directives go in here...]
> +  ) ;; function "test"
> +@}
> +@end smallexample
> +
> +The @code{startwith} argument indicates at which pass to begin.
> +
> +The parser expects the RTL body to be in the format emitted by this
> +dumping function:
> +
> +@smallexample
> +DEBUG_FUNCTION void
> +print_rtx_function (FILE *outfile, function *fn, bool compact);
> +@end smallexample
> +
> +when "compact" is true.  So you can capture RTL in the correct format
> +from the debugger using:
> +
> +@smallexample
> +(gdb) print_rtx_function (stderr, cfun, true);
> +@end smallexample
> +
> +and copy and paste the output into the body of the C function.
> +
> +Example DejaGnu tests of RTL can be seen in the source tree under
> +@file{gcc/testsuite/gcc.dg/rtl}.
> +
> +The @code{__RTL} parser is not integrated with the C tokenizer or
> +preprocessor, and works simply by reading the relevant lines within
> +the braces.  In particular, the RTL body must be on separate lines from
> +the enclosing braces, and the preprocessor is not usable within it.
> --
> 1.8.5.3
>

Reply via email to