From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1464) id BD2CF3858C74; Tue, 13 Sep 2022 22:26:38 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org BD2CF3858C74 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1663107998; bh=Ji6S/26tXL+SmYKsq+AUtrX302FMXDNF1fBYlM5hdOc=; h=From:To:Subject:Date:From; b=cbW0b96/e3hGWb9wfUfI69DTedY45b9UYbXSSzkdvMNyUM3LeAen67WgIX6kichk4 VMiQq3uL6DUD6EfC0kmbSGPv1Hb6slsDD9vkDn2q03IR1uZ2yF6k4JkRxLezoN0KsP Xjgvbp3nh0jd++WOOXmmvs0zxCbSTfMrMcB4b1pE= MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Peter Bergner To: gcc-cvs@gcc.gnu.org Subject: [gcc r10-10983] rs6000: Don't ICE when we disassemble an MMA variable [PR101322] X-Act-Checkin: gcc X-Git-Author: Peter Bergner X-Git-Refname: refs/heads/releases/gcc-10 X-Git-Oldrev: 12d28957b613d8c9b74e7841d73945025a7f0ccb X-Git-Newrev: 8301b8e84d833467b435b33592e0aa599d2db582 Message-Id: <20220913222638.BD2CF3858C74@sourceware.org> Date: Tue, 13 Sep 2022 22:26:38 +0000 (GMT) List-Id: https://gcc.gnu.org/g:8301b8e84d833467b435b33592e0aa599d2db582 commit r10-10983-g8301b8e84d833467b435b33592e0aa599d2db582 Author: Peter Bergner Date: Wed Aug 31 21:14:36 2022 -0500 rs6000: Don't ICE when we disassemble an MMA variable [PR101322] When we expand an MMA disassemble built-in with C++ using a pointer that is cast to a valid MMA type, the type isn't passed down to the expand machinery and we end up using the base type of the pointer which leads to an ICE. This patch enforces we always use the correct MMA type regardless of the pointer type being used. 2022-08-31 Peter Bergner gcc/ PR target/101322 * config/rs6000/rs6000-call.c (rs6000_gimple_fold_mma_builtin): Enforce the use of a valid MMA pointer type. gcc/testsuite/ PR target/101322 * g++.target/powerpc/pr101322.C: New test. (cherry picked from commit 2985049049f12b0aa3366ca244d387820385b9e8) Diff: --- gcc/config/rs6000/rs6000-call.c | 7 ++++++- gcc/testsuite/g++.target/powerpc/pr101322.C | 17 +++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/gcc/config/rs6000/rs6000-call.c b/gcc/config/rs6000/rs6000-call.c index 6a47389d564..c910ee5c71a 100644 --- a/gcc/config/rs6000/rs6000-call.c +++ b/gcc/config/rs6000/rs6000-call.c @@ -10855,7 +10855,12 @@ rs6000_gimple_fold_mma_builtin (gimple_stmt_iterator *gsi) push_gimplify_context (true); tree dst_ptr = gimple_call_arg (stmt, 0); tree src_ptr = gimple_call_arg (stmt, 1); - tree src_type = TREE_TYPE (src_ptr); + tree src_type = (fncode == MMA_BUILTIN_DISASSEMBLE_ACC) + ? build_pointer_type (vector_quad_type_node) + : build_pointer_type (vector_pair_type_node); + if (TREE_TYPE (src_ptr) != src_type) + src_ptr = build1 (NOP_EXPR, src_type, src_ptr); + tree src = create_tmp_reg_or_ssa_name (TREE_TYPE (src_type)); gimplify_assign (src, build_simple_mem_ref (src_ptr), &new_seq); diff --git a/gcc/testsuite/g++.target/powerpc/pr101322.C b/gcc/testsuite/g++.target/powerpc/pr101322.C new file mode 100644 index 00000000000..43eaf3afcd4 --- /dev/null +++ b/gcc/testsuite/g++.target/powerpc/pr101322.C @@ -0,0 +1,17 @@ +/* PR target/101322 */ +/* { dg-require-effective-target power10_ok } */ +/* { dg-options "-O2 -mdejagnu-cpu=power10" } */ + +/* Verify we don't ICE on the following test cases. */ + +void +foo (char *resp, char *vpp) +{ + __builtin_vsx_disassemble_pair (resp, (__vector_pair *) vpp); +} + +void +bar (char *resp, char *vpp) +{ + __builtin_mma_disassemble_acc (resp, (__vector_quad *)vpp); +}