This is a proof of concept addressing some of the issues Richi pointed out 
before.

In particular the extra vect options are now taken part of the cache key as well
so we re-evaluate all the different effective targets tests for them while 
running
under vect.exp.

The attached patch produces

make check-gcc RUNTESTFLAGS="--target_board=unix\{-m32,-m64\} 
vect.exp=bb-slp-subgroups-2.c" -j

gives

Test run by tnfchris on Fri Aug 14 08:41:38 2026
Native configuration is x86_64-pc-linux-gnu

                === gcc tests ===

Schedule of variations:
    unix/-m32
    unix/-m64

Running target unix/-m32
Running /home/tnfchris/gcc-dsg/gcc/testsuite/gcc.dg/vect/vect.exp ...
PASS: gcc.dg/vect/bb-slp-subgroups-2.c (test for excess errors)
PASS: gcc.dg/vect/bb-slp-subgroups-2.c -flto -ffat-lto-objects  
scan-tree-dump-times slp2 "Basic block will be vectorized using SLP" 1
PASS: gcc.dg/vect/bb-slp-subgroups-2.c -flto -ffat-lto-objects  
scan-tree-dump-times slp2 "optimized: basic block" 2
PASS: gcc.dg/vect/bb-slp-subgroups-2.c -flto -ffat-lto-objects (test for excess 
errors)
PASS: gcc.dg/vect/bb-slp-subgroups-2.c -flto -ffat-lto-objects -mavx2  
scan-tree-dump-times slp2 "Basic block will be vectorized using SLP" 1
PASS: gcc.dg/vect/bb-slp-subgroups-2.c -flto -ffat-lto-objects -mavx2  
scan-tree-dump-times slp2 "optimized: basic block" 1
PASS: gcc.dg/vect/bb-slp-subgroups-2.c -flto -ffat-lto-objects -mavx2 (test for 
excess errors)
PASS: gcc.dg/vect/bb-slp-subgroups-2.c -flto -ffat-lto-objects -mavx2 execution 
test
PASS: gcc.dg/vect/bb-slp-subgroups-2.c -flto -ffat-lto-objects execution test
PASS: gcc.dg/vect/bb-slp-subgroups-2.c -mavx2  scan-tree-dump-times slp2 "Basic 
block will be vectorized using SLP" 1
PASS: gcc.dg/vect/bb-slp-subgroups-2.c -mavx2  scan-tree-dump-times slp2 
"optimized: basic block" 1
PASS: gcc.dg/vect/bb-slp-subgroups-2.c -mavx2 (test for excess errors)
PASS: gcc.dg/vect/bb-slp-subgroups-2.c -mavx2 execution test
PASS: gcc.dg/vect/bb-slp-subgroups-2.c execution test
PASS: gcc.dg/vect/bb-slp-subgroups-2.c scan-tree-dump-times slp2 "Basic block 
will be vectorized using SLP" 1
PASS: gcc.dg/vect/bb-slp-subgroups-2.c scan-tree-dump-times slp2 "optimized: 
basic block" 2
                === gcc Summary for unix/-m32 ===

# of expected passes            16
Running target unix/-m64
Running /home/tnfchris/gcc-dsg/gcc/testsuite/gcc.dg/vect/vect.exp ...
PASS: gcc.dg/vect/bb-slp-subgroups-2.c (test for excess errors)
PASS: gcc.dg/vect/bb-slp-subgroups-2.c -flto -ffat-lto-objects  
scan-tree-dump-times slp2 "Basic block will be vectorized using SLP" 1
PASS: gcc.dg/vect/bb-slp-subgroups-2.c -flto -ffat-lto-objects  
scan-tree-dump-times slp2 "optimized: basic block" 2
PASS: gcc.dg/vect/bb-slp-subgroups-2.c -flto -ffat-lto-objects (test for excess 
errors)
PASS: gcc.dg/vect/bb-slp-subgroups-2.c -flto -ffat-lto-objects -mavx2  
scan-tree-dump-times slp2 "Basic block will be vectorized using SLP" 1
PASS: gcc.dg/vect/bb-slp-subgroups-2.c -flto -ffat-lto-objects -mavx2  
scan-tree-dump-times slp2 "optimized: basic block" 1
PASS: gcc.dg/vect/bb-slp-subgroups-2.c -flto -ffat-lto-objects -mavx2 (test for 
excess errors)
PASS: gcc.dg/vect/bb-slp-subgroups-2.c -flto -ffat-lto-objects -mavx2 execution 
test
PASS: gcc.dg/vect/bb-slp-subgroups-2.c -flto -ffat-lto-objects execution test
PASS: gcc.dg/vect/bb-slp-subgroups-2.c -mavx2  scan-tree-dump-times slp2 "Basic 
block will be vectorized using SLP" 1
PASS: gcc.dg/vect/bb-slp-subgroups-2.c -mavx2  scan-tree-dump-times slp2 
"optimized: basic block" 1
PASS: gcc.dg/vect/bb-slp-subgroups-2.c -mavx2 (test for excess errors)
PASS: gcc.dg/vect/bb-slp-subgroups-2.c -mavx2 execution test
PASS: gcc.dg/vect/bb-slp-subgroups-2.c execution test
PASS: gcc.dg/vect/bb-slp-subgroups-2.c scan-tree-dump-times slp2 "Basic block 
will be vectorized using SLP" 1
PASS: gcc.dg/vect/bb-slp-subgroups-2.c scan-tree-dump-times slp2 "optimized: 
basic block" 2
                === gcc Summary for unix/-m64 ===

# of expected passes            16

                === gcc Summary ===

# of expected passes            32
/home/tnfchris/gcc-peak/gcc/xgcc  version 17.0.0 20260727 (experimental) (GCC)

does this do what you wanted Richi?

---
diff --git a/gcc/testsuite/gcc.dg/vect/vect.exp 
b/gcc/testsuite/gcc.dg/vect/vect.exp
index 
958156b6ae01412b9d7a1b96bd4c394a038d5839..5008248c37f36cc4043ad961580979149a0d84c3
 100644
--- a/gcc/testsuite/gcc.dg/vect/vect.exp
+++ b/gcc/testsuite/gcc.dg/vect/vect.exp
@@ -72,7 +72,40 @@ set VECT_ADDITIONAL_FLAGS [list ""]
 if { [check_effective_target_lto] } {
     lappend VECT_ADDITIONAL_FLAGS "-flto -ffat-lto-objects"
 }
+
+# Set target specific vect torture options
+if { [istarget aarch64*-*-*] } {
+  set TORTURE_OPTIONS [list \
+      {-march=armv8-a} \
+      {-march=armv8-a+sve} \
+      {-march=armv8-a+sve -msve-vector-bits=128} \
+      {-march=armv8-a+sve -msve-vector-bits=256} \
+      {-march=armv9-a} \
+  ]
+}
+
+if { [istarget x86_64-*-*] } {
+  set TORTURE_OPTIONS [list {-mavx2} ]
+}
+
+# Allow TORTURE_OPTIONS to add extra flag sets on top of the existing ones.
+if {[info exists TORTURE_OPTIONS]} {
+    set base_vect_additional_flags $VECT_ADDITIONAL_FLAGS
+    set VECT_ADDITIONAL_FLAGS [list]
+    foreach base_flags $base_vect_additional_flags {
+       lappend VECT_ADDITIONAL_FLAGS $base_flags
+       foreach torture_flags $TORTURE_OPTIONS {
+           if {$base_flags eq ""} {
+               lappend VECT_ADDITIONAL_FLAGS $torture_flags
+           } else {
+               lappend VECT_ADDITIONAL_FLAGS [concat $base_flags 
$torture_flags]
+           }
+       }
+    }
+}
+
 foreach flags $VECT_ADDITIONAL_FLAGS {
+    set ::vect_torture_flags [concat $flags $DEFAULT_VECTCFLAGS]
     set tests ""
     foreach file [glob -nocomplain $srcdir/$subdir/*.\[cS\]] {
        if { ! [string match $srcdir/$subdir/bb-slp-*.\[cS\] $file] } {
diff --git a/gcc/testsuite/lib/target-supports.exp 
b/gcc/testsuite/lib/target-supports.exp
index 
eb2444204a0df6ee4e39f3f857419c03bd067ae3..6a9782cfc76a6a24f32ca5499edde23e56bef5dd
 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -70,8 +70,18 @@ load_file $et_static
 
 proc check_compile {basename type contents args} {
     global tool
+    global vect_torture_flags
     verbose "check_compile tool: $tool for $basename"
 
+    if {[info exists vect_torture_flags] && $vect_torture_flags ne ""} {
+       if {[llength $args] > 0} {
+           set args [lreplace $args 0 0 \
+                         [concat $vect_torture_flags [lindex $args 0]]]
+       } else {
+           set args [list $vect_torture_flags]
+       }
+    }
+
     # Save additional_sources to avoid compiling testsuite's sources
     # against check_compile's source.
     global additional_sources
@@ -166,13 +176,20 @@ proc check_cached_effective_target { prop args } {
     global EFFECTIVE_TARGETS
     global et_index
     global et_cache
+    global vect_torture_flags
+    if {![info exists vect_torture_flags]} {
+       set vect_torture_flags ""
+    }
 
     if { [info exists et_index] } {
        set et [lindex $EFFECTIVE_TARGETS $et_index]
     } else {
        set et "default"
     }
-    set target [current_target_name]
+
+    # Make the cache key depend on the actual target name plus any vect torture
+    # flags in effect.
+    set target "[current_target_name] $vect_torture_flags"
     if {![info exists et_cache($prop,$target,$et)]} {
        verbose "check_cached_effective_target $prop: checking $target" 2
        if {[string is true -strict $args] || [string is false -strict $args]} {


-- 
diff --git a/gcc/testsuite/gcc.dg/vect/vect.exp b/gcc/testsuite/gcc.dg/vect/vect.exp
index 958156b6ae01412b9d7a1b96bd4c394a038d5839..5008248c37f36cc4043ad961580979149a0d84c3 100644
--- a/gcc/testsuite/gcc.dg/vect/vect.exp
+++ b/gcc/testsuite/gcc.dg/vect/vect.exp
@@ -72,7 +72,40 @@ set VECT_ADDITIONAL_FLAGS [list ""]
 if { [check_effective_target_lto] } {
     lappend VECT_ADDITIONAL_FLAGS "-flto -ffat-lto-objects"
 }
+
+# Set target specific vect torture options
+if { [istarget aarch64*-*-*] } {
+  set TORTURE_OPTIONS [list \
+      {-march=armv8-a} \
+      {-march=armv8-a+sve} \
+      {-march=armv8-a+sve -msve-vector-bits=128} \
+      {-march=armv8-a+sve -msve-vector-bits=256} \
+      {-march=armv9-a} \
+  ]
+}
+
+if { [istarget x86_64-*-*] } {
+  set TORTURE_OPTIONS [list {-mavx2} ]
+}
+
+# Allow TORTURE_OPTIONS to add extra flag sets on top of the existing ones.
+if {[info exists TORTURE_OPTIONS]} {
+    set base_vect_additional_flags $VECT_ADDITIONAL_FLAGS
+    set VECT_ADDITIONAL_FLAGS [list]
+    foreach base_flags $base_vect_additional_flags {
+       lappend VECT_ADDITIONAL_FLAGS $base_flags
+       foreach torture_flags $TORTURE_OPTIONS {
+           if {$base_flags eq ""} {
+               lappend VECT_ADDITIONAL_FLAGS $torture_flags
+           } else {
+               lappend VECT_ADDITIONAL_FLAGS [concat $base_flags $torture_flags]
+           }
+       }
+    }
+}
+
 foreach flags $VECT_ADDITIONAL_FLAGS {
+    set ::vect_torture_flags [concat $flags $DEFAULT_VECTCFLAGS]
     set tests ""
     foreach file [glob -nocomplain $srcdir/$subdir/*.\[cS\]] {
 	if { ! [string match $srcdir/$subdir/bb-slp-*.\[cS\] $file] } {
diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
index eb2444204a0df6ee4e39f3f857419c03bd067ae3..6a9782cfc76a6a24f32ca5499edde23e56bef5dd 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -70,8 +70,18 @@ load_file $et_static
 
 proc check_compile {basename type contents args} {
     global tool
+    global vect_torture_flags
     verbose "check_compile tool: $tool for $basename"
 
+    if {[info exists vect_torture_flags] && $vect_torture_flags ne ""} {
+	if {[llength $args] > 0} {
+	    set args [lreplace $args 0 0 \
+			  [concat $vect_torture_flags [lindex $args 0]]]
+	} else {
+	    set args [list $vect_torture_flags]
+	}
+    }
+
     # Save additional_sources to avoid compiling testsuite's sources
     # against check_compile's source.
     global additional_sources
@@ -166,13 +176,20 @@ proc check_cached_effective_target { prop args } {
     global EFFECTIVE_TARGETS
     global et_index
     global et_cache
+    global vect_torture_flags
+    if {![info exists vect_torture_flags]} {
+	set vect_torture_flags ""
+    }
 
     if { [info exists et_index] } {
 	set et [lindex $EFFECTIVE_TARGETS $et_index]
     } else {
 	set et "default"
     }
-    set target [current_target_name]
+
+    # Make the cache key depend on the actual target name plus any vect torture
+    # flags in effect.
+    set target "[current_target_name] $vect_torture_flags"
     if {![info exists et_cache($prop,$target,$et)]} {
 	verbose "check_cached_effective_target $prop: checking $target" 2
 	if {[string is true -strict $args] || [string is false -strict $args]} {

Reply via email to