1From f12acc6a383546d48da3bdfb2f25ca2adb7976d7 Mon Sep 17 00:00:00 2001 2From: Richard Purdie <richard.purdie@linuxfoundation.org> 3Date: Sun, 13 Aug 2023 10:24:05 +0100 4Subject: [PATCH] gcc testsuite tweaks for mips/OE 5 6Disable loongson-mmi runtine, qemu doesn't appear to fully support them even if some 7of the instruction decoding is there. 8 9Also disable MSA mips runtime extensions. For some reason qemu appears to accept the test 10code when it shouldn't. Our selected MIPS cpu for QEMU doesn't support them. 11 12MIPS is unusual in the gcc testsuite as it uses EFFECTIVE_TARGETS and loops 13multiple times through the vector testsuite. In the case of the two above, we can 14compile/link them but not run them. Even with the runtime disabled, if the code 15marks it as a runtime test, it will elevate itself to that. Setting the default 16target to compile therefore isn't enough. 17 18Therefore add code to downgrade runtime tests to link tests if the hardware 19support isn't there to run them. This avoids thousands of test failures. To do 20this we have to hook downgrade code into the main test runner. 21 22Enable that downgrading for other cases where hardware to run vector extensions is 23unavailable to remove test failures on other architectures too. 24 25Also, for gcc.target tests, add checks on wheter loongson or msa code can 26be run before trying that, allowing downgrading of tests there to work too. 27 28Upstream-Status: Pending 29[Parts of the patch may be able to be split off and acceptable to upstream with 30discussion. Need to investigate why qemu-user passes the 'bad' instructions'] 31 32Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org> 33--- 34 gcc/testsuite/gcc.target/mips/mips.exp | 16 +++++++++ 35 gcc/testsuite/lib/gcc-dg.exp | 11 +++++++ 36 gcc/testsuite/lib/target-supports.exp | 45 ++++++++------------------ 37 3 files changed, 41 insertions(+), 31 deletions(-) 38 39diff --git a/gcc/testsuite/gcc.target/mips/mips.exp b/gcc/testsuite/gcc.target/mips/mips.exp 40index 15d574202d3..2cef9709774 100644 41--- a/gcc/testsuite/gcc.target/mips/mips.exp 42+++ b/gcc/testsuite/gcc.target/mips/mips.exp 43@@ -709,7 +709,23 @@ proc mips_first_unsupported_option { upstatus } { 44 global mips_option_tests 45 upvar $upstatus status 46 47+ if { [mips_have_test_option_p status "-mmsa"] } { 48+ verbose -log "Found -mmsa" 49+ if { ![check_mips_msa_hw_available] } { 50+ verbose -log "No MSA avail" 51+ return "-mmsa" 52+ } 53+ } 54+ if { [mips_have_test_option_p status "-mloongson-mmi"] } { 55+ verbose -log "Found -mloonson-mmi" 56+ if { ![check_mips_loongson_mmi_hw_available] } { 57+ verbose -log "No MMI avail" 58+ return "-mloonson-mmi" 59+ } 60+ } 61+ 62 foreach { option code } [array get mips_option_tests] { 63+ 64 if { [mips_have_test_option_p status $option] } { 65 regsub -all "\n" $code "\\n\\\n" asm 66 # Use check_runtime from target-supports.exp, which caches 67diff --git a/gcc/testsuite/lib/gcc-dg.exp b/gcc/testsuite/lib/gcc-dg.exp 68index 9d79b9402e9..e0e5cbb1af8 100644 69--- a/gcc/testsuite/lib/gcc-dg.exp 70+++ b/gcc/testsuite/lib/gcc-dg.exp 71@@ -240,9 +240,20 @@ proc schedule-cleanups { opts } { 72 73 proc gcc-dg-test-1 { target_compile prog do_what extra_tool_flags } { 74 # Set up the compiler flags, based on what we're going to do. 75+ global do-what-limit 76 77 set options [list] 78 79+ if [info exists do-what-limit] then { 80+ # Demote run tests to $do-what-limit if set 81+ switch $do_what { 82+ run { 83+ set do_what ${do-what-limit} 84+ set dg-do-what ${do-what-limit} 85+ } 86+ } 87+ } 88+ 89 switch $do_what { 90 "preprocess" { 91 set compile_type "preprocess" 92diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp 93index 40f71e9ed8b..10e267fa16d 100644 94--- a/gcc/testsuite/lib/target-supports.exp 95+++ b/gcc/testsuite/lib/target-supports.exp 96@@ -2155,14 +2155,7 @@ proc check_mips_loongson_mmi_hw_available { } { 97 if { !([istarget mips*-*-*]) } { 98 expr 0 99 } else { 100- check_runtime_nocache mips_loongson_mmi_hw_available { 101- #include <loongson-mmiintrin.h> 102- int main() 103- { 104- asm volatile ("paddw $f2,$f4,$f6"); 105- return 0; 106- } 107- } "-mloongson-mmi" 108+ expr 0 109 } 110 }] 111 } 112@@ -2176,29 +2169,7 @@ proc check_mips_msa_hw_available { } { 113 if { !([istarget mips*-*-*]) } { 114 expr 0 115 } else { 116- check_runtime_nocache mips_msa_hw_available { 117- #if !defined(__mips_msa) 118- #error "MSA NOT AVAIL" 119- #else 120- #if !(((__mips == 64) || (__mips == 32)) && (__mips_isa_rev >= 2)) 121- #error "MSA NOT AVAIL FOR ISA REV < 2" 122- #endif 123- #if !defined(__mips_hard_float) 124- #error "MSA HARD_FLOAT REQUIRED" 125- #endif 126- #if __mips_fpr != 64 127- #error "MSA 64-bit FPR REQUIRED" 128- #endif 129- #include <msa.h> 130- 131- int main() 132- { 133- v8i16 v = __builtin_msa_ldi_h (0); 134- v[0] = 0; 135- return v[0]; 136- } 137- #endif 138- } "-mmsa" 139+ expr 0 140 } 141 }] 142 } 143@@ -9187,6 +9158,7 @@ proc is-effective-target-keyword { arg } { 144 145 proc et-dg-runtest { runtest testcases flags default-extra-flags } { 146 global dg-do-what-default 147+ global do-what-limit 148 global EFFECTIVE_TARGETS 149 global et_index 150 151@@ -9194,6 +9166,7 @@ proc et-dg-runtest { runtest testcases flags default-extra-flags } { 152 foreach target $EFFECTIVE_TARGETS { 153 set target_flags $flags 154 set dg-do-what-default compile 155+ set do-what-limit link 156 set et_index [lsearch -exact $EFFECTIVE_TARGETS $target] 157 if { [info procs add_options_for_${target}] != [list] } { 158 set target_flags [add_options_for_${target} "$flags"] 159@@ -9201,8 +9174,10 @@ proc et-dg-runtest { runtest testcases flags default-extra-flags } { 160 if { [info procs check_effective_target_${target}_runtime] 161 != [list] && [check_effective_target_${target}_runtime] } { 162 set dg-do-what-default run 163+ set do-what-limit run 164 } 165 $runtest $testcases $target_flags ${default-extra-flags} 166+ unset do-what-limit 167 } 168 } else { 169 set et_index 0 170@@ -10789,6 +10764,7 @@ proc check_effective_target_sigsetjmp {} { 171 proc check_vect_support_and_set_flags { } { 172 global DEFAULT_VECTCFLAGS 173 global dg-do-what-default 174+ global do-what-limit 175 global EFFECTIVE_TARGETS 176 177 if [istarget powerpc-*paired*] { 178@@ -10797,6 +10773,7 @@ proc check_vect_support_and_set_flags { } { 179 set dg-do-what-default run 180 } else { 181 set dg-do-what-default compile 182+ set do-what-limit link 183 } 184 } elseif [istarget powerpc*-*-*] { 185 # Skip targets not supporting -maltivec. 186@@ -10821,6 +10798,7 @@ proc check_vect_support_and_set_flags { } { 187 lappend DEFAULT_VECTCFLAGS "-mcpu=970" 188 } 189 set dg-do-what-default compile 190+ set do-what-limit link 191 } 192 } elseif { [istarget i?86-*-*] || [istarget x86_64-*-*] } { 193 lappend DEFAULT_VECTCFLAGS "-msse2" 194@@ -10828,6 +10806,7 @@ proc check_vect_support_and_set_flags { } { 195 set dg-do-what-default run 196 } else { 197 set dg-do-what-default compile 198+ set do-what-limit link 199 } 200 } elseif { [istarget mips*-*-*] 201 && [check_effective_target_nomips16] } { 202@@ -10847,6 +10826,7 @@ proc check_vect_support_and_set_flags { } { 203 set dg-do-what-default run 204 } else { 205 set dg-do-what-default compile 206+ set do-what-limit link 207 } 208 } elseif [istarget alpha*-*-*] { 209 # Alpha's vectorization capabilities are extremely limited. 210@@ -10860,6 +10840,7 @@ proc check_vect_support_and_set_flags { } { 211 set dg-do-what-default run 212 } else { 213 set dg-do-what-default compile 214+ set do-what-limit link 215 } 216 } elseif [istarget ia64-*-*] { 217 set dg-do-what-default run 218@@ -10873,6 +10854,7 @@ proc check_vect_support_and_set_flags { } { 219 set dg-do-what-default run 220 } else { 221 set dg-do-what-default compile 222+ set do-what-limit link 223 } 224 } elseif [istarget aarch64*-*-*] { 225 set dg-do-what-default run 226@@ -10897,6 +10879,7 @@ proc check_vect_support_and_set_flags { } { 227 } else { 228 lappend DEFAULT_VECTCFLAGS "-march=z14" "-mzarch" 229 set dg-do-what-default compile 230+ set do-what-limit link 231 } 232 } elseif [istarget amdgcn-*-*] { 233 set dg-do-what-default run 234