diff options
author | Martin Jambor <mjambor@suse.cz> | 2017-01-23 14:05:00 +0100 |
---|---|---|
committer | Martin Jambor <jamborm@gcc.gnu.org> | 2017-01-23 14:05:00 +0100 |
commit | bda2bc48c2f813d840a5951c5bb5fd67e8a760f9 (patch) | |
tree | fd888539f06e2b3b1974d923013898a59c5f4412 /gcc/ipa-prop.c | |
parent | f65f1ae3b9d81f5a0cb7abd41b30ebaf4b8f19b9 (diff) | |
download | gcc-bda2bc48c2f813d840a5951c5bb5fd67e8a760f9.zip gcc-bda2bc48c2f813d840a5951c5bb5fd67e8a760f9.tar.gz gcc-bda2bc48c2f813d840a5951c5bb5fd67e8a760f9.tar.bz2 |
Fix compute_complex_assign_jump_func
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
Diffstat (limited to 'gcc/ipa-prop.c')
-rw-r--r-- | gcc/ipa-prop.c | 68 |
1 files changed, 16 insertions, 52 deletions
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<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; |