[Bug middle-end/27743] [4.1/4.2 Regression] Wrong code for ((unsigned) ((a) 2)) 15

2006-05-25 Thread rguenth at gcc dot gnu dot org


--- Comment #4 from rguenth at gcc dot gnu dot org  2006-05-25 12:40 ---
Subject: Bug 27743

Author: rguenth
Date: Thu May 25 12:39:52 2006
New Revision: 114112

URL: http://gcc.gnu.org/viewcvs?root=gccview=revrev=114112
Log:
2006-05-25  Richard Guenther  [EMAIL PROTECTED]

PR middle-end/27743
* fold-const.c (fold_binary): Do not look at the stripped
op0 for (a OP c1) OP c2 to a OP (c1+c2) shift optimization.

* gcc.dg/torture/pr27743.c: New testcase.

Added:
trunk/gcc/testsuite/gcc.dg/torture/pr27743.c
Modified:
trunk/gcc/ChangeLog
trunk/gcc/fold-const.c
trunk/gcc/testsuite/ChangeLog


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=27743



[Bug middle-end/27743] [4.1/4.2 Regression] Wrong code for ((unsigned) ((a) 2)) 15

2006-05-24 Thread rguenth at gcc dot gnu dot org


--- Comment #3 from rguenth at gcc dot gnu dot org  2006-05-24 09:44 ---
I have a patch.


-- 

rguenth at gcc dot gnu dot org changed:

   What|Removed |Added

 AssignedTo|unassigned at gcc dot gnu   |rguenth at gcc dot gnu dot
   |dot org |org
 Status|NEW |ASSIGNED
   Last reconfirmed|2006-05-23 14:17:09 |2006-05-24 09:44:37
   date||


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=27743



[Bug middle-end/27743] [4.1/4.2 Regression] Wrong code for ((unsigned) ((a) 2)) 15

2006-05-23 Thread rguenth at gcc dot gnu dot org


--- Comment #1 from rguenth at gcc dot gnu dot org  2006-05-23 14:17 ---
Confirmed.


-- 

rguenth at gcc dot gnu dot org changed:

   What|Removed |Added

 CC||rguenth at gcc dot gnu dot
   ||org
 Status|UNCONFIRMED |NEW
  Component|tree-optimization   |middle-end
 Ever Confirmed|0   |1
 GCC target triplet|sparc-sun-solaris2.8|
   Keywords||wrong-code
  Known to work||4.0.3
   Last reconfirmed|-00-00 00:00:00 |2006-05-23 14:17:09
   date||
Summary|Wrong code for ((unsigned)  |[4.1/4.2 Regression] Wrong
   |((a)  2))  15   |code for ((unsigned) ((a) 
   ||2))  15
   Target Milestone|--- |4.1.2


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=27743



[Bug middle-end/27743] [4.1/4.2 Regression] Wrong code for ((unsigned) ((a) 2)) 15

2006-05-23 Thread rguenth at gcc dot gnu dot org


--- Comment #2 from rguenth at gcc dot gnu dot org  2006-05-23 14:27 ---
  /* Turn (a OP c1) OP c2 into a OP (c1+c2).  */
  if (TREE_CODE (arg0) == code  host_integerp (arg1, false)
   TREE_INT_CST_LOW (arg1)  TYPE_PRECISION (type)
   host_integerp (TREE_OPERAND (arg0, 1), false)
   TREE_INT_CST_LOW (TREE_OPERAND (arg0, 1))  TYPE_PRECISION (type))
{

this should read TREE_CODE (op0) == code.  Or

  if (kind == tcc_comparison)
{
  STRIP_SIGN_NOPS (arg0);
  STRIP_SIGN_NOPS (arg1);
}
  else
{
  STRIP_NOPS (arg0);
  STRIP_NOPS (arg1);
}

should use STRIP_SIGN_NOPS for arg0 and shifts.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=27743