------- Comment #2 from jakub at gcc dot gnu dot org 2008-11-17 09:21 ------- Web pass changes: (insn 14 13 16 2 920929-1.c:5 (parallel [ (set (reg:SI 70) (unspec_volatile:SI [ (reg:SI 70) ] 1)) (set (reg/f:SI 7 sp) (minus:SI (reg/f:SI 7 sp) (reg:SI 70))) (clobber (reg:CC 17 flags)) ]) 672 {allocate_stack_worker_32} (nil)) into: (insn 14 13 16 2 920929-1.c:5 (parallel [ (set (reg:SI 80) (unspec_volatile:SI [ (reg:SI 70) ] 1)) (set (reg/f:SI 7 sp) (minus:SI (reg/f:SI 7 sp) (reg:SI 70))) (clobber (reg:CC 17 flags)) ]) 672 {allocate_stack_worker_32} (nil)) Is this correct (given that the pattern uses match_dup)? Also, is there a reason why the allocate_stack_worker_{32,64} patterns use match_dup for between the output register and input register? I'd say using (match_operand:SI 0 "register_operand" "=a") for the output reg and (match_operand:SI 1 "register_operand" "a") for the input reg (match_dup 1)ed into the sp adjustment would give the RA more freedom.
-- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38130