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



             Bug #: 56625

           Summary: After if-conversion vectorizer doesn't recognize

                    similar stores

    Classification: Unclassified

           Product: gcc

           Version: 4.8.0

            Status: UNCONFIRMED

          Severity: normal

          Priority: P3

         Component: tree-optimization

        AssignedTo: unassig...@gcc.gnu.org

        ReportedBy: michael.v.zolotuk...@gmail.com

                CC: kirill.yuk...@intel.com,

                    michael.v.zolotuk...@gmail.com

             Build: 4.8.0 20130313





Created attachment 29673

  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=29673

Reproducer



In the following example there are two stores a[i]<-b[i] after if-conversion.

void foo (double a[], double b[])

{

  int i;

  for (i = 0; i < 100; i++)

    {

      if (a[i] == 0)

        a[i] = b[i]*4;

      else

        a[i] = b[i]*3;

    }

}

As vectorizer knows nothing about dependencies between a and b, it needs a

runtime test for it. But in the given example, vectorizer generates two

runtime-tests instead of one:

note: mark for run-time aliasing test between *_11 and *_8

note: mark for run-time aliasing test between *_15 and *_8



The test is attached, command line to reproduce:

gcc if-conv-runtime-tests.c -O3 -c -ftree-vectorizer-verbose=15

-ftree-loop-if-convert-stores  -fdump-tree-vect

Reply via email to