/* Build a vector type with the alignment of the source
location in order to enable correct alignment hints to be
generated for vl. */
- tree mem_type = build_aligned_type (return_type,
- TYPE_ALIGN (TREE_TYPE (TREE_TYPE ((*arglist)[1]))));
+ unsigned align = TYPE_ALIGN (TREE_TYPE (TREE_TYPE ((*arglist)[1])));
+ tree mem_type = build_aligned_type (return_type, align);
return build2 (MEM_REF, mem_type,
fold_build_pointer_plus ((*arglist)[1], (*arglist)[0]),
- build_int_cst (TREE_TYPE ((*arglist)[1]), 0));
+ build_int_cst (ptr_type_node, 0));
}
case S390_OVERLOADED_BUILTIN_s390_vec_xst:
case S390_OVERLOADED_BUILTIN_s390_vec_xstd2:
/* Build a vector type with the alignment of the target
location in order to enable correct alignment hints to be
generated for vst. */
- tree mem_type = build_aligned_type (TREE_TYPE((*arglist)[0]),
- TYPE_ALIGN (TREE_TYPE (TREE_TYPE ((*arglist)[2]))));
+ unsigned align = TYPE_ALIGN (TREE_TYPE (TREE_TYPE ((*arglist)[2])));
+ tree mem_type = build_aligned_type (TREE_TYPE ((*arglist)[0]), align);
return build2 (MODIFY_EXPR, mem_type,
- build1 (INDIRECT_REF, mem_type,
- fold_build_pointer_plus ((*arglist)[2], (*arglist)[1])),
+ build2 (MEM_REF, mem_type,
+ fold_build_pointer_plus ((*arglist)[2],
+ (*arglist)[1]),
+ build_int_cst (ptr_type_node, 0)),
(*arglist)[0]);
}
case S390_OVERLOADED_BUILTIN_s390_vec_load_pair:
--- /dev/null
+/* { dg-do run { target { s390*-*-* } } } */
+/* { dg-options "-O3 -mzarch -march=z14 -mzvector" } */
+
+#include <vecintrin.h>
+
+void __attribute__((noinline)) foo (int *mem)
+{
+ vec_xst ((vector float){ 1.0f, 2.0f, 3.0f, 4.0f }, 0, (float*)mem);
+}
+
+int
+main ()
+{
+ int m[4] = { 0 };
+ foo (m);
+ if (m[3] == 0)
+ __builtin_abort ();
+ return 0;
+}