http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56560
--- Comment #7 from Eric Botcazou <ebotcazou at gcc dot gnu.org> 2013-03-12 11:37:27 UTC --- > This patch adds expand_args to track library calls to > expend arguments. We add vzeroupper when expand_args == 1, > which indicates we are expanding the actual function. This looks complicated. A simpler approach could be to record the AVX state in the CUMULATIVE_ARGS structure and transfer it to cfun->machine only at the end of the argument processing. Comments and code in calls.c appear to guarantee that targetm.calls.function_arg (&args_so_far, VOIDmode, void_type_node, true) is invoked immediately before the call instruction is emitted.