[Bug target/22077] [4.0/4.1 Regression] vec_all_eq does not produce good result
pinskia at gcc dot gnu dot org
gcc-bugzilla@gcc.gnu.org
Wed Jun 15 22:53:00 GMT 2005
------- 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
More information about the Gcc-bugs
mailing list