mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-19 15:11:08 +08:00
re PR tree-optimization/65217 (__builtin_unreachable in if statement causes bad assembly generation)
PR tree-optimization/65217 * tree-ssa-dom.c (record_equality): Given two SSA_NAMEs, if just one of them has a single use, make sure it is the LHS of the implied copy. PR tree-optimization/65217 * gcc.target/i386/pr65217.c: Remove XFAIL. From-SVN: r222499
This commit is contained in:
parent
3954ead0d8
commit
009b7fc187
@ -1,3 +1,10 @@
|
||||
2015-04-27 Jeff Law <law@redhat.com>
|
||||
|
||||
PR tree-optimization/65217
|
||||
* tree-ssa-dom.c (record_equality): Given two SSA_NAMEs, if just one
|
||||
of them has a single use, make sure it is the LHS of the implied
|
||||
copy.
|
||||
|
||||
2015-04-28 Alan Modra <amodra@gmail.com>
|
||||
|
||||
PR target/65810
|
||||
|
@ -1,3 +1,8 @@
|
||||
2015-04-27 Jeff Law <law@redhat.com>
|
||||
|
||||
PR tree-optimization/65217
|
||||
* gcc.target/i386/pr65217.c: Remove XFAIL.
|
||||
|
||||
2015-04-27 Andre Vehreschild <vehre@gmx.de>
|
||||
|
||||
PR fortran/60322
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O" } */
|
||||
/* { dg-final { scan-assembler-not "negl" { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-not "andl" { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-not "negl" } } */
|
||||
/* { dg-final { scan-assembler-not "andl" } } */
|
||||
|
||||
int
|
||||
test(int n)
|
||||
|
@ -1762,6 +1762,20 @@ record_equality (tree x, tree y)
|
||||
if (tree_swap_operands_p (x, y, false))
|
||||
std::swap (x, y);
|
||||
|
||||
/* Most of the time tree_swap_operands_p does what we want. But there's
|
||||
cases where we we know one operand is better for copy propagation than
|
||||
the other. Given no other code cares about ordering of equality
|
||||
comparison operators for that purpose, we just handle the special cases
|
||||
here. */
|
||||
if (TREE_CODE (x) == SSA_NAME && TREE_CODE (y) == SSA_NAME)
|
||||
{
|
||||
/* If one operand is a single use operand, then make it
|
||||
X. This will preserve its single use properly and if this
|
||||
conditional is eliminated, the computation of X can be
|
||||
eliminated as well. */
|
||||
if (has_single_use (y) && ! has_single_use (x))
|
||||
std::swap (x, y);
|
||||
}
|
||||
if (TREE_CODE (x) == SSA_NAME)
|
||||
prev_x = SSA_NAME_VALUE (x);
|
||||
if (TREE_CODE (y) == SSA_NAME)
|
||||
|
Loading…
x
Reference in New Issue
Block a user