poly_int: expand_expr_real_2
This patch makes expand_expr_real_2 cope with polynomial mode sizes when handling conversions involving a union type. 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_2): When handling conversions involving unions, apply tree_to_poly_uint64 to the TYPE_SIZE rather than multiplying int_size_in_bytes by BITS_PER_UNIT. Treat GET_MODE_BISIZE as a poly_uint64 too. Co-Authored-By: Alan Hayward <alan.hayward@arm.com> Co-Authored-By: David Sherwood <david.sherwood@arm.com> From-SVN: r256151
This commit is contained in:
parent
c3266d10a4
commit
0fd03b44ab
2 changed files with 16 additions and 4 deletions
|
@ -1,3 +1,12 @@
|
|||
2018-01-03 Richard Sandiford <richard.sandiford@linaro.org>
|
||||
Alan Hayward <alan.hayward@arm.com>
|
||||
David Sherwood <david.sherwood@arm.com>
|
||||
|
||||
* expr.c (expand_expr_real_2): When handling conversions involving
|
||||
unions, apply tree_to_poly_uint64 to the TYPE_SIZE rather than
|
||||
multiplying int_size_in_bytes by BITS_PER_UNIT. Treat GET_MODE_BISIZE
|
||||
as a poly_uint64 too.
|
||||
|
||||
2018-01-03 Richard Sandiford <richard.sandiford@linaro.org>
|
||||
Alan Hayward <alan.hayward@arm.com>
|
||||
David Sherwood <david.sherwood@arm.com>
|
||||
|
|
11
gcc/expr.c
11
gcc/expr.c
|
@ -8424,11 +8424,14 @@ expand_expr_real_2 (sepops ops, rtx target, machine_mode tmode,
|
|||
&& !TYPE_REVERSE_STORAGE_ORDER (type));
|
||||
|
||||
/* Store this field into a union of the proper type. */
|
||||
poly_uint64 op0_size
|
||||
= tree_to_poly_uint64 (TYPE_SIZE (TREE_TYPE (treeop0)));
|
||||
poly_uint64 union_size = GET_MODE_BITSIZE (mode);
|
||||
store_field (target,
|
||||
MIN ((int_size_in_bytes (TREE_TYPE
|
||||
(treeop0))
|
||||
* BITS_PER_UNIT),
|
||||
(HOST_WIDE_INT) GET_MODE_BITSIZE (mode)),
|
||||
/* The conversion must be constructed so that
|
||||
we know at compile time how many bits
|
||||
to preserve. */
|
||||
ordered_min (op0_size, union_size),
|
||||
0, 0, 0, TYPE_MODE (valtype), treeop0, 0,
|
||||
false, false);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue