------- Additional Comments From pinskia at gcc dot gnu dot org 2005-02-22
01:15 -------
Ok, I see what is going on now.
This is a RTL optimization bug.
The following (in .combine) is being combined:
(insn 37 35 38 4 (set (reg:SI 131)
(lshiftrt:SI (subreg/s/u:SI (reg/v:DI 122 [ x.4 ]) 4)
(const_int 1 [0x1]))) -1 (nil)
(expr_list:REG_DEAD (reg/v:DI 122 [ x.4 ])
(nil)))
(insn 38 37 39 4 (set (reg/v:DI 122 [ x.4 ])
(zero_extend:DI (reg:SI 131))) -1 (insn_list:REG_DEP_TRUE 37 (nil))
(expr_list:REG_DEAD (reg:SI 131)
(nil)))
(insn 39 38 40 4 (set (reg:CC 132)
(compare:CC (reg/v:DI 122 [ x.4 ])
(const_int 0 [0x0]))) -1 (insn_list:REG_DEP_TRUE 38 (nil))
(nil))
Into:
(insn 39 38 40 4 (parallel [
(set (reg:CC 132)
(compare:CC (lshiftrt:DI (reg/v:DI 122 [ x.4 ])
(const_int 1 [0x1]))
(const_int 0 [0x0])))
(set (reg/v:DI 122 [ x.4 ])
(lshiftrt:DI (reg/v:DI 122 [ x.4 ])
(const_int 1 [0x1])))
]) 259 {*lshrdi3_internal3} (nil)
(nil))
Which is wrong, see how we have DI mode here but we have SI mode before so now
we are shifting all
the way which is wrong.
--
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Ever Confirmed| |1
Last reconfirmed|0000-00-00 00:00:00 |2005-02-22 01:15:27
date| |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20134