From patchwork Tue Jul 7 10:37:17 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Juergen Christ X-Patchwork-Id: 138647 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id D4B694BA540B for ; Tue, 7 Jul 2026 10:38:06 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org D4B694BA540B Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=ibm.com header.i=@ibm.com header.a=rsa-sha256 header.s=pp1 header.b=pjoQDbq8 X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mx0b-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) by sourceware.org (Postfix) with ESMTPS id 64B124BA540B for ; Tue, 7 Jul 2026 10:37:25 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 64B124BA540B Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=linux.ibm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=linux.ibm.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 64B124BA540B Authentication-Results: sourceware.org; arc=none smtp.remote-ip=148.163.158.5 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1783420645; cv=none; b=ERFxH4LZvGRDdVLcb7LrS5odlgfDh2WX4m6O6qXgsWt0bV88JsGzy5j97wTQOgWbnGD3BZSWkDRME9t0rdmqk1mdTCBPJxEgIlmV4TmDZ6t4nCmI5YKpEdM9eVodXdv+TdYTKCg/zHicvk/8gp7F35t6snKM1Tx4G2FAtv6Z6w8= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1783420645; c=relaxed/simple; bh=1RtOCdtZqu8e+qFxLR4kq5r2QeVSPcvOHOeqX6hh7LA=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=c7hXUBG7+kokDUhG069gduF7pfnXD/gnT0av+q7eqeB2MxOagYW96npxZ1muD9Kr07QCyLi8ixFKCsys85TpPtcL9sSJhIgt4dOwNpwfLb1de3/PvW5Ir8gQ0/benF1DyvuRIdJNJuRlgpgs0TWgQ4heHJXUORLMC+tpRvMQCzs= ARC-Authentication-Results: i=1; sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=ibm.com header.i=@ibm.com header.a=rsa-sha256 header.s=pp1 header.b=pjoQDbq8 DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 64B124BA540B Received: from pps.filterd (m0356516.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 6678INPu3130000 for ; Tue, 7 Jul 2026 10:37:24 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:message-id:mime-version :subject:to; s=pp1; bh=cl+phlRCnzTbwdHO32spephII5fZ7mu1o55+mz7XJ IE=; b=pjoQDbq8baw39rwesQHG14wGEctFs57HLYY7oambYybEj77TJifY0+KDA tpdH8bnSpA/GJx5FvxoAlBYdAqWqTLq71wTfStk4xRBUWZavlwOiXAZQOzZW6gf6 PcvoIF+vcvsakTK529xNfC9SX2ghJTI3drwb+B1j9BRM8yHTg5jivJndjBu+GFmA bu2h2KRiAkEVkADx43YBXJtb6fDED8Y+XxbhQP2bWe5XJvvMk0U68uV2LaZOYmZ6 lwnOJB/SBlHdr2PdnlQVqaRhXcZccIeHHWEVHCxLXdDGK5WQT9nxXp5FeS9Ya4S+ oqbucukZEI1aDaoHFCNVEzUUywkSQ== Received: from ppma12.dal12v.mail.ibm.com (dc.9e.1632.ip4.static.sl-reverse.com [50.22.158.220]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4f6qkneghu-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Tue, 07 Jul 2026 10:37:24 +0000 (GMT) Received: from pps.filterd (ppma12.dal12v.mail.ibm.com [127.0.0.1]) by ppma12.dal12v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 667AYc4R017849 for ; Tue, 7 Jul 2026 10:37:23 GMT Received: from smtprelay04.fra02v.mail.ibm.com ([9.218.2.228]) by ppma12.dal12v.mail.ibm.com (PPS) with ESMTPS id 4f7cgq2huk-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Tue, 07 Jul 2026 10:37:23 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (smtpav06.fra02v.mail.ibm.com [10.20.54.105]) by smtprelay04.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 667AbKHI29164132 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 7 Jul 2026 10:37:20 GMT Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id E4D1A20049; Tue, 7 Jul 2026 10:37:19 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id C816C2004D; Tue, 7 Jul 2026 10:37:19 +0000 (GMT) Received: from li-3a824ecc-34fe-11b2-a85c-eae455c7d911.ehn-de.ibm.com (unknown [9.224.76.97]) by smtpav06.fra02v.mail.ibm.com (Postfix) with ESMTP; Tue, 7 Jul 2026 10:37:19 +0000 (GMT) From: Juergen Christ To: stefansf@linux.ibm.com Cc: gcc-patches@gcc.gnu.org Subject: [PATCH] s390x: Implement vec_cbranch_{all,any} Date: Tue, 7 Jul 2026 12:37:17 +0200 Message-ID: <20260707103717.182778-1-jchrist@linux.ibm.com> X-Mailer: git-send-email 2.43.7 MIME-Version: 1.0 X-TM-AS-GCONF: 00 X-Authority-Analysis: v=2.4 cv=Q/XiJY2a c=1 sm=1 tr=0 ts=6a4cd6e4 cx=c_pps a=bLidbwmWQ0KltjZqbj+ezA==:117 a=bLidbwmWQ0KltjZqbj+ezA==:17 a=RAioF0-LDSMA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=Y2IxJ9c9Rs8Kov3niI8_:22 a=VnNF1IyMAAAA:8 a=jXTdUANqql8aaKyiSDkA:9 X-Proofpoint-GUID: swnao17kC8TqhDvoHAb3EoNuWYdoWCe5 X-Proofpoint-ORIG-GUID: swnao17kC8TqhDvoHAb3EoNuWYdoWCe5 X-Proofpoint-Spam-Info: AW1haW4tMjYwNzA3MDEwMCBTYWx0ZWRfX4HoeRXl0ecHg zRDqRo5DmXYVszRQVYq43RtwQUk1j4D7TruA5lfipcgv9eU2cEDe+yhS6H8QJMh1HxFuSGEjzbv pjD/bgcewwx/oX3x5EIV2PVBnki6JDA= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzA3MDEwMCBTYWx0ZWRfXwJybkEnxoMKt OXZil/9Cdz4GgXWr+m9wIVK/9nK07pR9j1xaiNOO8zL31mPgChvLQaq6TNzQxW3lHjkeLg+T0z9 MuLF1L5CU8F8GT2oVNNMYqlndfOj3sBMKW8feuRblnehJjoV9wR1BVw8T5iGtSqiHTc7TZWI7Bq Qnv4E2IdyadP4LqtoZGdk8qCJIxo5LzHW0d74b0ikDMliDanTwbyXiQCoEncRyE3mr5X8KSQ5bA vcMRXDcUP0G7ksHX8qCUIPssuhrtR7GsH/oAm4Hsp4b53e0sm+TDSh0k3Xj7dKnKqatQ2zGpIw3 PryC8ycnnFBZty9oedMZvLo1XSugjEOZwwzvwpiJqsU+rI4ixI4/OwgztCZzvWvFnK4nQEE97m5 a6ueKWB4nD16/7B9QvzLjCBdUDrRwL8qI5kxnIhNovMz/iRjWIfBd5/l1NBdwzvzq/EauQz0bKq hqXs94ZDnt0X6Mv4DKw== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-07_02,2026-07-06_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 impostorscore=0 spamscore=0 phishscore=0 priorityscore=1501 bulkscore=0 clxscore=1011 lowpriorityscore=0 suspectscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607070100 X-Spam-Status: No, score=-13.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_PASS, TXREP shortcircuit=no autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces~patchwork=sourceware.org@gcc.gnu.org This enables early-exit vectorization on s390x. Adjust the test suite since s390x does not support variable length vectors and only supports basic vector load schemes. gcc/ChangeLog: * config/s390/s390-protos.h (s390_expand_vec_compare_gen_cc): New function. * config/s390/s390.cc (s390_expand_vec_compare_cc): Extract part of this function into a ... (s390_expand_vec_compare_gen_cc): ... new function. * config/s390/vector.md (vec_cbranch_any): Implement. (vec_cbranch_all): Implement. gcc/testsuite/ChangeLog: * gcc.dg/tree-ssa/gen-vect-11.c: Adjust. * gcc.dg/tree-ssa/gen-vect-11a.c: Adjust. * gcc.dg/vect/vect-early-break_52.c: Adjust. * gcc.dg/vect/vect-early-break_53.c: Adjust. * gcc.dg/vect/vect-early-break_64.c: Adjust. * gcc.dg/vect/vect-uncounted_2.c: Adjust. * lib/target-supports.exp: Add s390x to early-break vectorization Signed-off-by: Juergen Christ --- gcc/config/s390/s390-protos.h | 1 + gcc/config/s390/s390.cc | 40 ++++++++----- gcc/config/s390/vector.md | 60 +++++++++++++++++++ gcc/testsuite/gcc.dg/tree-ssa/gen-vect-11.c | 7 +-- gcc/testsuite/gcc.dg/tree-ssa/gen-vect-11a.c | 4 +- .../gcc.dg/vect/vect-early-break_52.c | 2 +- .../gcc.dg/vect/vect-early-break_53.c | 2 +- .../gcc.dg/vect/vect-early-break_64.c | 2 +- gcc/testsuite/gcc.dg/vect/vect-uncounted_2.c | 2 +- gcc/testsuite/lib/target-supports.exp | 4 ++ 10 files changed, 100 insertions(+), 24 deletions(-) diff --git a/gcc/config/s390/s390-protos.h b/gcc/config/s390/s390-protos.h index bedce5830720..e885ad1beb19 100644 --- a/gcc/config/s390/s390-protos.h +++ b/gcc/config/s390/s390-protos.h @@ -122,6 +122,7 @@ extern void s390_expand_atomic (machine_mode, enum rtx_code, rtx, rtx, rtx, bool); extern void s390_expand_tbegin (rtx, rtx, rtx, bool); extern void s390_expand_vec_compare (rtx, enum rtx_code, rtx, rtx); +extern rtx s390_expand_vec_compare_gen_cc (enum rtx_code, rtx, rtx, bool); extern void s390_expand_vec_compare_cc (rtx, enum rtx_code, rtx, rtx, bool); extern enum rtx_code s390_reverse_condition (machine_mode, enum rtx_code); extern void s390_expand_vcond (rtx, rtx, rtx, enum rtx_code, rtx, rtx); diff --git a/gcc/config/s390/s390.cc b/gcc/config/s390/s390.cc index 1bddd5e454ae..89161674e44a 100644 --- a/gcc/config/s390/s390.cc +++ b/gcc/config/s390/s390.cc @@ -7449,18 +7449,14 @@ s390_expand_vec_compare (rtx target, enum rtx_code cond, emit_insn (gen_rtx_SET (target, gen_rtx_NOT (mode, target))); } -/* Expand the comparison CODE of CMP1 and CMP2 and copy 1 or 0 into - TARGET if either all (ALL_P is true) or any (ALL_P is false) of the - elements in CMP1 and CMP2 fulfill the comparison. - This function is only used in s390_expand_cstoreti4 and to emit patterns for - the vx builtins and therefore only handles comparison codes required by - those. */ -void -s390_expand_vec_compare_cc (rtx target, enum rtx_code code, - rtx cmp1, rtx cmp2, bool all_p) +/* Expand the comparison CODE of CMP1 and CMP2 and return a comparison suitable + for s390_emit_jump which jumps if all (ALLP is true) or any (ALL_P is false) + of the elements in CMP1 and CMP2 fulfill the comparison. */ +rtx +s390_expand_vec_compare_gen_cc (enum rtx_code code, + rtx cmp1, rtx cmp2, bool all_p) { machine_mode cc_producer_mode, cc_consumer_mode, scratch_mode; - rtx tmp_reg = gen_reg_rtx (SImode); bool swap_p = false; if (GET_MODE_CLASS (GET_MODE (cmp1)) == MODE_VECTOR_INT @@ -7543,14 +7539,30 @@ s390_expand_vec_compare_cc (rtx target, enum rtx_code code, gen_rtx_COMPARE (cc_producer_mode, cmp1, cmp2)), gen_rtx_CLOBBER (VOIDmode, gen_rtx_SCRATCH (scratch_mode))))); + + return gen_rtx_fmt_ee (code, VOIDmode, + gen_rtx_REG (cc_consumer_mode, CC_REGNUM), + const0_rtx); +} + +/* Expand the comparison CODE of CMP1 and CMP2 and copy 1 or 0 into + TARGET if either all (ALL_P is true) or any (ALL_P is false) of the + elements in CMP1 and CMP2 fulfill the comparison. + This function is only used in s390_expand_cstoreti4 and to emit patterns for + the vx builtins and therefore only handles comparison codes required by + those. */ +void +s390_expand_vec_compare_cc (rtx target, enum rtx_code code, + rtx cmp1, rtx cmp2, bool all_p) +{ + rtx cond = s390_expand_vec_compare_gen_cc (code, cmp1, cmp2, all_p); + rtx tmp_reg = gen_reg_rtx (SImode); + emit_move_insn (target, const0_rtx); emit_move_insn (tmp_reg, const1_rtx); emit_move_insn (target, - gen_rtx_IF_THEN_ELSE (SImode, - gen_rtx_fmt_ee (code, VOIDmode, - gen_rtx_REG (cc_consumer_mode, CC_REGNUM), - const0_rtx), + gen_rtx_IF_THEN_ELSE (SImode, cond, tmp_reg, target)); } diff --git a/gcc/config/s390/vector.md b/gcc/config/s390/vector.md index f0be6f10c1ac..b806f4c3300d 100644 --- a/gcc/config/s390/vector.md +++ b/gcc/config/s390/vector.md @@ -3967,3 +3967,63 @@ operands[8] = gen_reg_rtx (V16QImode); operands[9] = gen_reg_rtx (V16QImode); }) + +(define_expand "vec_cbranch_any" + [(set (pc) + (if_then_else (match_operator 0 "comparison_operator" + [(match_operand:VIT_HW_VXE3_T 1 "register_operand" "") + (match_operand:VIT_HW_VXE3_T 2 "register_operand" "")]) + (label_ref (match_operand 3 "" "")) + (pc)))] + "TARGET_VX" +{ + s390_emit_jump (operands[3], + s390_expand_vec_compare_gen_cc (GET_CODE (operands[0]), + operands[1], operands[2], false)); + DONE; +}) + +(define_expand "vec_cbranch_all" + [(set (pc) + (if_then_else (match_operator 0 "comparison_operator" + [(match_operand:VIT_HW_VXE3_T 1 "register_operand" "") + (match_operand:VIT_HW_VXE3_T 2 "register_operand" "")]) + (label_ref (match_operand 3 "" "")) + (pc)))] + "TARGET_VX" +{ + s390_emit_jump (operands[3], + s390_expand_vec_compare_gen_cc (GET_CODE (operands[0]), + operands[1], operands[2], true)); + DONE; +}) + +(define_expand "vec_cbranch_any" + [(set (pc) + (if_then_else (match_operator 0 "comparison_operator" + [(match_operand:VECF_HW 1 "register_operand" "") + (match_operand:VECF_HW 2 "register_operand" "")]) + (label_ref (match_operand 3 "" "")) + (pc)))] + "TARGET_VX" +{ + s390_emit_jump (operands[3], + s390_expand_vec_compare_gen_cc (GET_CODE (operands[0]), + operands[1], operands[2], false)); + DONE; +}) + +(define_expand "vec_cbranch_all" + [(set (pc) + (if_then_else (match_operator 0 "comparison_operator" + [(match_operand:VECF_HW 1 "register_operand" "") + (match_operand:VECF_HW 2 "register_operand" "")]) + (label_ref (match_operand 3 "" "")) + (pc)))] + "TARGET_VX" +{ + s390_emit_jump (operands[3], + s390_expand_vec_compare_gen_cc (GET_CODE (operands[0]), + operands[1], operands[2], true)); + DONE; +}) diff --git a/gcc/testsuite/gcc.dg/tree-ssa/gen-vect-11.c b/gcc/testsuite/gcc.dg/tree-ssa/gen-vect-11.c index 6916843f397b..9b5098b50992 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/gen-vect-11.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/gen-vect-11.c @@ -1,10 +1,6 @@ /* { dg-do run { target vect_cmdline_needed } } */ /* { dg-options "-O2 -ftree-vectorize -fwrapv -fdump-tree-vect-details -fvect-cost-model=dynamic" } */ /* { dg-additional-options "-mno-sse" { target { i?86-*-* x86_64-*-* } } } */ -/* The IBM Z backend sets the min-vect-loop-bound param to 2 to avoid - awkward epilogue code generation in some cases. This line needs to - be removed after finding an alternate way to fix this. */ -/* { dg-additional-options "--param min-vect-loop-bound=0" { target { s390*-*-* } } } */ #include @@ -34,4 +30,5 @@ int main () } -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { ! { avr-*-* msp430-*-* pru-*-* } } } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { ! { avr-*-* msp430-*-* pru-*-* s390*-*-* } } } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" { target { s390*-*-* } } } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/gen-vect-11a.c b/gcc/testsuite/gcc.dg/tree-ssa/gen-vect-11a.c index 6326bf75ab02..721a609acffb 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/gen-vect-11a.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/gen-vect-11a.c @@ -38,4 +38,6 @@ int main () } -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { ! { avr-*-* pru-*-* } } } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { ! { avr-*-* msp430-*-* pru-*-* s390*-*-* } } } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" { target { s390*-*-* } } } } */ + diff --git a/gcc/testsuite/gcc.dg/vect/vect-early-break_52.c b/gcc/testsuite/gcc.dg/vect/vect-early-break_52.c index 6abfcd6580e4..f7e6a6c2eb93 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-early-break_52.c +++ b/gcc/testsuite/gcc.dg/vect/vect-early-break_52.c @@ -18,4 +18,4 @@ int main1 (short X) } } -/* { dg-final { scan-tree-dump "vectorized 1 loops in function" "vect" { target { ! "x86_64-*-* i?86-*-* arm*-*-*" } } } } */ +/* { dg-final { scan-tree-dump "vectorized 1 loops in function" "vect" { target { ! "x86_64-*-* i?86-*-* arm*-*-* s390*-*-*" } } } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-early-break_53.c b/gcc/testsuite/gcc.dg/vect/vect-early-break_53.c index d4fd0d39a25a..876baa980272 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-early-break_53.c +++ b/gcc/testsuite/gcc.dg/vect/vect-early-break_53.c @@ -16,4 +16,4 @@ int main () abort (); } -/* { dg-final { scan-tree-dump "vectorized 1 loops in function" "vect" } } */ +/* { dg-final { scan-tree-dump "vectorized 1 loops in function" "vect" { target { ! s390*-*-* } } } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-early-break_64.c b/gcc/testsuite/gcc.dg/vect/vect-early-break_64.c index aaa2a46fb67e..52d7ebdd1797 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-early-break_64.c +++ b/gcc/testsuite/gcc.dg/vect/vect-early-break_64.c @@ -15,4 +15,4 @@ void a() { return; } -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_partial_vectors } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_partial_vectors && { ! s390*-*-* } } } } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-uncounted_2.c b/gcc/testsuite/gcc.dg/vect/vect-uncounted_2.c index 33fb0ce1f0d0..390bf22ee1fa 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-uncounted_2.c +++ b/gcc/testsuite/gcc.dg/vect/vect-uncounted_2.c @@ -13,7 +13,7 @@ foo (int *a0, int *aN, int *b0, int *bN) *a += *b; } -/* { dg-final { scan-tree-dump "Loop being analyzed as uncounted." "vect" } } */ +/* { dg-final { scan-tree-dump "Loop being analyzed as uncounted." "vect" { target { ! "s390*-*-*" } } } } */ /* { dg-final { scan-tree-dump "vectorized 1 loops in function" "vect" } } */ /* Make sure the values used in peeled epilog loop effectively reset the last vectorized iteration. */ /* { dg-final { scan-tree-dump {[^\n\r]*:.+# (a_[0-9]+) = PHI [^\n\r]*:.+# a_[0-9]+ = PHI <\2\(\1\)>} "vect" } } */ diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index c6ebbed4f4b5..e76b2b77c4c0 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -4713,6 +4713,8 @@ proc check_effective_target_vect_early_break { } { || [istarget amdgcn-*-*] || [check_effective_target_riscv_v] || [check_effective_target_loongarch_sx] + || ([istarget s390*-*-*] + && [check_effective_target_s390_vx]) }}] } @@ -4730,6 +4732,8 @@ proc check_effective_target_vect_early_break_hw { } { || [istarget amdgcn-*-*] || [check_effective_target_riscv_v_ok] || [check_effective_target_loongarch_sx_hw] + || ([istarget s390*-*-*] + && [check_effective_target_s390_vx]) }}] }