Handle POLY_INT_CSTs in declare_return_value
SVE allows variable-length vectors to be returned by value, which tripped the assert in declare_return_variable. 2019-11-08 Richard Sandiford <richard.sandiford@arm.com> gcc/ * tree-inline.c (declare_return_variable): Check for poly_int_tree_p instead of INTEGER_CST. gcc/testsuite/ * gcc.target/aarch64/sve/acle/general/inline_1.c: New test. From-SVN: r277956
This commit is contained in:
parent
f1e1ed3314
commit
be5f7eccf7
@ -1,3 +1,8 @@
|
||||
2019-11-08 Richard Sandiford <richard.sandiford@arm.com>
|
||||
|
||||
* tree-inline.c (declare_return_variable): Check for poly_int_tree_p
|
||||
instead of INTEGER_CST.
|
||||
|
||||
2019-11-08 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/92324
|
||||
|
@ -1,3 +1,7 @@
|
||||
2019-11-08 Richard Sandiford <richard.sandiford@arm.com>
|
||||
|
||||
* gcc.target/aarch64/sve/acle/general/inline_1.c: New test.
|
||||
|
||||
2019-11-08 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/92324
|
||||
|
@ -0,0 +1,6 @@
|
||||
/* { dg-options "-O2" } */
|
||||
|
||||
#pragma GCC aarch64 "arm_sve.h"
|
||||
|
||||
static inline svint32_t foo () { return svdup_s32 (32); }
|
||||
svint32_t bar () { return svadd_x (svptrue_b8 (), foo (), 1); }
|
@ -3654,7 +3654,7 @@ declare_return_variable (copy_body_data *id, tree return_slot, tree modify_dest,
|
||||
/* ??? If we're assigning to a variable sized type, then we must
|
||||
reuse the destination variable, because we've no good way to
|
||||
create variable sized temporaries at this point. */
|
||||
else if (TREE_CODE (TYPE_SIZE_UNIT (caller_type)) != INTEGER_CST)
|
||||
else if (!poly_int_tree_p (TYPE_SIZE_UNIT (caller_type)))
|
||||
use_it = true;
|
||||
|
||||
/* If the callee cannot possibly modify MODIFY_DEST, then we can
|
||||
@ -3689,7 +3689,7 @@ declare_return_variable (copy_body_data *id, tree return_slot, tree modify_dest,
|
||||
}
|
||||
}
|
||||
|
||||
gcc_assert (TREE_CODE (TYPE_SIZE_UNIT (callee_type)) == INTEGER_CST);
|
||||
gcc_assert (poly_int_tree_p (TYPE_SIZE_UNIT (callee_type)));
|
||||
|
||||
var = copy_result_decl_to_var (result, id);
|
||||
DECL_SEEN_IN_BIND_EXPR_P (var) = 1;
|
||||
|
Loading…
Reference in New Issue
Block a user