[Bug tree-optimization/94401] [10 Regression] pr92420.c fails on aarch64 since r10-7415

linkw at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Tue Mar 31 05:44:56 GMT 2020


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94401

Kewen Lin <linkw at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |segher at gcc dot gnu.org,
                   |                            |wschmidt at gcc dot gnu.org
             Status|NEW                         |ASSIGNED

--- Comment #4 from Kewen Lin <linkw at gcc dot gnu.org> ---
My commit extends the current scalar epilogue peeling for gaps 
elimination, it makes the case can make use of int for the construction. But it
reveals the existing handlings misses to handle VMAT_CONTIGUOUS_REVERSE case,
currently it assumes overrun happens on high address end, it's true for almost
all cases, but this case is on the low address end. So if we have to load the
high part and put it in the latter part of constructed vector for
VMAT_CONTIGUOUS_REVERSE.

The IR before/after the commit looks

good:
  vect__9.16_80 = MEM <vector(2) int> [(int *)vectp_y.14_78];
  vect__9.17_81 = VEC_PERM_EXPR <vect__9.16_80, vect__9.16_80, { 1, 0 }>;
  vect__9.18_82 = VEC_PERM_EXPR <vect__9.17_81, vect__9.17_81, { 0, 0 }>;

bad:
  _30 = MEM[(int *)vectp_y.12_34];
  _20 = {_30, 0};
  vect__9.14_19 = VIEW_CONVERT_EXPR<vector(2) int>(_20);
  vect__9.15_61 = VEC_PERM_EXPR <vect__9.14_19, vect__9.14_19, { 1, 0 }>;
  vect__9.16_54 = VEC_PERM_EXPR <vect__9.15_61, vect__9.15_61, { 0, 0 }>;


More information about the Gcc-bugs mailing list