Jean Christophe Beyler writes:
> As we can see, all three are using the symbol_ref data before adding
> their offset. But after cse, we get this:
>
> (insn 5 2 6 2 ex1b.c:8 (set (reg/f:DI 74)
> (const:DI (plus:DI (symbol_ref:DI ("data") <var_decl 0xb7d35058 data>)
> (const_int 8 [0x8])))) 71 {movdi_internal} (nil))
>
> (insn 6 5 7 2 ex1b.c:8 (set (reg/f:DI 75)
> (symbol_ref:DI ("data") <var_decl 0xb7d35058 data>)) 71
> {movdi_internal} (nil))
You will have to debug CSE. The actual replacment is done in this loop in
cse_insn:
/* Terminate loop when replacement made. This must terminate since
the current contents will be tested and will always be valid. */
while (1)
{
Adam