+2015-11-02 Alexandre Oliva <aoliva@redhat.com>
+
+ PR tree-optimization/68083
+ * tree-ssa-ifcombine.c: Include tree-ssa.h.
+ (bb_no_side_effects_p): Test for undefined uses too.
+ * tree-ssa.c (gimple_uses_undefined_value_p): New.
+ * tree-ssa.h (gimple_uses_undefined_value_p): Declare.
+
2015-10-23 Steve Ellcey <sellcey@imgtec.com>
* MAINTAINERS: Update email address.
+2015-11-02 Alexandre Oliva <aoliva@redhat.com>
+
+ PR tree-optimization/68083
+ * tree-ssa-ifcombine.c: Include tree-ssa.h.
+ (bb_no_side_effects_p): Test for undefined uses too.
+ * tree-ssa.c (gimple_uses_undefined_value_p): New.
+ * tree-ssa.h (gimple_uses_undefined_value_p): Declare.
+
2015-11-02 Jeff Law <jeff@redhat.com>
* tree-ssa-threadupdate.c (valid_jump_thread_path): Also detect
+2015-11-02 Alexandre Oliva <aoliva@redhat.com>
+
+ PR tree-optimization/68083
+ * gcc.dg/torture/pr68083.c: New. From Zhendong Su.
+
2015-11-02 Jeff Law <law@redhat.com>
* gcc.dg/tree-ssa/ssa-thread-11.c: Verify that we do not have
--- /dev/null
+/* { dg-do run } */
+
+int a = 2, b = 1, c = 1;
+
+int
+fn1 ()
+{
+ int d;
+ for (; a; a--)
+ {
+ for (d = 0; d < 4; d++)
+ {
+ int k;
+ if (c < 1)
+ if (k)
+ c = 0;
+ if (b)
+ continue;
+ return 0;
+ }
+ b = !1;
+ }
+ return 0;
+}
+
+int
+main ()
+{
+ fn1 ();
+
+ if (a != 1)
+ __builtin_abort ();
+
+ return 0;
+}
#include "gimple-iterator.h"
#include "gimplify-me.h"
#include "tree-cfg.h"
+#include "tree-ssa.h"
#ifndef LOGICAL_OP_NON_SHORT_CIRCUIT
#define LOGICAL_OP_NON_SHORT_CIRCUIT \
continue;
if (gimple_has_side_effects (stmt)
+ || gimple_uses_undefined_value_p (stmt)
|| gimple_could_trap_p (stmt)
|| gimple_vuse (stmt))
return false;
}
+/* Return TRUE iff STMT, a gimple statement, references an undefined
+ SSA name. */
+
+bool
+gimple_uses_undefined_value_p (gimple *stmt)
+{
+ ssa_op_iter iter;
+ tree op;
+
+ FOR_EACH_SSA_TREE_OPERAND (op, stmt, iter, SSA_OP_USE)
+ if (ssa_undefined_value_p (op))
+ return true;
+
+ return false;
+}
+
+
+
/* If necessary, rewrite the base of the reference tree *TP from
a MEM_REF to a plain or converted symbol. */
extern tree tree_ssa_strip_useless_type_conversions (tree);
extern bool ssa_undefined_value_p (tree, bool = true);
+extern bool gimple_uses_undefined_value_p (gimple *);
extern void execute_update_addresses_taken (void);
/* Given an edge_var_map V, return the PHI arg definition. */