From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 7926) id 7FE2A3858426; Tue, 27 Feb 2024 08:51:46 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 7FE2A3858426 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1709023906; bh=BfIn/DJPPOzO9SbugC3WtkyrhkRgbBWrMiPfDKDsHao=; h=From:To:Subject:Date:From; b=hB/W7gv0fK5d6GzdHpPx0krLnk4fq/U7YuWQIrC6y6oB5YQ16pxqSib+HJAHKyZsT z6CxOw1mrVgxFUdKcoUDT6IygbGfa4hIto/bx/+dzVFJBSvRvlTdad0hdX7DIVRklp ++UVs5hofbyFpKIip0Im0InQi21ZZsZ2EUkKKZEE= MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: jeevitha To: gcc-cvs@gcc.gnu.org Subject: [gcc r11-11257] rs6000: Don't allow AltiVec address in movoo & movxo pattern [PR110411] X-Act-Checkin: gcc X-Git-Author: Jeevitha X-Git-Refname: refs/heads/releases/gcc-11 X-Git-Oldrev: 6a20a80f62a716fa36234e844d210795c64bbdd5 X-Git-Newrev: 41af48a1750635a72c48a5809e713d9dd14d9655 Message-Id: <20240227085146.7FE2A3858426@sourceware.org> Date: Tue, 27 Feb 2024 08:51:46 +0000 (GMT) List-Id: https://gcc.gnu.org/g:41af48a1750635a72c48a5809e713d9dd14d9655 commit r11-11257-g41af48a1750635a72c48a5809e713d9dd14d9655 Author: Jeevitha Date: Thu Aug 31 05:40:18 2023 -0500 rs6000: Don't allow AltiVec address in movoo & movxo pattern [PR110411] There are no instructions that do traditional AltiVec addresses (i.e. with the low four bits of the address masked off) for OOmode and XOmode objects. The solution is to modify the constraints used in the movoo and movxo pattern to disallow these types of addresses, which assists LRA in resolving this issue. Furthermore, the mode size 16 check has been removed in vsx_quad_dform_memory_operand to allow OOmode and XOmode, and quad_address_p already handles less than size 16. 2023-08-31 Jeevitha Palanisamy gcc/ PR target/110411 * config/rs6000/mma.md (define_insn_and_split movoo): Disallow AltiVec address operands. (define_insn_and_split movxo): Likewise. * config/rs6000/predicates.md (vsx_quad_dform_memory_operand): Remove redundant mode size check. gcc/testsuite/ PR target/110411 * gcc.target/powerpc/pr110411-1.c: New testcase. * gcc.target/powerpc/pr110411-2.c: New testcase. (cherry picked from commit 9ea1248604d7b65009af32103814332f35bd33e2) Diff: --- gcc/config/rs6000/mma.md | 8 ++++---- gcc/config/rs6000/predicates.md | 2 +- gcc/testsuite/gcc.target/powerpc/pr110411-1.c | 21 +++++++++++++++++++++ gcc/testsuite/gcc.target/powerpc/pr110411-2.c | 12 ++++++++++++ 4 files changed, 38 insertions(+), 5 deletions(-) diff --git a/gcc/config/rs6000/mma.md b/gcc/config/rs6000/mma.md index 2bf4d1718e3..b25d5a997ab 100644 --- a/gcc/config/rs6000/mma.md +++ b/gcc/config/rs6000/mma.md @@ -292,8 +292,8 @@ }) (define_insn_and_split "*movoo" - [(set (match_operand:OO 0 "nonimmediate_operand" "=wa,m,wa") - (match_operand:OO 1 "input_operand" "m,wa,wa"))] + [(set (match_operand:OO 0 "nonimmediate_operand" "=wa,ZwO,wa") + (match_operand:OO 1 "input_operand" "ZwO,wa,wa"))] "TARGET_MMA && (gpc_reg_operand (operands[0], OOmode) || gpc_reg_operand (operands[1], OOmode))" @@ -339,8 +339,8 @@ }) (define_insn_and_split "*movxo" - [(set (match_operand:XO 0 "nonimmediate_operand" "=d,m,d") - (match_operand:XO 1 "input_operand" "m,d,d"))] + [(set (match_operand:XO 0 "nonimmediate_operand" "=d,ZwO,d") + (match_operand:XO 1 "input_operand" "ZwO,d,d"))] "TARGET_MMA && (gpc_reg_operand (operands[0], XOmode) || gpc_reg_operand (operands[1], XOmode))" diff --git a/gcc/config/rs6000/predicates.md b/gcc/config/rs6000/predicates.md index edc8cab0e0e..5a8b1236334 100644 --- a/gcc/config/rs6000/predicates.md +++ b/gcc/config/rs6000/predicates.md @@ -780,7 +780,7 @@ (define_predicate "vsx_quad_dform_memory_operand" (match_code "mem") { - if (!TARGET_P9_VECTOR || !MEM_P (op) || GET_MODE_SIZE (mode) != 16) + if (!TARGET_P9_VECTOR) return false; return quad_address_p (XEXP (op, 0), mode, false); diff --git a/gcc/testsuite/gcc.target/powerpc/pr110411-1.c b/gcc/testsuite/gcc.target/powerpc/pr110411-1.c new file mode 100644 index 00000000000..6b0dbb00ea2 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/pr110411-1.c @@ -0,0 +1,21 @@ +/* PR target/110411 */ +/* { dg-options "-O2 -mdejagnu-cpu=power10 -mblock-ops-vector-pair" } */ + +/* Verify we do not ICE on the following. */ + +#include + +struct s { + long a; + long b; + long c; + long d: 1; +}; +unsigned long ptr; + +void +bug (struct s *dst) +{ + struct s *src = (struct s *)(ptr & ~0xFUL); + memcpy (dst, src, sizeof(struct s)); +} diff --git a/gcc/testsuite/gcc.target/powerpc/pr110411-2.c b/gcc/testsuite/gcc.target/powerpc/pr110411-2.c new file mode 100644 index 00000000000..c2046fb9855 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/pr110411-2.c @@ -0,0 +1,12 @@ +/* PR target/110411 */ +/* { dg-require-effective-target power10_ok } */ +/* { dg-options "-O2 -mdejagnu-cpu=power10" } */ + +/* Verify we do not ICE on the following. */ + +void +bug (__vector_quad *dst) +{ + dst = (__vector_quad *)((unsigned long)dst & ~0xFUL); + __builtin_mma_xxsetaccz (dst); +}