From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1011) id 0E9E23857342; Thu, 15 Jun 2023 17:38:13 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 0E9E23857342 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1686850693; bh=zNiY1ig75g7oXTVlv+NQvbPcA0gtZG7YGg689+qKyd0=; h=From:To:Subject:Date:From; b=Z3SJMYoLFNPcIsJ+5wObC4I+QoWtGm1yl4wG7Bay+Oa2XW7TEBe4LD7UNyEOtML3N X0QhROvSNGHaS1Pct2MCeCVfo4uU84aa0VUbgaYFJEDn0zb2Nv8Nk1ctdrvH4oI+Q9 tmips6K2meFraSnr/cKl8ejC6kXDB60s8Rur85wE= MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Andrew Macleod To: gcc-cvs@gcc.gnu.org Subject: [gcc r14-1871] Check for integer only complex. X-Act-Checkin: gcc X-Git-Author: Andrew MacLeod X-Git-Refname: refs/heads/master X-Git-Oldrev: 37f373e974ac0a272b0e2b24e27c08833ad43470 X-Git-Newrev: 6c121a2c687c56b09ecc11ef6ae1893ec5006325 Message-Id: <20230615173813.0E9E23857342@sourceware.org> Date: Thu, 15 Jun 2023 17:38:13 +0000 (GMT) List-Id: https://gcc.gnu.org/g:6c121a2c687c56b09ecc11ef6ae1893ec5006325 commit r14-1871-g6c121a2c687c56b09ecc11ef6ae1893ec5006325 Author: Andrew MacLeod Date: Thu Jun 15 11:59:55 2023 -0400 Check for integer only complex. With the expanded capabilities of range-op dispatch, floating point complex objects can appear when folding, whic they couldn't before. In the processig for extracting integers from complex ints, make sure it is an integer complex. PR tree-optimization/110266 gcc/ * gimple-range-fold.cc (adjust_imagpart_expr): Check for integer complex type. (adjust_realpart_expr): Ditto. gcc/testsuite/ * gcc.dg/pr110266.c: New. Diff: --- gcc/gimple-range-fold.cc | 6 ++++-- gcc/testsuite/gcc.dg/pr110266.c | 20 ++++++++++++++++++++ 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/gcc/gimple-range-fold.cc b/gcc/gimple-range-fold.cc index efcc3d8bf5b..d07246008f0 100644 --- a/gcc/gimple-range-fold.cc +++ b/gcc/gimple-range-fold.cc @@ -508,7 +508,8 @@ adjust_imagpart_expr (vrange &res, const gimple *stmt) && gimple_assign_rhs_code (def_stmt) == COMPLEX_CST) { tree cst = gimple_assign_rhs1 (def_stmt); - if (TREE_CODE (cst) == COMPLEX_CST) + if (TREE_CODE (cst) == COMPLEX_CST + && TREE_CODE (TREE_TYPE (TREE_TYPE (cst))) == INTEGER_TYPE) { wide_int w = wi::to_wide (TREE_IMAGPART (cst)); int_range<1> imag (TREE_TYPE (TREE_IMAGPART (cst)), w, w); @@ -535,7 +536,8 @@ adjust_realpart_expr (vrange &res, const gimple *stmt) && gimple_assign_rhs_code (def_stmt) == COMPLEX_CST) { tree cst = gimple_assign_rhs1 (def_stmt); - if (TREE_CODE (cst) == COMPLEX_CST) + if (TREE_CODE (cst) == COMPLEX_CST + && TREE_CODE (TREE_TYPE (TREE_TYPE (cst))) == INTEGER_TYPE) { wide_int imag = wi::to_wide (TREE_REALPART (cst)); int_range<2> tmp (TREE_TYPE (TREE_REALPART (cst)), imag, imag); diff --git a/gcc/testsuite/gcc.dg/pr110266.c b/gcc/testsuite/gcc.dg/pr110266.c new file mode 100644 index 00000000000..0b2acb5a791 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr110266.c @@ -0,0 +1,20 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +#include + +int Hann_i, PsyBufferUpdate_psyInfo_0, PsyBufferUpdate_i; +double *mdct_data; +double PsyBufferUpdate_sfreq; +void PsyBufferUpdate() { + if (PsyBufferUpdate_psyInfo_0 == 4) + for (; Hann_i;) + ; + { + double xr_0 = cos(PsyBufferUpdate_psyInfo_0); + PsyBufferUpdate_sfreq = sin(PsyBufferUpdate_psyInfo_0); + for (; PsyBufferUpdate_psyInfo_0; PsyBufferUpdate_i++) + mdct_data[PsyBufferUpdate_i] = xr_0 * PsyBufferUpdate_sfreq; + } +} +