Bug 22312

Summary: reassoc does not handle (i+j)+(k+l) well
Product: gcc Reporter: Andrew Pinski <pinskia>
Component: tree-optimizationAssignee: Not yet assigned to anyone <unassigned>
Status: RESOLVED FIXED    
Severity: enhancement CC: gcc-bugs
Priority: P2 Keywords: missed-optimization
Version: 4.1.0   
Target Milestone: 4.2.0   
Host: Target:
Build: Known to work:
Known to fail: Last reconfirmed: 2005-11-21 02:43:36
Bug Depends on:    
Bug Blocks: 18589, 23429    

Description Andrew Pinski 2005-07-05 18:33:41 UTC
take the following example:
int f(int i, int j, int k, int l)
{
  int r1 = (i+j)+(k+l);
  int r2 = (j+k)+(l+i);
  return r1 == r2;
}

This should return 1 all the time.  I found this while making testcases for reassoc working fp (well I just 
change one little thing to make it work really).
Comment 1 Daniel Berlin 2005-07-05 19:02:39 UTC
Subject: Re:  New: reassoc does not handle
	(i+j)+(k+l) well

On Tue, 2005-07-05 at 18:33 +0000, pinskia at gcc dot gnu dot org wrote:
> take the following example:
> int f(int i, int j, int k, int l)
> {
>   int r1 = (i+j)+(k+l);
>   int r2 = (j+k)+(l+i);
>   return r1 == r2;
> }
> 
> This should return 1 all the time.  I found this while making testcases for reassoc working fp (well I just 
> change one little thing to make it work really).

We can't do a full top-down reassocation because update_stmt reorders
our operands so we lose information about which is the high ranked
operand, etc.
It's a pain in the ass to fix, but possible.

> 

Comment 2 Andrew Pinski 2005-07-05 19:35:57 UTC
Confirmed then.
Comment 3 Andrew Pinski 2005-12-13 04:29:23 UTC
Fixed.