https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107208
--- Comment #4 from Richard Earnshaw <rearnsha at gcc dot gnu.org> --- (In reply to vfdff from comment #3) > it seems releted to targetm.calls.function_value called by assign_parms, who > return different behaviour for MODE_COMPLEX_FLOAT and MODE_COMPLEX_INT. With > the following changes, then choose a pair of DI for the int case > ``` > @@ -20333,7 +20333,7 @@ aarch64_vfp_is_call_or_return_candidate > (machine_mode mode, > *count = 1; > new_mode = mode; > } > - else if (GET_MODE_CLASS (mode) == MODE_COMPLEX_FLOAT) > + else if (COMPLEX_MODE_P (mode)) > > ``` This can't be right. aarch64_vfp_is_call_or_return_candidate is for VFP/SIMD arguments and complex int is not one of those.