On Wed, 2014-01-15 at 22:47 -0700, Jeff Law wrote:

> > No, this really should be fixed in the target side.  In fact for MIPS
> > there is an instruction which does a conditional move based on the FP
> > CC register (movt/movf).  So you need to look into why the wrong
> > pattern is being selected instead.

> Or maybe during expansion.
> 
> jeff

It looks like this is going wrong in combine.  Before combine I have:


(insn 75 74 76 4 (set (reg:SI 240)
        (if_then_else:SI (ne:CC (reg:CC 67 $fcc0)
                (const_int 0 [0]))
            (reg:SI 228 [ D.1939+-3 ])
            (reg:SI 246))) 609 {*movsi_on_cc}
     (expr_list:REG_DEAD (reg:SI 228 [ D.1939+-3 ])
        (expr_list:REG_DEAD (reg:CC 67 $fcc0)
            (expr_list:REG_EQUAL (if_then_else:SI (ne:CC (reg:CC 67 $fcc0)
                        (const_int 0 [0]))
                    (reg:SI 228 [ D.1939+-3 ])
                    (const_int 1 [0x1]))
                (nil)))))
(insn 76 75 77 4 (set (reg:SI 228 [ D.1939+-3 ])
        (zero_extend:SI (subreg:QI (reg:SI 240) 3))) 185 {*zero_extendqisi2}
     (expr_list:REG_DEAD (reg:SI 240)
        (nil)))


After combine I have:

(note 75 74 76 4 NOTE_INSN_DELETED)
(insn 76 75 77 4 (set (reg:SI 228 [ D.1939+-3 ])
        (if_then_else:SI (ne:SI (reg:CC 67 $fcc0)
                (const_int 0 [0]))
            (reg:SI 228 [ D.1939+-3 ])
            (reg:SI 246))) 609 {*movsi_on_cc}
     (expr_list:REG_DEAD (reg:CC 67 $fcc0)
        (nil)))

The ne:CC in instruction 75 has become a ne:SI in instruction 76 after the 
combine.

Steve Ellcey
sell...@mips.com



Reply via email to