This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug rtl-optimization/38722] [4.4 Regression] Revision 143027 causes ICE in find_decomposable_subregs
- From: "steven at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 4 Jan 2009 20:02:08 -0000
- Subject: [Bug rtl-optimization/38722] [4.4 Regression] Revision 143027 causes ICE in find_decomposable_subregs
- References: <bug-38722-6642@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- 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