From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1666) id 6E8F33858C53; Wed, 26 Apr 2023 09:33:50 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 6E8F33858C53 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1682501630; bh=fEKh/xwdvyRAG3zsjQTvLxeTx4WHPL9I8H954WiZGnA=; h=From:To:Subject:Date:From; b=oX6kpjghbLiTnVU8wuyJurO1AXuTSG+hbyyx55e/gCk3VC6+FntLY4sBGKZ9mwzGc mGyptxpaCNsgmhNQQH0utVayP+Hb9K3b+VL9tVWEbIgswb/IBbXIAwGfvxGcN5Zv+d vsW/bUZnbjsxDgd2Tf3Xp4+LwS0eDjEVkDoTDQwk= MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Richard Biener To: gcc-cvs@gcc.gnu.org Subject: [gcc r13-7250] tree-optimization/109573 - avoid ICEing on unexpected live def X-Act-Checkin: gcc X-Git-Author: Richard Biener X-Git-Refname: refs/heads/releases/gcc-13 X-Git-Oldrev: d2e0b6a3c4965635d8ba8e217ef2272e7be66a5c X-Git-Newrev: 263d1ed0484fc81d3f93e39cdd2f9eb0ce4d3e88 Message-Id: <20230426093350.6E8F33858C53@sourceware.org> Date: Wed, 26 Apr 2023 09:33:50 +0000 (GMT) List-Id: https://gcc.gnu.org/g:263d1ed0484fc81d3f93e39cdd2f9eb0ce4d3e88 commit r13-7250-g263d1ed0484fc81d3f93e39cdd2f9eb0ce4d3e88 Author: Richard Biener Date: Fri Apr 21 12:57:17 2023 +0200 tree-optimization/109573 - avoid ICEing on unexpected live def The following relaxes the assert in vectorizable_live_operation where we catch currently unhandled cases to also allow an intermediate copy as it happens here but also relax the assert to checking only. PR tree-optimization/109573 * tree-vect-loop.cc (vectorizable_live_operation): Allow unhandled SSA copy as well. Demote assert to checking only. * g++.dg/vect/pr109573.cc: New testcase. (cherry picked from commit cddfe6bc40b3dc0806e260bbfb4cac82d609a258) Diff: --- gcc/testsuite/g++.dg/vect/pr109573.cc | 91 +++++++++++++++++++++++++++++++++++ gcc/tree-vect-loop.cc | 7 +-- 2 files changed, 95 insertions(+), 3 deletions(-) diff --git a/gcc/testsuite/g++.dg/vect/pr109573.cc b/gcc/testsuite/g++.dg/vect/pr109573.cc new file mode 100644 index 00000000000..d96f86f9579 --- /dev/null +++ b/gcc/testsuite/g++.dg/vect/pr109573.cc @@ -0,0 +1,91 @@ +// { dg-do compile } +// { dg-require-effective-target c++20 } + +void *operator new(__SIZE_TYPE__, void *__p) { return __p; } +template struct _Head_base { + _Head _M_head_impl; +}; +template struct _Tuple_impl; +template +struct _Tuple_impl<_Idx, _Head, _Tail...> : _Tuple_impl<_Idx + 1, _Tail...>, + _Head_base<_Head> { + template + _Tuple_impl(_UHead __head, _UTail... __tail) + : _Tuple_impl<_Idx + 1, _Tail...>(__tail...), _Head_base<_Head>(__head) {} +}; +template struct _Tuple_impl<_Idx, _Head> { + template _Tuple_impl(_UHead); +}; +template struct tuple : _Tuple_impl<0, _Elements...> { + template + tuple(_UElements... __elements) + : _Tuple_impl<0, _Elements...>(__elements...) {} +}; +unsigned long position_; +struct Zone { + template T *New(Args... args) { + return new (reinterpret_cast(position_)) T(args...); + } +}; +struct Label { + int pos_; + int near_link_pos_; +}; +enum Condition { below_equal }; +void bind(Label *); +Zone *zone(); +unsigned long deopt_info_address(); +int MakeDeferredCode___trans_tmp_2, MakeDeferredCode___trans_tmp_3, + Prologue___trans_tmp_6, MakeDeferredCode___trans_tmp_1; +struct MaglevAssembler { + template + void MakeDeferredCode(Function &&, Args &&...); + template + void JumpToDeferredIf(Condition, Function, Args... args) { + MakeDeferredCode(Function(), args...); + } + void Prologue(); +}; +struct ZoneLabelRef { + ZoneLabelRef(Zone *zone) : label_(zone->New