From f3ff49007a5cebef6e082abc5778875692792cb6 Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Wed, 3 Jan 2018 07:17:52 +0000 Subject: [PATCH] poly_int: expand_expr_real_1 This patch makes the VIEW_CONVERT_EXPR handling in expand_expr_real_1 cope with polynomial type and mode sizes. 2018-01-03 Richard Sandiford Alan Hayward David Sherwood gcc/ * expr.c (expand_expr_real_1): Use tree_to_poly_uint64 instead of int_size_in_bytes when handling VIEW_CONVERT_EXPRs via stack temporaries. Treat the mode size as polynomial too. Co-Authored-By: Alan Hayward Co-Authored-By: David Sherwood From-SVN: r256152 --- gcc/ChangeLog | 8 ++++++++ gcc/expr.c | 7 ++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6cef62278ce..37737bcabd9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2018-01-03 Richard Sandiford + Alan Hayward + David Sherwood + + * expr.c (expand_expr_real_1): Use tree_to_poly_uint64 + instead of int_size_in_bytes when handling VIEW_CONVERT_EXPRs + via stack temporaries. Treat the mode size as polynomial too. + 2018-01-03 Richard Sandiford Alan Hayward David Sherwood diff --git a/gcc/expr.c b/gcc/expr.c index abab83136d3..a82d9e41ae2 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -11132,9 +11132,10 @@ expand_expr_real_1 (tree exp, rtx target, machine_mode tmode, else if (STRICT_ALIGNMENT) { tree inner_type = TREE_TYPE (treeop0); - HOST_WIDE_INT temp_size - = MAX (int_size_in_bytes (inner_type), - (HOST_WIDE_INT) GET_MODE_SIZE (mode)); + poly_uint64 mode_size = GET_MODE_SIZE (mode); + poly_uint64 op0_size + = tree_to_poly_uint64 (TYPE_SIZE_UNIT (inner_type)); + poly_int64 temp_size = upper_bound (op0_size, mode_size); rtx new_rtx = assign_stack_temp_for_type (mode, temp_size, type); rtx new_with_op0_mode -- 2.30.2