AArch64: aarch64_class_max_nregs mishandles 64-bit structure modes [PR112577]
The target hook aarch64_class_max_nregs returns the incorrect result for 64-bit structure modes like V31DImode or V41DFmode etc. The calculation of the nregs is based on the size of AdvSIMD vector register for 64-bit modes which ought to be UNITS_PER_VREG / 2. This patch fixes the register size. gcc/ChangeLog: PR target/112577 * config/aarch64/aarch64.cc (aarch64_class_max_nregs): Handle 64-bit vector structure modes correctly.
This commit is contained in:
parent
c5f48b5fdd
commit
ca04e7a2e1
1 changed files with 2 additions and 0 deletions
|
@ -12961,6 +12961,8 @@ aarch64_class_max_nregs (reg_class_t regclass, machine_mode mode)
|
|||
&& constant_multiple_p (GET_MODE_SIZE (mode),
|
||||
aarch64_vl_bytes (mode, vec_flags), &nregs))
|
||||
return nregs;
|
||||
if (vec_flags == (VEC_ADVSIMD | VEC_STRUCT | VEC_PARTIAL))
|
||||
return GET_MODE_SIZE (mode).to_constant () / 8;
|
||||
return (vec_flags & VEC_ADVSIMD
|
||||
? CEIL (lowest_size, UNITS_PER_VREG)
|
||||
: CEIL (lowest_size, UNITS_PER_WORD));
|
||||
|
|
Loading…
Add table
Reference in a new issue