Ignore LLVM's blank lines.
authorAndrew Stubbs <ams@codesourcery.com>
Thu, 17 Jan 2019 12:36:49 +0000 (12:36 +0000)
committerAndrew Stubbs <ams@gcc.gnu.org>
Thu, 17 Jan 2019 12:36:49 +0000 (12:36 +0000)
The GCN toolchain must use the LLVM assembler and linker because there's no
binutils port.  The LLVM tools do not have the same diagnostic style as
binutils, so the "blank line(s) in output" tests are inappropriate (and very
noisy).

The LLVM tools also have different command line options, so it's not possible
to autodetect object formats in the same way.

This patch addresses both issues.

2019-01-17  Andrew Stubbs  <ams@codesourcery.com>

gcc/
* doc/sourcebuild.texi: Document dg-require-effective-target
llvm_binutils and offload_gcn.

gcc/testsuite/
* lib/file-format.exp (gcc_target_object_format): Handle AMD GCN.
* lib/gcc-dg.exp (gcc-dg-prune): Ignore blank lines from the LLVM
linker.
* lib/target-supports.exp (check_effective_target_llvm_binutils): New.

From-SVN: r268027

gcc/ChangeLog
gcc/doc/sourcebuild.texi
gcc/testsuite/ChangeLog
gcc/testsuite/lib/file-format.exp
gcc/testsuite/lib/gcc-dg.exp
gcc/testsuite/lib/target-supports.exp

index 2a4130e9193db4fdb280fcefd5ce0f4b92c4b07c..bf3146d3257b11aed9b27c1b33e3e83c96f8499c 100644 (file)
@@ -1,3 +1,8 @@
+2019-01-17  Andrew Stubbs  <ams@codesourcery.com>
+
+       * doc/sourcebuild.texi: Document dg-require-effective-target
+       llvm_binutils and offload_gcn.
+
 2019-01-17  Andrew Stubbs  <ams@codesourcery.com>
            Kwok Cheung Yeung  <kcy@codesourcery.com>
            Julian Brown  <julian@codesourcery.com>
index c93a516f9662830a03bf30448bb5de1d95ea6359..b2e6aa42cd71d61b258630152d5fcba407ec3bb1 100644 (file)
@@ -2265,6 +2265,9 @@ Target uses GNU @command{ld}.
 Target keeps null pointer checks, either due to the use of
 @option{-fno-delete-null-pointer-checks} or hardwired into the target.
 
+@item llvm_binutils
+Target is using an LLVM assembler and/or linker, instead of GNU Binutils.
+
 @item lto
 Compiler has been configured to support link-time optimization (LTO).
 
@@ -2289,6 +2292,9 @@ Target uses natural alignment (aligned to type size) for types of
 @item nonpic
 Target does not generate PIC by default.
 
+@item offload_gcn
+Target has been configured for OpenACC/OpenMP offloading on AMD GCN.
+
 @item pie_enabled
 Target generates PIE by default.
 
index e57b7ee5cea753dc4c9653969a77737c921e2d28..cf4aa8086cbcea46e32d2ccff3c8480f511c584e 100644 (file)
@@ -1,3 +1,10 @@
+2019-01-17  Andrew Stubbs  <ams@codesourcery.com>
+
+       * lib/file-format.exp (gcc_target_object_format): Handle AMD GCN.
+       * lib/gcc-dg.exp (gcc-dg-prune): Ignore blank lines from the LLVM
+       linker.
+       * lib/target-supports.exp (check_effective_target_llvm_binutils): New.
+
 2019-01-17  Andrew Stubbs  <ams@codesourcery.com>
 
        * gcc.dg/graphite/scop-19.c: Check pie_enabled.
index d2495ed5389afa08130336e51b35dfbd2e09a57e..25e0888f8b3ff3245cb428003d249dde1c68846e 100644 (file)
@@ -41,6 +41,9 @@ proc gcc_target_object_format { } {
     } elseif { [istarget *-*-aix*] } {
        # AIX doesn't necessarily have objdump, so hand-code it.
        set gcc_target_object_format_saved coff
+    } elseif { [istarget *-*-amdhsa*] } {
+       # AMD GCN uses LLVM objdump which is not CLI-compatible
+       set gcc_target_object_format_saved elf
     } else {
         set objdump_name [find_binutils_prog objdump]
         set open_file [open objfmtst.c w]
index 0b0afe2ea0caa877d12d2e9ed6f296ea6094664e..d4e2d97ee5b68e20bab1a8ffef0148c302b2806d 100644 (file)
@@ -363,7 +363,7 @@ proc gcc-dg-prune { system text } {
 
     # Complain about blank lines in the output (PR other/69006)
     global allow_blank_lines
-    if { !$allow_blank_lines } {
+    if { !$allow_blank_lines && ![check_effective_target_llvm_binutils]} {
        set num_blank_lines [llength [regexp -all -inline "\n\n" $text]]
        if { $num_blank_lines } {
            global testname_with_flags
index 03b5cd5e6b6d9bb83e8b3bb800309781acfe6e99..ec8c67f4f41fc2c3f3beedf7ff68f5dadfd02e25 100644 (file)
@@ -8779,6 +8779,14 @@ proc check_effective_target_offload_hsa { } {
     } "-foffload=hsa" ]
 }
 
+# Return 1 if the compiler has been configured with hsa offloading.
+
+proc check_effective_target_offload_gcn { } {
+    return [check_no_compiler_messages offload_gcn assembly {
+       int main () {return 0;}
+    } "-foffload=amdgcn-unknown-amdhsa" ]
+}
+
 # Return 1 if the target support -fprofile-update=atomic
 proc check_effective_target_profile_update_atomic {} {
     return [check_no_compiler_messages profile_update_atomic assembly {
@@ -9183,3 +9191,8 @@ foreach N {df} {
     }]
 }
 
+# Return 1 if this target uses an LLVM assembler and/or linker
+proc check_effective_target_llvm_binutils { } {
+    return [expr { [istarget amdgcn*-*-*]
+                  || [check_effective_target_offload_gcn] } ]
+}