[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