Commit 64e5228e by Martin Jambor Committed by Martin Jambor

re PR tree-optimization/63551 (wrong code (segfaults) at -Os on x86_64-linux-gnu)

2014-12-01  Martin Jambor  <mjambor@suse.cz>

	PR ipa/63551
	* ipa-inline-analysis.c (evaluate_conditions_for_known_args): Convert
	value of the argument to the type of the value in the condition.

testsuite/
	* gcc.dg/ipa/pr63551.c: New test.
	* gcc.dg/ipa/pr64041.c: Likewise.

From-SVN: r218205
parent f37477e5
2014-12-01 Martin Jambor <mjambor@suse.cz>
PR ipa/63551
* ipa-inline-analysis.c (evaluate_conditions_for_known_args): Convert
value of the argument to the type of the value in the condition.
2014-12-01 Oleg Endo <olegendo@gcc.gnu.org>
PR target/63986
......@@ -880,7 +880,10 @@ evaluate_conditions_for_known_args (struct cgraph_node *node,
}
if (c->code == IS_NOT_CONSTANT || c->code == CHANGED)
continue;
res = fold_binary_to_constant (c->code, boolean_type_node, val, c->val);
val = fold_unary (VIEW_CONVERT_EXPR, TREE_TYPE (c->val), val);
res = val
? fold_binary_to_constant (c->code, boolean_type_node, val, c->val)
: NULL;
if (res && integer_zerop (res))
continue;
clause |= 1 << (i + predicate_first_dynamic_condition);
......
2014-12-01 Martin Jambor <mjambor@suse.cz>
PR ipa/63551
* gcc.dg/ipa/pr63551.c: New test.
* gcc.dg/ipa/pr64041.c: Likewise.
2014-12-01 Ilya Tocar <ilya.tocar@intel.com>
* gcc.target/i386/avx512bw-vdbpsadbw-2.c: Move defines from options.
......
/* { dg-do run } */
/* { dg-options "-Os" } */
union U
{
unsigned int f0;
int f1;
};
int a, d;
void
fn1 (union U p)
{
if (p.f1 <= 0)
if (a)
d = 0;
}
void
fn2 ()
{
d = 0;
union U b = { 4294967286 };
fn1 (b);
}
int
main ()
{
fn2 ();
return 0;
}
/* { dg-do run } */
/* { dg-options "-O2" } */
int printf (const char *, ...);
int a, b = 1, d;
union U1
{
unsigned int f0;
int f1;
};
union U2
{
int f2;
int f3;
} c;
int
fn1 (int p)
{
int t = p && a || p && a && p;
return t ? t : a;
}
unsigned
fn2 (union U1 p1, union U2 p2)
{
if (p1.f1 <= 0)
{
for (; p2.f2;)
c.f2 = 0;
p2.f2 = fn1 (d);
}
return p2.f3;
}
int g = 0;
int
foo ()
{
if (b)
{
union U1 f = { 0xFFFFFFFFU };
fn2 (f, c);
}
g = 1;
return 0;
}
int
main ()
{
foo ();
if (g == 0)
__builtin_abort ();
return 0;
}
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