// David Li:

Conditional generator is not handled, missing redundancy elimination for a[i]
and a[i-1]

int a[1000];
int b[1000];

void foo(int n)
{
   int i = 1;
   for(; i < n; i++)
   {
        if (b[i] > 0)
            a[i+1] = a[i-1];
        b[i] = a[i];
   }
}

==> should be (similar to PRE)

Conditional generator is not handled, missing redundancy elimination for a[i]
and a[i-1]

int a[1000];
int b[1000];

t1 = a[0];
t2 = a[1];
void foo(int n)
{
   int i = 1;
   for(; i < n; i++)
   {

        if (b[i] > 0)
        {
            t3 = t1;
            a[i+1] = t3;
        }
        else t3 = a[i+1];

        b[i] = t2;
        t1 = t2;
        t2 = t3;
   }
}
(Loop can be unrolled to reduce copy)


-- 
           Summary: Scalar replacement -- handling of conditional generator
                    -- missing
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: middle-end
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: xinliangli at gmail dot com


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

Reply via email to