http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53427
--- Comment #1 from Uros Bizjak <ubizjak at gmail dot com> 2012-05-20 19:14:20 UTC --- (gdb) bt #0 save_call_clobbered_regs () at ../../gcc-svn/trunk/gcc/caller-save.c:877 #1 0x0000000000873bd7 in reload (first=0x7ffff1b100c0, global=1) at ../../gcc-svn/trunk/gcc/reload1.c:939 #2 0x00000000007b6488 in do_reload () at ../../gcc-svn/trunk/gcc/ira.c:4261 #3 rest_of_handle_reload () at ../../gcc-svn/trunk/gcc/ira.c:4352 #4 0x0000000000827645 in execute_one_pass (pass=0x1427920) at ../../gcc-svn/trunk/gcc/passes.c:2183 #5 0x0000000000827a05 in execute_pass_list (pass=0x1427920) at ../../gcc-svn/trunk/gcc/passes.c:2238 #6 0x0000000000827a17 in execute_pass_list (pass=0x1428060) at ../../gcc-svn/trunk/gcc/passes.c:2239 #7 0x0000000000616688 in expand_function (node=0x7ffff19b1750) at ../../gcc-svn/trunk/gcc/cgraphunit.c:1603 #8 0x000000000061822b in expand_all_functions () at ../../gcc-svn/trunk/gcc/cgraphunit.c:1708 #9 compile () at ../../gcc-svn/trunk/gcc/cgraphunit.c:2007 (gdb) list 872 && HARD_REGISTER_P (cheap) 873 && TEST_HARD_REG_BIT (call_used_reg_set, REGNO (cheap))) 874 { 875 rtx call_set = single_set (insn); 876 rtx dest = SET_DEST (call_set); 877 rtx pat = gen_rtx_SET (VOIDmode, cheap, 878 copy_rtx (dest)); 879 chain = insert_one_insn (chain, 0, -1, pat); 880 } 881 } (gdb) p call_set $7 = (rtx_def *) 0x0 (gdb) p debug_rtx (insn) (call_insn 22 21 25 2 (parallel [ (set (reg:DI 0 ax) (call (mem:QI (symbol_ref:DI ("memcpy") [flags 0x41] <function_decl 0x7ffff1aee600 memcpy>) [0 memcpy S1 A8]) (const_int 0 [0]))) (unspec [ (const_int 2 [0x2]) ] UNSPEC_CALL_NEEDS_VZEROUPPER) ]) pr53427.c:12 632 {*call_value_vzeroupper} (expr_list:REG_RETURNED (reg/v/f:DI 2 cx [orig:64 arg ] [64]) (expr_list:REG_DEAD (reg:DI 5 di) (expr_list:REG_DEAD (reg:DI 4 si) (expr_list:REG_DEAD (reg:DI 1 dx) (expr_list:REG_UNUSED (reg:DI 0 ax) (expr_list:REG_EH_REGION (const_int 0 [0]) (nil))))))) (expr_list:REG_FRAME_RELATED_EXPR (set (reg:DI 0 ax) (reg:DI 5 di)) (expr_list:REG_FRAME_RELATED_EXPR (use (reg:DI 5 di)) (expr_list:REG_FRAME_RELATED_EXPR (use (reg:DI 4 si)) (expr_list:REG_FRAME_RELATED_EXPR (use (reg:DI 1 dx)) (nil)))))) As said elsewhere, tagging call insns with vzeroupper unspecs was not a good idea. While it worked, it is very fragile and not future proof. Please look at PR 47440. The fix for that PR will magically avoid failures of this type.