------- Comment #6 from kazu at gcc dot gnu dot org  2006-05-10 15:00 -------
The combiner seems to be doing something strange:

(insn 13 12 16 2 (set (reg:HI 21)
        (eq:HI (cc0)
            (const_int 0 [0x0]))) 237 {*bstzhireg} (nil)
    (nil))

(insn 16 13 17 2 (set (cc0)
        (reg:HI 21)) 114 {tsthi} (insn_list:REG_DEP_TRUE 13 (nil))
    (nil))

(jump_insn 17 16 19 2 (set (pc)
        (if_then_else (eq (cc0)
                (const_int 0 [0x0]))
            (label_ref:SI 39)
            (pc))) 181 {branch_true} (nil)
    (expr_list:REG_BR_PROB (const_int 5347 [0x14e3])
        (nil)))

is transformed to

(insn 16 13 17 2 (set (pc)
        (if_then_else (ne (cc0)
                (const_int 0 [0x0]))
            (label_ref:SI 39)
            (pc))) 181 {branch_true} (nil)
    (nil))

(jump_insn 17 16 19 2 (set (reg:HI 21)
        (eq:HI (cc0)
            (const_int 0 [0x0]))) 237 {*bstzhireg} (nil)
    (expr_list:REG_BR_PROB (const_int 5347 [0x14e3])
        (nil)))

Note that the combiner puts a branch instruction one insn
before the last insn in the basic block.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=27477

Reply via email to