https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61656
--- Comment #5 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Depends on what testcase. In pr42025-2.c, it clearly uses movl %edi, %eax, with and without the patch. If I write: typedef struct { int p; } Ptr; struct A { long int i; union { Ptr p; int q; } u; }; extern Ptr get_stuff (void); extern void use_stuff (int); __attribute__((noinline, noclone)) static int foo(struct A p, int q) { int ret = p.u.q; if (p.i) p.u.p = get_stuff (); else p.u.q = q; use_stuff (p.u.q); return ret; } void bar(struct A *p, int q) { foo(*p, q); } then it uses movq %rsi, ... and the patch doesn't change anything on that. If you want to use movl %esi, ... in foo in this testcase, more changes are needed of course.