[Bug target/91897] Very poor optimization on large attribute vector_size

rguenth at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Wed Sep 25 13:41:00 GMT 2019


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

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |ASSIGNED
           Assignee|unassigned at gcc dot gnu.org      |rguenth at gcc dot gnu.org

--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> ---
Index: gcc/expr.c
===================================================================
--- gcc/expr.c  (revision 276123)
+++ gcc/expr.c  (working copy)
@@ -7232,8 +7232,9 @@ get_inner_reference (tree exp, poly_int6

       /* For vector types, with the correct size of access, use the mode of
         inner type.  */
-      if (TREE_CODE (TREE_TYPE (TREE_OPERAND (exp, 0))) == VECTOR_TYPE
-         && TREE_TYPE (exp) == TREE_TYPE (TREE_TYPE (TREE_OPERAND (exp, 0)))
+      if (((TREE_CODE (TREE_TYPE (TREE_OPERAND (exp, 0))) == VECTOR_TYPE
+           && TREE_TYPE (exp) == TREE_TYPE (TREE_TYPE (TREE_OPERAND (exp,
0))))
+          || !INTEGRAL_TYPE_P (TREE_TYPE (exp)))
          && tree_int_cst_equal (size_tree, TYPE_SIZE (TREE_TYPE (exp))))
         mode = TYPE_MODE (TREE_TYPE (exp));
     }


makes us generate

.LFB0:
        .cfi_startproc
        vmovapd 32(%rsi), %ymm4
        vmovapd 64(%rsi), %ymm5
        vmovapd 96(%rsi), %ymm6
        vmovapd (%rsi), %ymm3
        vmulpd  32(%rdx), %ymm4, %ymm2
        vmulpd  64(%rdx), %ymm5, %ymm1
        vmulpd  96(%rdx), %ymm6, %ymm0
        vmulpd  (%rdx), %ymm3, %ymm3
        vmovapd %ymm2, 32(%rdi)
        vmovapd %ymm1, 64(%rdi)
        vmovapd %ymm0, 96(%rdi)
        vmovapd %ymm3, (%rdi)


More information about the Gcc-bugs mailing list