Hi Stefan, on 2023/8/15 02:51, Stefan Schulze Frielinghaus wrote: > Hi everyone, > > I have bootstrapped and regtested the patch below on s390. For the > 64-bit target I do not see any changes regarding the testsuite. For the > 31-bit target I see the following failures: > > FAIL: gcc.dg/vect/no-scevccp-outer-14.c (internal compiler error: in require, > at machmode.h:313) > FAIL: gcc.dg/vect/no-scevccp-outer-14.c (test for excess errors) > FAIL: gcc.dg/vect/pr50451.c (internal compiler error: in require, at > machmode.h:313) > FAIL: gcc.dg/vect/pr50451.c (test for excess errors) > FAIL: gcc.dg/vect/pr50451.c -flto -ffat-lto-objects (internal compiler error: > in require, at machmode.h:313) > FAIL: gcc.dg/vect/pr50451.c -flto -ffat-lto-objects (test for excess errors) > FAIL: gcc.dg/vect/pr53773.c (internal compiler error: in require, at > machmode.h:313) > FAIL: gcc.dg/vect/pr53773.c (test for excess errors) > FAIL: gcc.dg/vect/pr53773.c -flto -ffat-lto-objects (internal compiler error: > in require, at machmode.h:313) > FAIL: gcc.dg/vect/pr53773.c -flto -ffat-lto-objects (test for excess errors) > FAIL: gcc.dg/vect/pr71407.c (internal compiler error: in require, at > machmode.h:313) > FAIL: gcc.dg/vect/pr71407.c (test for excess errors) > FAIL: gcc.dg/vect/pr71407.c -flto -ffat-lto-objects (internal compiler error: > in require, at machmode.h:313) > FAIL: gcc.dg/vect/pr71407.c -flto -ffat-lto-objects (test for excess errors) > FAIL: gcc.dg/vect/pr71416-1.c (internal compiler error: in require, at > machmode.h:313) > FAIL: gcc.dg/vect/pr71416-1.c (test for excess errors) > FAIL: gcc.dg/vect/pr71416-1.c -flto -ffat-lto-objects (internal compiler > error: in require, at machmode.h:313) > FAIL: gcc.dg/vect/pr71416-1.c -flto -ffat-lto-objects (test for excess errors) > FAIL: gcc.dg/vect/pr94443.c (internal compiler error: in require, at > machmode.h:313) > FAIL: gcc.dg/vect/pr94443.c (test for excess errors) > FAIL: gcc.dg/vect/pr94443.c -flto -ffat-lto-objects (internal compiler error: > in require, at machmode.h:313) > FAIL: gcc.dg/vect/pr94443.c -flto -ffat-lto-objects (test for excess errors) > FAIL: gcc.dg/vect/pr97558.c (internal compiler error: in require, at > machmode.h:313) > FAIL: gcc.dg/vect/pr97558.c (test for excess errors) > FAIL: gcc.dg/vect/pr97558.c -flto -ffat-lto-objects (internal compiler error: > in require, at machmode.h:313) > FAIL: gcc.dg/vect/pr97558.c -flto -ffat-lto-objects (test for excess errors) > FAIL: gcc.dg/vect/vect-reduc-pattern-3.c -flto -ffat-lto-objects (internal > compiler error: in require, at machmode.h:313) > FAIL: gcc.dg/vect/vect-reduc-pattern-3.c -flto -ffat-lto-objects (test for > excess errors) > UNRESOLVED: gcc.dg/vect/no-scevccp-outer-14.c compilation failed to produce > executable > UNRESOLVED: gcc.dg/vect/pr53773.c -flto -ffat-lto-objects > scan-tree-dump-times optimized "\\* 10" 2 > UNRESOLVED: gcc.dg/vect/pr53773.c scan-tree-dump-times optimized "\\* 10" 2 > UNRESOLVED: gcc.dg/vect/pr71416-1.c -flto -ffat-lto-objects compilation > failed to produce executable > UNRESOLVED: gcc.dg/vect/pr71416-1.c compilation failed to produce executable > UNRESOLVED: gcc.dg/vect/vect-reduc-pattern-3.c -flto -ffat-lto-objects > compilation failed to produce executable > > I've randomely picked pr50451.c and ran gcc against it which results in: > > during GIMPLE pass: vect > dump file: pr50451.c.174t.vect > /gcc-verify-workdir/patched/src/gcc/testsuite/gcc.dg/vect/pr50451.c: In > function ‘foo’: > /gcc-verify-workdir/patched/src/gcc/testsuite/gcc.dg/vect/pr50451.c:5:1: > internal compiler error: in require, at machmode.h:313 > 0x1265d21 opt_mode<scalar_int_mode>::require() const > /gcc-verify-workdir/patched/src/gcc/machmode.h:313 > 0x1d7e4e9 opt_mode<machine_mode>::require() const > /gcc-verify-workdir/patched/src/gcc/vec.h:955 > 0x1d7e4e9 vect_verify_loop_lens > /gcc-verify-workdir/patched/src/gcc/tree-vect-loop.cc:1471 > 0x1da29ab vect_analyze_loop_2 > /gcc-verify-workdir/patched/src/gcc/tree-vect-loop.cc:2929 > 0x1da40c7 vect_analyze_loop_1 > /gcc-verify-workdir/patched/src/gcc/tree-vect-loop.cc:3330 > 0x1da499d vect_analyze_loop(loop*, vec_info_shared*) > /gcc-verify-workdir/patched/src/gcc/tree-vect-loop.cc:3484 > 0x1deed27 try_vectorize_loop_1 > /gcc-verify-workdir/patched/src/gcc/tree-vectorizer.cc:1064 > 0x1deed27 try_vectorize_loop > /gcc-verify-workdir/patched/src/gcc/tree-vectorizer.cc:1180 > 0x1def5c1 execute > /gcc-verify-workdir/patched/src/gcc/tree-vectorizer.cc:1296 > Please submit a full bug report, with preprocessed source (by using > -freport-bug). > Please include the complete backtrace with any bug report. > See <https://gcc.gnu.org/bugs/> for instructions. >
It looks like s390 supports variable index vec_extract at -m31 but no vector with length. It seems we need to further check the vector with length capability, with something like: diff --git a/gcc/tree-vect-loop.cc b/gcc/tree-vect-loop.cc index 5ae9f69c7eb..ef754467baf 100644 --- a/gcc/tree-vect-loop.cc +++ b/gcc/tree-vect-loop.cc @@ -10327,10 +10327,11 @@ vectorizable_live_operation (vec_info *vinfo, stmt_vec_info stmt_info, vect_record_loop_mask (loop_vinfo, &LOOP_VINFO_MASKS (loop_vinfo), 1, vectype, NULL); - else if (can_vec_extract_var_idx_p ( + else if (get_len_load_store_mode (TYPE_MODE (vectype), true) + .exists () + && can_vec_extract_var_idx_p ( TYPE_MODE (vectype), TYPE_MODE (TREE_TYPE (vectype)))) - vect_record_loop_len (loop_vinfo, - &LOOP_VINFO_LENS (loop_vinfo), + vect_record_loop_len (loop_vinfo, &LOOP_VINFO_LENS (loop_vinfo), 1, vectype, 1); else { sigh, the formatting looks odd. BR, Kewen