+2020-01-09 Richard Sandiford <richard.sandiford@arm.com>
+
+ * tree-nrv.c (pass_return_slot::execute): Handle all internal
+ functions the same way, rather than singling out those that
+ aren't mapped directly to optabs.
+
2020-01-09 Richard Sandiford <richard.sandiford@arm.com>
* target.def (compatible_vector_types_p): New target hook.
+2020-01-09 Richard Sandiford <richard.sandiford@arm.com>
+
+ * gcc.target/aarch64/sve/acle/general/nrv_1.c: New test.
+
2020-01-09 Richard Sandiford <richard.sandiford@arm.com>
* gcc.target/aarch64/sve/pcs/gnu_vectors_1.c: New test.
--- /dev/null
+/* { dg-options "-O -msve-vector-bits=256" } */
+
+#include <arm_sve.h>
+
+typedef uint8_t v32qi __attribute__((vector_size (32)));
+
+struct triple { v32qi v0, v1, v2; };
+
+struct triple f (uint8_t *ptr)
+{
+ svuint8x3_t data = svld3 (svptrue_b8 (), ptr);
+ struct triple res;
+ res.v0 = svget3 (data, 0);
+ res.v1 = svget3 (data, 1);
+ res.v2 = svget3 (data, 2);
+ return res;
+}
if (stmt
&& gimple_call_lhs (stmt)
&& !gimple_call_return_slot_opt_p (stmt)
- /* Ignore internal functions without direct optabs,
- those are expanded specially and aggregate_value_p
- on their result might result in undesirable warnings
- with some backends. */
- && (!gimple_call_internal_p (stmt)
- || direct_internal_fn_p (gimple_call_internal_fn (stmt)))
+ /* Ignore internal functions, those are expanded specially
+ and aggregate_value_p on their result might result in
+ undesirable warnings with some backends. */
+ && !gimple_call_internal_p (stmt)
&& aggregate_value_p (TREE_TYPE (gimple_call_lhs (stmt)),
gimple_call_fndecl (stmt)))
{