Skip to content

Commit

Permalink
tree-optimization/116057 - wrong code with CCP and vector CTORs
Browse files Browse the repository at this point in the history
The following fixes an issue with CCPs likely_value when faced with
a vector CTOR containing undef SSA names and constants.  This should
be classified as CONSTANT and not UNDEFINED.

	PR tree-optimization/116057
	* tree-ssa-ccp.cc (likely_value): Also walk CTORs in stmt
	operands to look for constants.

	* gcc.dg/torture/pr116057.c: New testcase.
  • Loading branch information
rguenth authored and Richard Biener committed Jul 24, 2024
1 parent 39562dd commit 1ea5515
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 0 deletions.
20 changes: 20 additions & 0 deletions gcc/testsuite/gcc.dg/torture/pr116057.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
/* { dg-do run } */
/* { dg-additional-options "-Wno-psabi" } */

#define vect8 __attribute__((vector_size(8)))

vect8 int __attribute__((noipa))
f(int a)
{
int b;
vect8 int t={1,1};
if(a) return t;
return (vect8 int){0, b};
}

int main ()
{
if (f(0)[0] != 0)
__builtin_abort ();
return 0;
}
11 changes: 11 additions & 0 deletions gcc/tree-ssa-ccp.cc
Original file line number Diff line number Diff line change
Expand Up @@ -762,6 +762,17 @@ likely_value (gimple *stmt)
continue;
if (is_gimple_min_invariant (op))
has_constant_operand = true;
else if (TREE_CODE (op) == CONSTRUCTOR)
{
unsigned j;
tree val;
FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (op), j, val)
if (CONSTANT_CLASS_P (val))
{
has_constant_operand = true;
break;
}
}
}

if (has_constant_operand)
Expand Down

0 comments on commit 1ea5515

Please sign in to comment.