mirror of git://gcc.gnu.org/git/gcc.git
rs6000: Fix vector homogeneous aggregates (PR86197)
The existing code allows only 4 vectors worth of ieee128 homogeneous aggregates, but it should be 8. This happens because at one spot it is mistakenly qualified as being passed in floating point registers. PR target/86197 * config/rs6000/rs6000.md (rs6000_discover_homogeneous_aggregate): An ieee128 argument takes up only one (vector) register, not two (floating point) registers. From-SVN: r261738
This commit is contained in:
parent
7f1387e0f2
commit
6b3a917093
|
|
@ -1,3 +1,10 @@
|
||||||
|
2018-06-19 Segher Boessenkool <segher@kernel.crashing.org>
|
||||||
|
|
||||||
|
PR target/86197
|
||||||
|
* config/rs6000/rs6000.md (rs6000_discover_homogeneous_aggregate): An
|
||||||
|
ieee128 argument takes up only one (vector) register, not two (floating
|
||||||
|
point) registers.
|
||||||
|
|
||||||
2018-06-19 Eric Botcazou <ebotcazou@adacore.com>
|
2018-06-19 Eric Botcazou <ebotcazou@adacore.com>
|
||||||
|
|
||||||
* gimplify.c (gimplify_init_constructor): Really never clear for an
|
* gimplify.c (gimplify_init_constructor): Really never clear for an
|
||||||
|
|
|
||||||
|
|
@ -10887,12 +10887,12 @@ rs6000_discover_homogeneous_aggregate (machine_mode mode, const_tree type,
|
||||||
|
|
||||||
if (field_count > 0)
|
if (field_count > 0)
|
||||||
{
|
{
|
||||||
int n_regs = (SCALAR_FLOAT_MODE_P (field_mode) ?
|
int reg_size = ALTIVEC_OR_VSX_VECTOR_MODE (field_mode) ? 16 : 8;
|
||||||
(GET_MODE_SIZE (field_mode) + 7) >> 3 : 1);
|
int field_size = ROUND_UP (GET_MODE_SIZE (field_mode), reg_size);
|
||||||
|
|
||||||
/* The ELFv2 ABI allows homogeneous aggregates to occupy
|
/* The ELFv2 ABI allows homogeneous aggregates to occupy
|
||||||
up to AGGR_ARG_NUM_REG registers. */
|
up to AGGR_ARG_NUM_REG registers. */
|
||||||
if (field_count * n_regs <= AGGR_ARG_NUM_REG)
|
if (field_count * field_size <= AGGR_ARG_NUM_REG * reg_size)
|
||||||
{
|
{
|
||||||
if (elt_mode)
|
if (elt_mode)
|
||||||
*elt_mode = field_mode;
|
*elt_mode = field_mode;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue