From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2153) id 290C9383940F; Wed, 11 May 2022 06:25:18 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 290C9383940F MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Jakub Jelinek To: gcc-cvs@gcc.gnu.org Subject: [gcc r9-10134] match.pd: Don't create BIT_NOT_EXPRs for COMPLEX_TYPE [PR104675] X-Act-Checkin: gcc X-Git-Author: Jakub Jelinek X-Git-Refname: refs/heads/releases/gcc-9 X-Git-Oldrev: 2692cbbc12dd08a9f82411e1baf43d6211329b6c X-Git-Newrev: ff9fe8ef031ed29247b283201f6cfcf729502e11 Message-Id: <20220511062518.290C9383940F@sourceware.org> Date: Wed, 11 May 2022 06:25:18 +0000 (GMT) X-BeenThere: gcc-cvs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 11 May 2022 06:25:18 -0000 https://gcc.gnu.org/g:ff9fe8ef031ed29247b283201f6cfcf729502e11 commit r9-10134-gff9fe8ef031ed29247b283201f6cfcf729502e11 Author: Jakub Jelinek Date: Fri Feb 25 10:55:17 2022 +0100 match.pd: Don't create BIT_NOT_EXPRs for COMPLEX_TYPE [PR104675] We don't support BIT_{AND,IOR,XOR,NOT}_EXPR on complex types, &/|/^ are just rejected for them, and ~ is parsed as CONJ_EXPR. So, we should avoid simplifications which turn valid complex type expressions into something that will ICE during expansion. 2022-02-25 Jakub Jelinek PR tree-optimization/104675 * match.pd (-A - 1 -> ~A, -1 - A -> ~A): Don't simplify for COMPLEX_TYPE. * gcc.dg/pr104675-1.c: New test. * gcc.dg/pr104675-2.c: New test. (cherry picked from commit 758671b88b78d7629376b118ec6ca6bcfbabbd36) Diff: --- gcc/match.pd | 4 +++- gcc/testsuite/gcc.dg/pr104675-1.c | 29 +++++++++++++++++++++++++++++ gcc/testsuite/gcc.dg/pr104675-2.c | 18 ++++++++++++++++++ 3 files changed, 50 insertions(+), 1 deletion(-) diff --git a/gcc/match.pd b/gcc/match.pd index cd3ad159455..92a676c4a5a 100644 --- a/gcc/match.pd +++ b/gcc/match.pd @@ -1987,13 +1987,15 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) (simplify (minus (convert? (negate @0)) integer_each_onep) (if (!TYPE_OVERFLOW_TRAPS (type) + && TREE_CODE (type) != COMPLEX_TYPE && tree_nop_conversion_p (type, TREE_TYPE (@0))) (bit_not (convert @0)))) /* -1 - A -> ~A */ (simplify (minus integer_all_onesp @0) - (bit_not @0)) + (if (TREE_CODE (type) != COMPLEX_TYPE) + (bit_not @0))) /* (T)(P + A) - (T)P -> (T) A */ (simplify diff --git a/gcc/testsuite/gcc.dg/pr104675-1.c b/gcc/testsuite/gcc.dg/pr104675-1.c new file mode 100644 index 00000000000..af0b4390c30 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr104675-1.c @@ -0,0 +1,29 @@ +/* PR tree-optimization/104675 */ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +_Complex int +foo (_Complex int a) +{ + return (-1 + -1i) - a; +} + +_Complex int +bar (_Complex int a) +{ + return -a - (1 + 1i); +} + +_Complex int +baz (_Complex int a) +{ + _Complex int b = -1 + -1i; + return b - a; +} + +_Complex int +qux (_Complex int a) +{ + _Complex int b = 1 + 1i; + return -a - b; +} diff --git a/gcc/testsuite/gcc.dg/pr104675-2.c b/gcc/testsuite/gcc.dg/pr104675-2.c new file mode 100644 index 00000000000..037d0c4f10d --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr104675-2.c @@ -0,0 +1,18 @@ +/* PR tree-optimization/104675 */ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +void baz (int i); + +void +bar (_Complex int c, short s) +{ + c -= s; + baz (__real__ c + __imag__ c); +} + +void +foo (void) +{ + bar (-1 - 1i, 0); +}