diff mbox series

Fix PR87200

Message ID alpine.LSU.2.20.1809031551300.16707@zhemvz.fhfr.qr
State New
Headers show
Series Fix PR87200 | expand

Commit Message

Richard Biener Sept. 3, 2018, 1:52 p.m. UTC
The following adds a missed valueization to vn_nary_build_or_lookup_1
which previously could have returned an available SSA name as 
simplification result instead of its value-number.

Bootstrapped on x86_64-unknown-linux-gnu, testing in progress.

Richard.

2018-09-03  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/87200
	* tree-ssa-sccvn.c (vn_nary_build_or_lookup_1): Valueize a
	simplify result.

	* gcc.dg/torture/pr87200.c: New testcase.
diff mbox series

Patch

Index: gcc/tree-ssa-sccvn.c
===================================================================
--- gcc/tree-ssa-sccvn.c	(revision 264049)
+++ gcc/tree-ssa-sccvn.c	(working copy)
@@ -1759,8 +1759,13 @@  vn_nary_build_or_lookup_1 (gimple_match_
   gimple *new_stmt = NULL;
   if (res
       && gimple_simplified_result_is_gimple_val (res_op))
-    /* The expression is already available.  */
-    result = res_op->ops[0];
+    {
+      /* The expression is already available.  */
+      result = res_op->ops[0];
+      /* Valueize it, simplification returns sth in AVAIL only.  */
+      if (TREE_CODE (result) == SSA_NAME)
+	result = SSA_VAL (result);
+    }
   else
     {
       tree val = vn_lookup_simplify_result (res_op);
Index: gcc/testsuite/gcc.dg/torture/pr87200.c
===================================================================
--- gcc/testsuite/gcc.dg/torture/pr87200.c	(nonexistent)
+++ gcc/testsuite/gcc.dg/torture/pr87200.c	(working copy)
@@ -0,0 +1,23 @@ 
+/* { dg-do compile } */
+
+unsigned long long int ry;
+
+int
+gl (void)
+{
+  long long int my = 0;
+  unsigned long long int *oi = (unsigned long long int *) &my;
+  int s9;
+
+  s9 = !!gl () ? ry : 0;
+  if (s9 != 0)
+    oi = &ry;
+  else
+    {
+      my = ry;
+      *oi += my;
+    }
+
+  return *oi;
+}
+