https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92190
Liu Hao <lh_mouse at 126 dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |lh_mouse at 126 dot com --- Comment #7 from Liu Hao <lh_mouse at 126 dot com> --- MSDN says 'the upper portions of YMM0-15 and ZMM0-15 are considered volatile and must be considered destroyed on function calls' explicitly [1]. I am not clear about the cause of OP's ICE, but I think it should conform to MSABI to emit VZEROUPPER in the epilog, followed by restoring XMM6 - XMM15, destroying their upper halves. Similar with the prolog. [1] https://docs.microsoft.com/en-us/cpp/build/x64-calling-convention?view=vs-2019#callercallee-saved-registers