------- Comment #6 from danglin at gcc dot gnu dot org 2008-02-18 15:23 ------- The testcase compiles with -fno-gcse. However, the result from the gcse1 pass using the 4.2 branch is similar to that with 4.3.
In the greg dump with 4.3, we have: (insn 957 956 958 132 ../ports/sysdeps/unix/sysv/linux/hppa/nptl/lowlevellock.h:220 (set (reg/f:SI 735) (high:SI (symbol_ref:SI ("lock.8450") [flags 0x2] <var_decl 0x40605840 lock>))) 49 {*pa.md:3017} (expr_list:REG_EQUIV (high:SI (symbol_ref:SI ("lock.8450") [flags 0x2] <var_decl 0x40605840 lock>)) (nil))) (insn 958 957 1588 132 ../ports/sysdeps/unix/sysv/linux/hppa/nptl/lowlevellock.h:220 (set (reg/f:SI 743) (lo_sum:SI (reg/f:SI 735) (symbol_ref:SI ("lock.8450") [flags 0x2] <var_decl 0x40605840 lock>))) 52 {*pa.md:3097} (expr_list:REG_EQUIV (symbol_ref:SI ("lock.8450") [flags 0x2] <var_decl 0x40605840 lock>) (nil))) In the 4.2 dump, we have: (insn 1097 1096 1764 125 (set (reg:SI 1 %r1) (high:SI (symbol_ref:SI ("lock___8727") [flags 0x2] <var_decl 0x402ece18 lock>))) 49 {*pa.md:2959} (nil) (expr_list:REG_EQUIV (high:SI (symbol_ref:SI ("lock___8727") [flags 0x2] <va r_decl 0x402ece18 lock>)) (nil))) (insn 1764 1097 1102 125 (set (reg/f:SI 18 %r18 [692]) (reg:SI 1 %r1)) 37 {*pa.md:2484} (nil) (nil)) (insn 1102 1764 1098 125 (set (reg:SI 19 %r19 [574]) (const_int 1 [0x1])) 37 {*pa.md:2484} (nil) (expr_list:REG_EQUIV (const_int 1 [0x1]) (nil))) (insn 1098 1102 1103 125 (set (reg/f:SI 10 %r10 [694]) (lo_sum:SI (reg/f:SI 18 %r18 [692]) (symbol_ref:SI ("lock___8727") [flags 0x2] <var_decl 0x402ece18 lock >))) 52 {*pa.md:3039} (nil) (expr_list:REG_EQUIV (symbol_ref:SI ("lock___8727") [flags 0x2] <var_decl 0x 402ece18 lock>) (nil))) Also, there is: Reloads for insn # 1097 Reload 0: reload_out (SI) = (reg/f:SI 18 %r18 [692]) R1_REGS, RELOAD_FOR_OUTPUT (opnum = 0) reload_out_reg: (reg/f:SI 18 %r18 [692]) reload_reg_rtx: (reg:SI 1 %r1) It seems like 4.3 is no longer doing the output reload. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35193