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.
This commit is contained in:
parent
37f373e974
commit
6c121a2c68
2 changed files with 24 additions and 2 deletions
|
@ -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);
|
||||
|
|
20
gcc/testsuite/gcc.dg/pr110266.c
Normal file
20
gcc/testsuite/gcc.dg/pr110266.c
Normal file
|
@ -0,0 +1,20 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2" } */
|
||||
|
||||
#include <math.h>
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
Loading…
Add table
Reference in a new issue