------- Comment #3 from kkojima at gcc dot gnu dot org 2008-01-18 12:50 ------- It looks the testcase segfaults because of a bad REG_LIBCALL note. The problematic part of .166r.split1 rtl dump looks like:
(insn:HI 100 103 179 15 xxx.c:74 (set (subreg:SI (reg:DI 198 [ regno ]) 0) (reg/v:SI 159 [ regno ])) 172 {movsi_ie} (insn_list:REG_LIBCALL 104 (expr_list:REG_NO_CONFLICT (reg/v:SI 159 [ regno ]) (nil)))) (insn 179 100 180 15 xxx.c:74 (parallel [ (set (subreg:SI (reg:DI 198 [ regno ]) 4) (ashift:SI (reg/v:SI 159 [ regno ]) (const_int 1 [0x1]))) (set (reg:SI 147 t) (lt:SI (reg/v:SI 159 [ regno ]) (const_int 0 [0x0]))) ]) -1 (nil)) (insn 180 179 106 15 xxx.c:74 (set (subreg:SI (reg:DI 198 [ regno ]) 4) (neg:SI (reg:SI 147 t))) -1 (nil)) but the insn 104 doesn't exist in this dump. The corresponding .165r.regmove dump is (insn:HI 100 103 104 15 xxx.c:74 (set (subreg:SI (reg:DI 198 [ regno ]) 0) (reg/v:SI 159 [ regno ])) 172 {movsi_ie} (insn_list:REG_LIBCALL 104 (expr_list:REG_NO_CONFLICT (reg/v:SI 159 [ regno ]) (nil)))) (insn:HI 104 100 106 15 xxx.c:74 (parallel [ (set (subreg:SI (reg:DI 198 [ regno ]) 4) (ashiftrt:SI (reg/v:SI 159 [ regno ]) (const_int 31 [0x1f]))) (clobber (reg:SI 147 t)) ]) 112 {ashrsi2_31} (expr_list:REG_DEAD (reg/v:SI 159 [ regno ]) (expr_list:REG_UNUSED (reg:SI 147 t) (insn_list:REG_RETVAL 100 (expr_list:REG_NO_CONFLICT (reg/v:SI 159 [ regno ]) (nil)))))) and it seems that the above insn 104 is splitted to insn 179 and 180 but try_split doesn't handle REG_RETVAL notes at all. -- kkojima at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |kkojima at gcc dot gnu dot | |org Status|UNCONFIRMED |NEW Ever Confirmed|0 |1 Last reconfirmed|0000-00-00 00:00:00 |2008-01-18 12:50:22 date| | http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34808