------- Comment #11 from steven at gcc dot gnu dot org 2009-01-04 20:02 ------- Note that this test case ICEs in IRA, but I've checked that it ICEs on the same insn, and in both cases we're looking at incorrect recog_data.
$ gdb --args ../f951.exe -O t.f90 GNU gdb 6.8.0.20080328-cvs (cygwin-special) Copyright (C) 2008 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "i686-pc-cygwin"... (gdb) run Starting program: /home/Steven_Bosscher/devel/build-x86_64/gcc/f951.exe -O t.f90 [New thread 6068.0x1710] [New thread 6068.0x1574] qs_ks_build_kohn_sham_matrix Analyzing compilation unit Performing interprocedural optimizations <visibility> <early_local_cleanups> <summary generate> <inline> <static-var> <pure-const>Assembling functions: qs_ks_build_kohn_sham_matrix Program received signal SIGSEGV, Segmentation fault. 0x00d8c3f6 in record_operand_costs (insn=0x7fd6a690, op_costs=0x10d46d8, allocno_pref=0x0) at ../../trunk/gcc/ira-costs.c:953 953 if (GET_CODE (recog_data.operand[i]) == SUBREG) (gdb) up #1 0x00d8c854 in scan_one_insn (insn=0x7fd6a690) at ../../trunk/gcc/ira-costs.c:1034 1034 record_operand_costs (insn, op_costs, allocno_pref); (gdb) p debug_rtx(insn) (insn 265 200 227 25 t.f90:8 (parallel [ (set (reg:DI 179) (mult:DI (reg:DI 178) (reg:DI 92 [ D.4651 ]))) (clobber (reg:CC 17 flags)) ]) 89 {*movdi_1_rex64} (expr_list:REG_DEAD (reg:DI 178) (expr_list:REG_DEAD (reg:DI 92 [ D.4651 ]) (expr_list:REG_UNUSED (reg:CC 17 flags) (nil))))) $1 = void (gdb) # That is *not* a mov insn (gdb) # Let's reset INSN_CODE, and re-recog it... (gdb) set insn.u.fld[6]=-1 (gdb) set insn.u.fld[6] = recog(insn.u.fld[5],insn,0)(gdb) # ...and suddenly it's a mul insn, as it should be: (gdb) p debug_rtx(insn) (insn 265 200 227 25 t.f90:8 (parallel [ (set (reg:DI 179) (mult:DI (reg:DI 178) (reg:DI 92 [ D.4651 ]))) (clobber (reg:CC 17 flags)) ]) 332 {*muldi3_1_rex64} (expr_list:REG_DEAD (reg:DI 178) (expr_list:REG_DEAD (reg:DI 92 [ D.4651 ]) (expr_list:REG_UNUSED (reg:CC 17 flags) (nil))))) $10 = void -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38722