This extends the scan-ltrans-tree* helpers to create RTL variants. This is needed to check the behaviour of an RTL pass under LTO.
In particular it's used by a later patch in the series to check that RTL unrolling is applied under LTO. Tested as a series on aarch64-linux-gnu, OK for trunk? gcc/ChangeLog: PR libstdc++/116140 * doc/sourcebuild.texi: Document ltrans-rtl value of kind for scan-<kind>-dump*. gcc/testsuite/ChangeLog: PR libstdc++/116140 * lib/scanltranstree.exp (scan-ltrans-rtl-dump): New. (scan-ltrans-rtl-dump-times): New. (scan-ltrans-rtl-dump-not): New. (scan-ltrans-rtl-dump-dem): New. (scan-ltrans-rtl-dump-dem-not): New. --- gcc/doc/sourcebuild.texi | 4 +- gcc/testsuite/lib/scanltranstree.exp | 123 +++++++++++++++++++++++++++ 2 files changed, 125 insertions(+), 2 deletions(-)
diff --git a/gcc/doc/sourcebuild.texi b/gcc/doc/sourcebuild.texi index d5c48e67b71..827fe9ce66c 100644 --- a/gcc/doc/sourcebuild.texi +++ b/gcc/doc/sourcebuild.texi @@ -3615,8 +3615,8 @@ stands for zero or more unmatched lines; the whitespace after @subsubsection Scan optimization dump files These commands are available for @var{kind} of @code{tree}, @code{ltrans-tree}, -@code{offload-tree}, @code{rtl}, @code{offload-rtl}, @code{ipa}, -@code{offload-ipa}, and @code{wpa-ipa}. +@code{offload-tree}, @code{rtl}, @code{ltrans-rtl}, @code{offload-rtl}, +@code{ipa}, @code{offload-ipa}, and @code{wpa-ipa}. @table @code @item scan-@var{kind}-dump @var{regex} @var{suffix} [@{ target/xfail @var{selector} @}] diff --git a/gcc/testsuite/lib/scanltranstree.exp b/gcc/testsuite/lib/scanltranstree.exp index 79f05f0ffed..d7e27ad364a 100644 --- a/gcc/testsuite/lib/scanltranstree.exp +++ b/gcc/testsuite/lib/scanltranstree.exp @@ -146,3 +146,126 @@ proc scan-ltrans-tree-dump-dem-not { args } { ".ltrans0.ltrans" } } + +# Utility for scanning ltrans RTL dumps, invoked via dg-final. +# Call pass if pattern is present, otherwise fail. +# +# Argument 0 is the regexp to match +# Argument 1 is the name of the dumped rtl pass +# Argument 2 handles expected failures and the like +proc scan-ltrans-rtl-dump { args } { + if { [llength $args] < 2 } { + error "scan-ltrans-rtl-dump: too few arguments" + return + } + if { [llength $args] > 3 } { + error "scan-ltrans-rtl-dump: too many arguments" + return + } + if { [llength $args] >= 3 } { + scan-dump "ltrans-rtl" [lindex $args 0] \ + "\[0-9\]\[0-9\]\[0-9\]r.[lindex $args 1]" ".ltrans0.ltrans" \ + [lindex $args 2] + } else { + scan-dump "ltrans-rtl" [lindex $args 0] \ + "\[0-9\]\[0-9\]\[0-9\]r.[lindex $args 1]" ".ltrans0.ltrans" + } +} + +# Call pass if pattern is present given number of times, otherwise fail. +# Argument 0 is the regexp to match +# Argument 1 is number of times the regexp must be found +# Argument 2 is the name of the dumped rtl pass +# Argument 3 handles expected failures and the like +proc scan-ltrans-rtl-dump-times { args } { + if { [llength $args] < 3 } { + error "scan-ltrans-rtl-dump-times: too few arguments" + return + } + if { [llength $args] > 4 } { + error "scan-ltrans-rtl-dump-times: too many arguments" + return + } + if { [llength $args] >= 4 } { + scan-dump-times "ltrans-rtl" [lindex $args 0] [lindex $args 1] \ + "\[0-9\]\[0-9\]\[0-9\]r.[lindex $args 2]" \ + ".ltrans0.ltrans" [lindex $args 3] + } else { + scan-dump-times "ltrans-rtl" [lindex $args 0] [lindex $args 1] \ + "\[0-9\]\[0-9\]\[0-9\]r.[lindex $args 2]" ".ltrans0.ltrans" + } +} + +# Call pass if pattern is not present, otherwise fail. +# +# Argument 0 is the regexp to match +# Argument 1 is the name of the dumped rtl pass +# Argument 2 handles expected failures and the like +proc scan-ltrans-rtl-dump-not { args } { + if { [llength $args] < 2 } { + error "scan-ltrans-rtl-dump-not: too few arguments" + return + } + if { [llength $args] > 3 } { + error "scan-ltrans-rtl-dump-not: too many arguments" + return + } + if { [llength $args] >= 3 } { + scan-dump-not "ltrans-rtl" [lindex $args 0] \ + "\[0-9\]\[0-9\]\[0-9\]r.[lindex $args 1]" ".ltrans0.ltrans" \ + [lindex $args 2] + } else { + scan-dump-not "ltrans-rtl" [lindex $args 0] \ + "\[0-9\]\[0-9\]\[0-9\]r.[lindex $args 1]" ".ltrans0.ltrans" + } +} + +# Utility for scanning demangled compiler result, invoked via dg-final. +# Call pass if pattern is present, otherwise fail. +# +# Argument 0 is the regexp to match +# Argument 1 is the name of the dumped rtl pass +# Argument 2 handles expected failures and the like +proc scan-ltrans-rtl-dump-dem { args } { + if { [llength $args] < 2 } { + error "scan-ltrans-rtl-dump-dem: too few arguments" + return + } + if { [llength $args] > 3 } { + error "scan-ltrans-rtl-dump-dem: too many arguments" + return + } + if { [llength $args] >= 3 } { + scan-dump-dem "ltrans-rtl" [lindex $args 0] \ + "\[0-9\]\[0-9\]\[0-9\]r.[lindex $args 1]" ".ltrans0.ltrans" \ + [lindex $args 2] + } else { + scan-dump-dem "ltrans-rtl" [lindex $args 0] \ + "\[0-9\]\[0-9\]\[0-9\]r.[lindex $args 1]" ".ltrans0.ltrans" + } +} + +# Call pass if demangled pattern is not present, otherwise fail. +# +# Argument 0 is the regexp to match +# Argument 1 is the name of the dumped rtl pass +# Argument 2 handles expected failures and the like +proc scan-ltrans-rtl-dump-dem-not { args } { + if { [llength $args] < 2 } { + error "scan-ltrans-rtl-dump-dem-not: too few arguments" + return + } + if { [llength $args] > 3 } { + error "scan-ltrans-rtl-dump-dem-not: too many arguments" + return + } + if { [llength $args] >= 3 } { + scan-dump-dem-not "ltrans-rtl" [lindex $args 0] \ + "\[0-9\]\[0-9\]\[0-9\]r.[lindex $args 1]" \ + ".ltrans0.ltrans" [lindex $args 2] + } else { + scan-dump-dem-not "ltrans-rtl" [lindex $args 0] \ + "\[0-9\]\[0-9\]\[0-9\]r.[lindex $args 1]" \ + ".ltrans0.ltrans" + } +}