re PR tree-optimization/70005 (wrong code at -O2 and -O3 on x86_64-linux-gnu)
PR tree-optimization/70005 * tree-ssa-uncprop.c (associate_equivalences_with_edges): Handle case where an object with a boolean range is compared against a value outside [0..1]. PR tree-optimization/70005 * gcc.c-torture/execute/pr70005.c New test. From-SVN: r233829
This commit is contained in:
parent
0c6072a3fc
commit
e66f219b03
4 changed files with 35 additions and 1 deletions
|
@ -1,5 +1,10 @@
|
|||
2016-02-28 Jeff Law <law@redhat.com>
|
||||
|
||||
PR tree-optimization/70005
|
||||
* tree-ssa-uncprop.c (associate_equivalences_with_edges): Handle case
|
||||
where an object with a boolean range is compared against a value
|
||||
outside [0..1].
|
||||
|
||||
PR tree-optimization/69999
|
||||
* gimple-ssa-split-paths.c (split_paths): When duplicating a block
|
||||
with an outgoing edge marked with EDGE_IRREDUCIBLE_LOOP, schedule
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
2016-02-29 Jeff Law <law@redhat.com>
|
||||
|
||||
PR tree-optimization/70005
|
||||
* gcc.c-torture/execute/pr70005.c New test.
|
||||
|
||||
PR tree-optimization/69999
|
||||
* gcc.c-torture/compile/pr69999.c: New test.
|
||||
|
||||
|
|
25
gcc/testsuite/gcc.c-torture/execute/pr70005.c
Normal file
25
gcc/testsuite/gcc.c-torture/execute/pr70005.c
Normal file
|
@ -0,0 +1,25 @@
|
|||
|
||||
unsigned char a = 6;
|
||||
int b, c;
|
||||
|
||||
static void
|
||||
fn1 ()
|
||||
{
|
||||
int i = a > 1 ? 1 : a, j = 6 & (c = a && (b = a));
|
||||
int d = 0, e = a, f = ~c, g = b || a;
|
||||
unsigned char h = ~a;
|
||||
if (a)
|
||||
f = j;
|
||||
if (h && g)
|
||||
d = a;
|
||||
i = -~(f * d * h) + c && (e || i) ^ f;
|
||||
if (i != 1)
|
||||
__builtin_abort ();
|
||||
}
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
fn1 ();
|
||||
return 0;
|
||||
}
|
|
@ -95,7 +95,8 @@ associate_equivalences_with_edges (void)
|
|||
if (TREE_CODE (op0) == SSA_NAME
|
||||
&& !SSA_NAME_OCCURS_IN_ABNORMAL_PHI (op0)
|
||||
&& ssa_name_has_boolean_range (op0)
|
||||
&& is_gimple_min_invariant (op1))
|
||||
&& is_gimple_min_invariant (op1)
|
||||
&& (integer_zerop (op1) || integer_onep (op1)))
|
||||
{
|
||||
tree true_val = constant_boolean_node (true, TREE_TYPE (op0));
|
||||
tree false_val = constant_boolean_node (false,
|
||||
|
|
Loading…
Add table
Reference in a new issue