Commit 47772af1 by Feng Xue Committed by Jeff Law

Do not propagate self-dependent value (PR ipa/93763)

        PR ipa/93763
        * ipa-cp.c (self_recursively_generated_p): Mark self-dependent value as
        self-recursively generated.
parent 147add96
......@@ -1897,8 +1897,8 @@ ipcp_lattice<valtype>::add_value (valtype newval, cgraph_edge *cs,
}
/* Return true, if a ipcp_value VAL is orginated from parameter value of
self-feeding recursive function by applying non-passthrough arithmetic
transformation. */
self-feeding recursive function via some kind of pass-through jump
function. */
static bool
self_recursively_generated_p (ipcp_value<tree> *val)
......@@ -1909,10 +1909,12 @@ self_recursively_generated_p (ipcp_value<tree> *val)
{
cgraph_edge *cs = src->cs;
if (!src->val || cs->caller != cs->callee->function_symbol ()
|| src->val == val)
if (!src->val || cs->caller != cs->callee->function_symbol ())
return false;
if (src->val == val)
continue;
if (!info)
info = IPA_NODE_REF (cs->caller);
......
/* { dg-do compile } */
/* { dg-options "-O3" } */
struct search_param {
int total;
};
void search_trivial(search_param error_left) {
search_trivial(error_left);
search_param error_left2{error_left};
error_left2.total--;
search_trivial(error_left2);
}
void search_algo_uni(search_param error_left) { search_trivial(error_left); }
void search_algo(search_param error_left) { search_algo_uni(error_left); }
int main() { search_algo({}); return 0; }
/* { dg-do compile } */
/* { dg-options "-O3" } */
typedef struct a a;
struct a {
a *b
} d;
e, k, ah, al;
f(aa) {
if (aa & 1)
goto g;
f(aa | 2);
g:
h();
}
l() {
{
f(072);
i(e, d, 92);
}
}
ag() {
{ i(e, d, 36); }
}
ai(a *m, a *n, unsigned aa) {
f(aa);
j(k, l, ah, 1);
}
j(int c, a m, int aj, int aa) {
int ak = aa;
{ i(e, d, ak); }
}
i(int c, a *m, unsigned aa) {
{
{ i(c, (*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(
*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(
*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*m).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b)
.b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b)
.b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b)
.b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b)
.b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b).b, 0);
}
}
int am = aa;
ai(ag, al, am);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment