On Mon, Dec 09, 2024 at 06:05:10PM +0100, Robin Dapp wrote: > > +/* { dg-additional-options "-mabi=lp64d" { target { rv64 } } } */ > > +/* { dg-additional-options "-mabi=ilp32d" { target { rv32 } } } */ > > Wouldn't skipping those tests also be reasonable? > I.e. adding a target to the compile directive instead. I'd find that a bit > more intuitive than overriding the ABI. > The same might apply to the other cases you touched. In the end it's probably > a question of taste but why if your test target mandates an ABI that cannot > compile vector tests, why compile them at all?
Yes, it's perfectly reasonable to skip such tests for ILP32E default ABI. I can prepare a patch to filter with "check_effective_target_riscv_e". But instead of adding a new effective_target filter to hundreds of test cases, we could simply prune the test results. Would the bellow approach be acceptable? diff --git a/gcc/testsuite/lib/gcc-dg.exp b/gcc/testsuite/lib/gcc-dg.exp index 312db38203d..ee1868e2f12 100644 --- a/gcc/testsuite/lib/gcc-dg.exp +++ b/gcc/testsuite/lib/gcc-dg.exp @@ -423,6 +423,10 @@ proc gcc-dg-prune { system text } { return "::unsupported::memory full" } + if { [regexp "(^|\n)\[^\n\]*error: ILP32E ABI does not support the \[^\n\]* extension" $text] + && [check_effective_target_riscv_e] } { + return "::unsupported::ilp32e extension" + } if { [string match "*error: function pointers not supported*" $text] && ![check_effective_target_function_pointers] } { # The format here is important. See dg.exp. diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index f2edbef92da..4f7107b5490 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -1904,6 +1904,18 @@ proc check_effective_target_riscv_a { } { }] } +# Return 1 if the target arch has the E extension, 0 otherwise. +# Such support implies that default ABI is either ILP32E or ILP64E. +# Cache the result. + +proc check_effective_target_riscv_e { } { + return [check_no_compiler_messages riscv_ext_e assembly { + #ifndef __riscv_e + #error "Not __riscv_e" + #endif + }] +} + # Return 1 if the target arch supports the atomic LRSC extension, 0 otherwise. # Cache the result. diff --git a/gcc/testsuite/lib/target-utils.exp b/gcc/testsuite/lib/target-utils.exp index 6140ad7cf9f..9a14e4db8e5 100644 --- a/gcc/testsuite/lib/target-utils.exp +++ b/gcc/testsuite/lib/target-utils.exp @@ -48,5 +48,9 @@ proc ${tool}_check_unsupported_p { output } { && ![check_effective_target_large_return_values] } { return "large return values not supported" } + if { [string match "(^|\n)\[^\n\]*error: ILP32E ABI does not support the \[^\n\]* extension" $output] + && [check_effective_target_riscv_e] } { + return "ILP32E ABI does not support an extension" + } return "" }