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



             Bug #: 55334

           Summary: mgrid regression (ipa-cp disables vectorization)

    Classification: Unclassified

           Product: gcc

           Version: 4.8.0

            Status: UNCONFIRMED

          Severity: normal

          Priority: P3

         Component: tree-optimization

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

        ReportedBy: hubi...@gcc.gnu.org





mgrid has regressed noticeably

http://gcc.opensuse.org/SPEC/CFP/sb-frescobaldi.suse.de-head-64/172_mgrid_big.png



This seems to be related to function resid_ that we now clone

  Creating a specialized node of resid/1.

    replacing param u with const &x.u

    replacing param v with const &x.v

    replacing param r with const &x.r

    replacing param a with const &x.a



Both variants stays in the code. When compiling resid vectorizer succeeds.



The difference seems to be:

191: vect_compute_data_ref_alignment:

191: Unknown alignment for access: *v_41(D)

191: vect_compute_data_ref_alignment:

191: Unknown alignment for access: *u_45(D)

191: vect_compute_data_ref_alignment:

191: Unknown alignment for access: *u_45(D)

191: vect_compute_data_ref_alignment:

191: Unknown alignment for access: *u_45(D)

191: vect_compute_data_ref_alignment:

191: Unknown alignment for access: *u_45(D)

191: vect_compute_data_ref_alignment:

191: Unknown alignment for access: *u_45(D)

191: vect_compute_data_ref_alignment:

191: Unknown alignment for access: *u_45(D)

191: vect_compute_data_ref_alignment:

191: Unknown alignment for access: *u_45(D)

191: vect_compute_data_ref_alignment:

191: Unknown alignment for access: *u_45(D)

191: vect_compute_data_ref_alignment:

191: Unknown alignment for access: *u_45(D)



being changed to

191: vect_compute_data_ref_alignment:

191: Unknown alignment for access: x

191: vect_compute_data_ref_alignment:

191: misalign = 0 bytes of ref MEM[(real(kind=8)[4] *)&x + 58071104B][0]

191: vect_compute_data_ref_alignment:

191: Unknown alignment for access: x

191: vect_compute_data_ref_alignment:

191: misalign = 8 bytes of ref MEM[(real(kind=8)[4] *)&x + 58071104B][1]

191: vect_compute_data_ref_alignment:

191: Unknown alignment for access: x

191: vect_compute_data_ref_alignment:

191: Unknown alignment for access: x

191: vect_compute_data_ref_alignment:

191: Unknown alignment for access: x

191: vect_compute_data_ref_alignment:

191: Unknown alignment for access: x

191: vect_compute_data_ref_alignment:

191: Unknown alignment for access: x



that ultimately leads to

191: === vect_prune_runtime_alias_test_list ===

191: disable versioning for alias - max number of generated checks exceeded.

191: too long list of versioning for alias run-time tests.



So it seems that specializing for particular static array = good thing leads to

vectorizer giving up.

Reply via email to