https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118936
--- Comment #7 from Uroš Bizjak <ubizjak at gmail dot com> --- (In reply to H.J. Lu from comment #6) > This works: > > diff --git a/gcc/config/i386/i386.cc b/gcc/config/i386/i386.cc > index 560e6525b56..f5d46296570 100644 > --- a/gcc/config/i386/i386.cc > +++ b/gcc/config/i386/i386.cc > @@ -8494,7 +8494,7 @@ ix86_find_all_reg_use_1 (rtx set, HARD_REG_SET > &stack_slot_access, > auto_bitmap &worklist) > { > rtx dest = SET_DEST (set); > - if (!REG_P (dest)) > + if (!GENERAL_REG_P (dest)) > return; > > rtx src = SET_SRC (set); This will prevent the ICE because we have copy from RAX to XMM: 170: xmm0:DI=ax:DI 98: xmm0:V2DI=vec_duplicate(xmm0:DI) REG_EQUIV vec_duplicate(`g_1680') 101: [`g_1679']=xmm0:V2DI 103: [const(`g_1679'+0x10)]=xmm0:V2DI 105: [const(`g_1679'+0x20)]=xmm0:V2DI 107: [const(`g_1679'+0x30)]=xmm0:V2DI But does not fix the fact that your algorithm considers these accesses even when they are in no way connected to stack or frame pointer. These do not even use registers in their address.