From bda2bc48c2f813d840a5951c5bb5fd67e8a760f9 Mon Sep 17 00:00:00 2001 From: Martin Jambor Date: Mon, 23 Jan 2017 14:05:00 +0100 Subject: [PATCH] Fix compute_complex_assign_jump_func 2017-01-23 Martin Jambor * 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 | 9 ++++++ gcc/ipa-prop.c | 68 ++++++++++------------------------------- gcc/testsuite/ChangeLog | 4 +++ gcc/testsuite/gcc.dg/ipa/vrp8.c | 42 +++++++++++++++++++++++++ 4 files changed, 71 insertions(+), 52 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/ipa/vrp8.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f370075..3ade7c7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,14 @@ 2017-01-23 Martin Jambor + * 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 + PR ipa/79108 * ipa-prop.h (ipa_param_descriptor): Anotate with with GTY(()). (ipa_node_params): Annotate with GTY((for_user)). Make descriptors diff --git a/gcc/ipa-prop.c b/gcc/ipa-prop.c index 4d77c9b..512bcbe 100644 --- a/gcc/ipa-prop.c +++ b/gcc/ipa-prop.c @@ -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 *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 *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 *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; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 2ac5e23..d530905 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,9 @@ 2017-01-23 Martin Jambor + * gcc.dg/ipa/vrp8.c: New test. + +2017-01-23 Martin Jambor + PR ipa/79108 * gfortran.dg/lto/pr79108_0.f90: New test. diff --git a/gcc/testsuite/gcc.dg/ipa/vrp8.c b/gcc/testsuite/gcc.dg/ipa/vrp8.c new file mode 100644 index 0000000..55832b0 --- /dev/null +++ b/gcc/testsuite/gcc.dg/ipa/vrp8.c @@ -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" } } */ -- 2.7.4