------- Comment #8 from sje at cup dot hp dot com 2010-02-02 17:49 ------- Using test case from comment #7, I compared r156291 and r156292 (plus the patch from comment #6). I compiled with -O1 and it looks like we go wrong during common sub expression elimination.
r156291 has x.c.150r.cse1 with: (insn 81 80 82 4 y.c:5 (set (reg:DI 156) (plus:DI (reg:DI 27 %r27) (high:DI (symbol_ref/u:DI ("*L$C0000") [flags 0x2])))) 84 {*pa.md:2561} (nil)) (insn 82 81 83 4 y.c:5 (set (reg/f:DI 155) (mem/u/c:DI (lo_sum:DI (reg:DI 156) (unspec:DI [ (symbol_ref/u:DI ("*L$C0000") [flags 0x2]) ] 2)) [0 S8 A64])) 120 {*pa.md:4100} (expr_list:REG_EQUAL (symbol_ref/u:DI ("*L$C0000") [flags 0x2]) (nil))) (insn 83 82 84 4 y.c:5 (set (reg:DF 157) (mem/u/c/i:DF (reg/f:DI 155) [0 S8 A64])) 118 {*pa.md:3933} (nil)) Where as r156292 (plus patch) has: (insn 81 80 82 4 y.c:5 (set (reg:DI 156) (plus:DI (reg:DI 27 %r27) (high:DI (symbol_ref/u:DI ("*L$C0000") [flags 0x2])))) 84 {*pa.md:2561} (nil)) (insn 82 81 83 4 y.c:5 (set (reg/f:DI 155) (const_int 0 [0x0])) 120 {*pa.md:4100} (expr_list:REG_EQUAL (symbol_ref/u:DI ("*L$C0000") [flags 0x2]) (nil))) (insn 83 82 84 4 y.c:5 (set (reg:DF 157) (mem/u/c/i:DF (reg/f:DI 155) [0 S8 A64])) 118 {*pa.md:3933} (nil)) -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42924