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
This commit is contained in:
parent
f65f1ae3b9
commit
bda2bc48c2
4 changed files with 71 additions and 52 deletions
|
@ -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
|
||||
|
|
|
@ -862,19 +862,21 @@ 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. */
|
||||
/* 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. */
|
||||
|
||||
static int
|
||||
load_from_param_1 (struct ipa_func_body_info *fbi,
|
||||
vec<ipa_param_descriptor, va_gc> *descriptors,
|
||||
gimple *stmt)
|
||||
load_from_unmodified_param (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));
|
||||
if (!gimple_assign_single_p (stmt))
|
||||
return -1;
|
||||
|
||||
op1 = gimple_assign_rhs1 (stmt);
|
||||
if (TREE_CODE (op1) != PARM_DECL)
|
||||
return -1;
|
||||
|
@ -887,40 +889,6 @@ load_from_param_1 (struct ipa_func_body_info *fbi,
|
|||
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. */
|
||||
|
||||
static int
|
||||
load_from_unmodified_param (struct ipa_func_body_info *fbi,
|
||||
vec<ipa_param_descriptor, va_gc> *descriptors,
|
||||
gimple *stmt)
|
||||
{
|
||||
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))
|
||||
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))
|
||||
return -1;
|
||||
|
||||
return load_from_param_1 (fbi, descriptors, stmt);
|
||||
}
|
||||
|
||||
/* Return true if memory reference REF (which must be a load through parameter
|
||||
with INDEX) loads data that are known to be unmodified in this function
|
||||
before reaching statement STMT. */
|
||||
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
42
gcc/testsuite/gcc.dg/ipa/vrp8.c
Normal file
42
gcc/testsuite/gcc.dg/ipa/vrp8.c
Normal file
|
@ -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" } } */
|
Loading…
Add table
Reference in a new issue