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.
--- /dev/null
+/* { 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;
+}
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)