Fix compute_complex_assign_jump_func
authorMartin Jambor <mjambor@suse.cz>
Mon, 23 Jan 2017 13:05:00 +0000 (14:05 +0100)
committerMartin Jambor <jamborm@gcc.gnu.org>
Mon, 23 Jan 2017 13:05:00 +0000 (14:05 +0100)
2017-01-23  Martin Jambor  <mjambor@suse.cz>

* ipa-prop.c (load_from_param_1): Removed.
(load_from_unmodified_param): Bits from load_from_param_1 put back
here.
(load_from_param): Removed.
(compute_complex_assign_jump_func): Removed stmt2 and just replaced it
with stmt.  Reverted back to use of load_from_unmodified_param.

testsuite/
* gcc.dg/ipa/vrp8.c: New test.

From-SVN: r244803

gcc/ChangeLog
gcc/ipa-prop.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/ipa/vrp8.c [new file with mode: 0644]

index f370075e1fd93baebd2ecb23303deefc10cc0a38..3ade7c76e279688853250df6bbca798ec145bc2d 100644 (file)
@@ -1,3 +1,12 @@
+2017-01-23  Martin Jambor  <mjambor@suse.cz>
+
+       * ipa-prop.c (load_from_param_1): Removed.
+       (load_from_unmodified_param): Bits from load_from_param_1 put back
+       here.
+       (load_from_param): Removed.
+       (compute_complex_assign_jump_func): Removed stmt2 and just replaced it
+       with stmt.  Reverted back to use of load_from_unmodified_param.
+
 2017-01-23  Martin Jambor  <mjambor@suse.cz>
 
        PR ipa/79108
index 4d77c9b25ef772316e525872f0597d4bb6954d65..512bcbed0cbdee18ff4253e21c77965eb73ee5db 100644 (file)
@@ -862,31 +862,6 @@ parm_preserved_before_stmt_p (struct ipa_func_body_info *fbi, int index,
   return !modified;
 }
 
-/* Main worker for load_from_unmodified_param and load_from_param.
-   If STMT is an assignment that loads a value from an parameter declaration,
-   return the index of the parameter in ipa_node_params.  Otherwise return -1.  */
-
-static int
-load_from_param_1 (struct ipa_func_body_info *fbi,
-                  vec<ipa_param_descriptor, va_gc> *descriptors,
-                  gimple *stmt)
-{
-  int index;
-  tree op1;
-
-  gcc_checking_assert (is_gimple_assign (stmt));
-  op1 = gimple_assign_rhs1 (stmt);
-  if (TREE_CODE (op1) != PARM_DECL)
-    return -1;
-
-  index = ipa_get_param_decl_index_1 (descriptors, op1);
-  if (index < 0
-      || !parm_preserved_before_stmt_p (fbi, index, stmt, op1))
-    return -1;
-
-  return index;
-}
-
 /* If STMT is an assignment that loads a value from an parameter declaration,
    return the index of the parameter in ipa_node_params which has not been
    modified.  Otherwise return -1.  */
@@ -896,29 +871,22 @@ load_from_unmodified_param (struct ipa_func_body_info *fbi,
                            vec<ipa_param_descriptor, va_gc> *descriptors,
                            gimple *stmt)
 {
+  int index;
+  tree op1;
+
   if (!gimple_assign_single_p (stmt))
     return -1;
 
-  return load_from_param_1 (fbi, descriptors, stmt);
-}
-
-/* If STMT is an assignment that loads a value from an parameter declaration,
-   return the index of the parameter in ipa_node_params.  Otherwise return -1.  */
-
-static int
-load_from_param (struct ipa_func_body_info *fbi,
-                vec<ipa_param_descriptor, va_gc> *descriptors,
-                gimple *stmt)
-{
-  if (!is_gimple_assign (stmt))
+  op1 = gimple_assign_rhs1 (stmt);
+  if (TREE_CODE (op1) != PARM_DECL)
     return -1;
 
-  enum tree_code rhs_code = gimple_assign_rhs_code (stmt);
-  if ((get_gimple_rhs_class (rhs_code) != GIMPLE_SINGLE_RHS)
-      && (get_gimple_rhs_class (rhs_code) != GIMPLE_UNARY_RHS))
+  index = ipa_get_param_decl_index_1 (descriptors, op1);
+  if (index < 0
+      || !parm_preserved_before_stmt_p (fbi, index, stmt, op1))
     return -1;
 
-  return load_from_param_1 (fbi, descriptors, stmt);
+  return index;
 }
 
 /* Return true if memory reference REF (which must be a load through parameter
@@ -1154,7 +1122,6 @@ compute_complex_assign_jump_func (struct ipa_func_body_info *fbi,
   tree op1, tc_ssa, base, ssa;
   bool reverse;
   int index;
-  gimple *stmt2 = stmt;
 
   op1 = gimple_assign_rhs1 (stmt);
 
@@ -1163,16 +1130,13 @@ compute_complex_assign_jump_func (struct ipa_func_body_info *fbi,
       if (SSA_NAME_IS_DEFAULT_DEF (op1))
        index = ipa_get_param_decl_index (info, SSA_NAME_VAR (op1));
       else
-       {
-         index = load_from_param (fbi, info->descriptors,
-                                  SSA_NAME_DEF_STMT (op1));
-         stmt2 = SSA_NAME_DEF_STMT (op1);
-       }
+       index = load_from_unmodified_param (fbi, info->descriptors,
+                                           SSA_NAME_DEF_STMT (op1));
       tc_ssa = op1;
     }
   else
     {
-      index = load_from_param (fbi, info->descriptors, stmt);
+      index = load_from_unmodified_param (fbi, info->descriptors, stmt);
       tc_ssa = gimple_assign_lhs (stmt);
     }
 
@@ -1202,11 +1166,11 @@ compute_complex_assign_jump_func (struct ipa_func_body_info *fbi,
            break;
          }
        case GIMPLE_UNARY_RHS:
-         if (is_gimple_assign (stmt2)
-             && gimple_assign_rhs_class (stmt2) == GIMPLE_UNARY_RHS
-             && ! CONVERT_EXPR_CODE_P (gimple_assign_rhs_code (stmt2)))
+         if (is_gimple_assign (stmt)
+             && gimple_assign_rhs_class (stmt) == GIMPLE_UNARY_RHS
+             && ! CONVERT_EXPR_CODE_P (gimple_assign_rhs_code (stmt)))
            ipa_set_jf_unary_pass_through (jfunc, index,
-                                          gimple_assign_rhs_code (stmt2));
+                                          gimple_assign_rhs_code (stmt));
        default:;
        }
       return;
index 2ac5e2371fc1c29c335c36411cb364f24514498a..d53090552ac2a18452c6f4328be5b241cc2b57b2 100644 (file)
@@ -1,3 +1,7 @@
+2017-01-23  Martin Jambor  <mjambor@suse.cz>
+
+       * gcc.dg/ipa/vrp8.c: New test.
+
 2017-01-23  Martin Jambor  <mjambor@suse.cz>
 
        PR ipa/79108
diff --git a/gcc/testsuite/gcc.dg/ipa/vrp8.c b/gcc/testsuite/gcc.dg/ipa/vrp8.c
new file mode 100644 (file)
index 0000000..55832b0
--- /dev/null
@@ -0,0 +1,42 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fdump-ipa-cp-details" } */
+
+volatile int cond;
+int abs (int);
+
+volatile int g;
+
+int __attribute__((noinline, noclone))
+take_address (int *p)
+{
+  g = *p;
+}
+
+static int __attribute__((noinline, noclone))
+foo (int i)
+{
+  if (i < 5)
+    __builtin_abort ();
+  return 0;
+}
+
+static int __attribute__((noinline, noclone))
+bar (int j)
+{
+  foo (~j);
+  foo (abs (j));
+  foo (j);
+  take_address (&j);
+  return 0;
+}
+
+int
+main ()
+{
+  for (unsigned int i = 0; i < 10; ++i)
+    bar (i);
+
+  return 0;
+}
+
+/* { dg-final { scan-ipa-dump-times "Setting value range of param 0 \\\[-10, 9\\\]" 1 "cp" } } */