https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87984
--- Comment #24 from Jakub Jelinek <jakub at gcc dot gnu.org> --- FRE doesn't, as that breaks the #c9 testcase. a = 1; __asm__("add %1, %0" : "=r" o_12 : "r" a, "0" 0); __asm__ __volatile__("xor %%eax, %%eax" : : : "eax"); i_13 = 1; a = 1; __asm__("add %1, %0" : "=r" o_18 : "r" a, "0" o_12); __asm__ __volatile__("xor %%eax, %%eax" : : : "eax"); i_19 = 2; a = 1; __asm__("add %1, %0" : "=r" o_24 : "r" a, "0" o_18); __asm__ __volatile__("xor %%eax, %%eax" : : : "eax"); i_25 = 3; to: a = 1; __asm__("add %1, %0" : "=r" o_12 : "r" a, "0" 0); __asm__ __volatile__("xor %%eax, %%eax" : : : "eax"); __asm__("add %1, %0" : "=r" o_18 : "r" a, "0" o_12); __asm__ __volatile__("xor %%eax, %%eax" : : : "eax"); __asm__("add %1, %0" : "=r" o_24 : "r" a, "0" o_18); __asm__ __volatile__("xor %%eax, %%eax" : : : "eax"); If SCCVN would never record values for DECL_HARD_REGISTER vars or something similar, it wouldn't do this.