re PR rtl-optimization/49720 (Infinite recursion compiling gold binary_test.cc testcase)
2011-10-28 Chung-Lin Tang <cltang@codesourcery.com> PR rtl-optimization/49720 * simplify-rtx.c (simplify_relational_operation_1): Detect infinite recursion condition in "(eq/ne (plus x cst1) cst2) simplifies to (eq/ne x (cst2 - cst1))" case. testsuite/ * g++.dg/torture/pr49720.C: New test. From-SVN: r180604
This commit is contained in:
parent
2df19a351f
commit
d303c992f6
4 changed files with 33 additions and 3 deletions
|
@ -1,3 +1,10 @@
|
|||
2011-10-28 Chung-Lin Tang <cltang@codesourcery.com>
|
||||
|
||||
PR rtl-optimization/49720
|
||||
* simplify-rtx.c (simplify_relational_operation_1): Detect
|
||||
infinite recursion condition in "(eq/ne (plus x cst1) cst2)
|
||||
simplifies to (eq/ne x (cst2 - cst1))" case.
|
||||
|
||||
2011-10-27 David S. Miller <davem@davemloft.net>
|
||||
|
||||
* config/sparc/sparc.md (snedi_special): Only match when not VIS3.
|
||||
|
|
|
@ -4352,10 +4352,20 @@ simplify_relational_operation_1 (enum rtx_code code, enum machine_mode mode,
|
|||
{
|
||||
rtx x = XEXP (op0, 0);
|
||||
rtx c = XEXP (op0, 1);
|
||||
enum rtx_code invcode = op0code == PLUS ? MINUS : PLUS;
|
||||
rtx tem = simplify_gen_binary (invcode, cmp_mode, op1, c);
|
||||
|
||||
c = simplify_gen_binary (op0code == PLUS ? MINUS : PLUS,
|
||||
cmp_mode, op1, c);
|
||||
return simplify_gen_relational (code, mode, cmp_mode, x, c);
|
||||
/* Detect an infinite recursive condition, where we oscillate at this
|
||||
simplification case between:
|
||||
A + B == C <---> C - B == A,
|
||||
where A, B, and C are all constants with non-simplifiable expressions,
|
||||
usually SYMBOL_REFs. */
|
||||
if (GET_CODE (tem) == invcode
|
||||
&& CONSTANT_P (x)
|
||||
&& rtx_equal_p (c, XEXP (tem, 1)))
|
||||
return NULL_RTX;
|
||||
|
||||
return simplify_gen_relational (code, mode, cmp_mode, x, tem);
|
||||
}
|
||||
|
||||
/* (ne:SI (zero_extract:SI FOO (const_int 1) BAR) (const_int 0))) is
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2011-10-28 Chung-Lin Tang <cltang@codesourcery.com>
|
||||
|
||||
PR rtl-optimization/49720
|
||||
* g++.dg/torture/pr49720.C: New test.
|
||||
|
||||
2011-10-27 David S. Miller <davem@davemloft.net>
|
||||
|
||||
* gcc.target/sparc/setcc-3.c: New test.
|
||||
|
|
8
gcc/testsuite/g++.dg/torture/pr49720.C
Normal file
8
gcc/testsuite/g++.dg/torture/pr49720.C
Normal file
|
@ -0,0 +1,8 @@
|
|||
/* { dg-do compile } */
|
||||
|
||||
extern char t_start[], t_end[], t_size[];
|
||||
bool foo (void)
|
||||
{
|
||||
long size = reinterpret_cast<long>(t_size);
|
||||
return (size == t_end - t_start);
|
||||
}
|
Loading…
Add table
Reference in a new issue