https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65334
--- Comment #2 from Jan Hubicka <hubicka at gcc dot gnu.org> --- We ICE at: 0x080486d9 <+409>: cmp %eax,%ebx 0x080486db <+411>: jge 0x80486c8 <isub4_+392> => 0x080486dd <+413>: movdqa 0x80cf41c,%xmm7 0x080486e5 <+421>: movl $0x5,0x10(%edi) 0x080486ec <+428>: movups %xmm7,(%edi) 0x080486ef <+431>: mov %esi,0x30(%esp) 0x080486f3 <+435>: add $0x1c,%esp 0x080486f6 <+438>: pop %ebx 0x080486f7 <+439>: pop %esi 0x080486f8 <+440>: pop %edi 0x080486f9 <+441>: pop %ebp so this is an alignment issue. movdqa A.22.3410, %xmm7 movl $5, 16(%edi) movups %xmm7, (%edi) The var is defined as follows: .long 1 .align 4 .type A.94.3694, @object .size A.94.3694, 20 A.94.3694: .long 1 .long 2 .long 3 .long 4 .long 5 .set A.22.3410,A.94.3694 so it is not actually aligned. Without ICF we get: .align 16 .type A.22.3410, @object .size A.22.3410, 20 A.22.3410: .long 1 .long 2 .long 3 .long 4 .long 5 So this is an increase_alignment bug - it does not consider aliases.