https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105554
--- Comment #7 from Richard Biener <rguenth at gcc dot gnu.org> --- (In reply to Martin Liška from comment #6) > We fail in the param assignment: > > (gdb) pp x > (reg:V4DI 82) > (gdb) pp y > (mem/c:BLK (reg/f:DI 76 virtual-incoming-args) [1 x+0 S32 A256]) > > So we will likely need something similar to what we have in tree-inline.cc: > > 5928 /* For vector typed decls make sure to update DECL_MODE according > 5929 to the new function context. */ > 5930 if (VECTOR_TYPE_P (TREE_TYPE (copy))) > 5931 SET_DECL_MODE (copy, TYPE_MODE (TREE_TYPE (copy))); > > @Richi: Do you have a clue where to adjust it? I think it goes wrong in use_register_for_decl (called from assign_parm_setup_block). diff --git a/gcc/function.cc b/gcc/function.cc index d975b001ec9..b54f9b33c6a 100644 --- a/gcc/function.cc +++ b/gcc/function.cc @@ -2229,7 +2229,9 @@ use_register_for_decl (const_tree decl) } /* Only register-like things go in registers. */ - if (DECL_MODE (decl) == BLKmode) + if (DECL_MODE (decl) == BLKmode + || (VECTOR_TYPE_P (TREE_TYPE (decl)) + && TYPE_MODE (TREE_TYPE (decl)) == BLKmode)) return false; /* If -ffloat-store specified, don't put explicit float variables fixes the ICE, not sure if we should adjust the PARM_DECLs mode somewhere in target cloning instead though?