From: Martin Jambor Date: Mon, 23 Jan 2017 13:05:00 +0000 (+0100) Subject: Fix compute_complex_assign_jump_func X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=bda2bc48c2f813d840a5951c5bb5fd67e8a760f9;p=gcc.git 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f370075e1fd..3ade7c76e27 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +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 diff --git a/gcc/ipa-prop.c b/gcc/ipa-prop.c index 4d77c9b25ef..512bcbed0cb 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 2ac5e2371fc..d53090552ac 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2017-01-23 Martin Jambor + + * gcc.dg/ipa/vrp8.c: New test. + 2017-01-23 Martin Jambor 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 index 00000000000..55832b0886e --- /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" } } */