This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug rtl-optimization/38722] [4.4 Regression] Revision 143027 causes ICE in find_decomposable_subregs



------- 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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]