+2012-10-16 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/54889
+ * tree-vect-stmts.c (vectorizable_load): Add VIEW_CONVERT_EXPR if
+ ARRAY_REF newref doesn't have compatible type with vectype element
+ type, use vectype element type for MEM_REF.
+
2012-10-16 Steven Bosscher <steven@gcc.gnu.org>
* combine.c (record_dead_and_set_regs): Iterate over hard register set
+2012-10-16 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/54889
+ * gfortran.dg/pr54889.f90: New test.
+
2012-10-16 Eric Botcazou <ebotcazou@adacore.com>
* g++.dg/other/dump-ada-spec-2.C: New test.
--- /dev/null
+! PR tree-optimization/54889
+! { dg-do compile }
+! { dg-options "-O3" }
+! { dg-additional-options "-mavx" { target { i?86-*-* x86_64-*-* } } }
+
+subroutine foo(x,y,z)
+ logical, pointer :: x(:,:)
+ integer :: y, z
+ x=x(1:y,1:z)
+end subroutine
tree newref, newoff;
gimple incr;
if (TREE_CODE (ref) == ARRAY_REF)
- newref = build4 (ARRAY_REF, TREE_TYPE (ref),
- unshare_expr (TREE_OPERAND (ref, 0)),
- running_off,
- NULL_TREE, NULL_TREE);
+ {
+ newref = build4 (ARRAY_REF, TREE_TYPE (ref),
+ unshare_expr (TREE_OPERAND (ref, 0)),
+ running_off,
+ NULL_TREE, NULL_TREE);
+ if (!useless_type_conversion_p (TREE_TYPE (vectype),
+ TREE_TYPE (newref)))
+ newref = build1 (VIEW_CONVERT_EXPR, TREE_TYPE (vectype),
+ newref);
+ }
else
- newref = build2 (MEM_REF, TREE_TYPE (ref),
+ newref = build2 (MEM_REF, TREE_TYPE (vectype),
running_off,
TREE_OPERAND (ref, 1));