------- Additional Comments From pinskia at gcc dot gnu dot org  2005-06-15 
22:53 -------
This does not look like target bug after all.  The extra move does not matter 
as it is removed in the 3.4/
4.0 case before getting to .combine:
int foo(vector float x, vector float y) {
int t = vec_all_eq(x,y);
        if (t) return 3245; 
        else return 12;
}


it looks like .combine is not doing its job and we reject now the combine of 
the following RTL:
(insn 11 10 12 0 (set (reg:SI 121)
        (lt:SI (reg:CC 74 cr6)
            (const_int 0 [0x0]))) 424 {*rs6000.md:11313} (insn_list 10 (nil))
    (expr_list:REG_DEAD (reg:CC 74 cr6)
        (nil)))

(insn 12 11 13 0 (set (reg:CC 123)
        (compare:CC (reg:SI 121)
            (const_int 0 [0x0]))) 415 {*cmpsi_internal1} (insn_list 11 (nil))
    (expr_list:REG_DEAD (reg:SI 121)
        (nil)))

(jump_insn 13 12 40 0 (set (pc)
        (if_then_else (eq (reg:CC 123)
                (const_int 0 [0x0]))
            (label_ref 22)
            (pc))) 521 {*rs6000.md:13595} (insn_list 12 (nil))
    (expr_list:REG_DEAD (reg:CC 123)
        (expr_list:REG_BR_PROB (const_int 5000 [0x1388])
            (nil))))

Into:
(insn 12 11 13 0 (set (reg:CCEQ 123)
        (compare:CCEQ (lt:SI (reg:CC 74 cr6)
                (const_int 0 [0x0]))
            (const_int 0 [0x0]))) 527 {*cceq_rev_compare} (insn_list 10 (nil))
    (expr_list:REG_DEAD (reg:CC 74 cr6)
        (nil)))

(jump_insn 13 12 40 0 (set (pc)
        (if_then_else (eq (reg:CCEQ 123)
                (const_int 0 [0x0]))
            (label_ref 22)
            (pc))) 521 {*rs6000.md:13595} (insn_list 12 (nil))
    (expr_list:REG_DEAD (reg:CC 123)
        (expr_list:REG_BR_PROB (const_int 5000 [0x1388])
            (nil))))

This might be due to the changes in taking into account the cost.

Maybe combine should combine it even further to the correct thing.

-- 


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

Reply via email to