aboutsummaryrefslogtreecommitdiff
path: root/gcc/expr.c
diff options
context:
space:
mode:
authorRichard Sandiford <richard.sandiford@linaro.org>2018-01-03 07:17:52 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2018-01-03 07:17:52 +0000
commitf3ff49007a5cebef6e082abc5778875692792cb6 (patch)
tree64d7ed8be45b1888ab20d2b3fbbdebc73bd10f91 /gcc/expr.c
parent0fd03b44ab4d77f8b8c09e5bbc2def4eeb855053 (diff)
downloadgcc-f3ff49007a5cebef6e082abc5778875692792cb6.zip
gcc-f3ff49007a5cebef6e082abc5778875692792cb6.tar.gz
gcc-f3ff49007a5cebef6e082abc5778875692792cb6.tar.bz2
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 <richard.sandiford@linaro.org> Alan Hayward <alan.hayward@arm.com> David Sherwood <david.sherwood@arm.com> 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 <alan.hayward@arm.com> Co-Authored-By: David Sherwood <david.sherwood@arm.com> From-SVN: r256152
Diffstat (limited to 'gcc/expr.c')
-rw-r--r--gcc/expr.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/gcc/expr.c b/gcc/expr.c
index abab831..a82d9e4 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