------- Comment #10 from dje at gcc dot gnu dot org 2008-05-01 17:33 ------- In your second example, the RTL is in the canonical form that I would have expected and already is handled:
(mem/u/c/i:DF (plus:DI (reg:DI 2 2) (const:DI (plus:DI (minus:DI (symbol_ref/u:DI ("*.LC0") [flags 0x2]) (symbol_ref:DI ("*.LCTOC1"))) (const_int 8 [0x8])))) [2 S8 A64]) The other solution is to ensure the propagated value produces canonical RTL. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36090