On Tue, 2015-01-20 at 20:05 +0900, Kaz Kojima wrote:
> Oleg Endo <oleg.e...@t-online.de> wrote:
> > The updated treg_set_expr patch is attached, which should fix the GBR
> > issues.  Tests here OK.
> > Kaz, could you please try again?
> 
> New tests that FAIL:
> 
> libgomp.fortran/udr14.f90   -O3 -g  (internal compiler error)
> libgomp.fortran/udr14.f90   -O3 -g  (test for excess errors)
> 
> Old tests that passed, that have disappeared: (Eeek!)
> 
> gcc.target/sh/pr49263-1.c scan-assembler-not bclr
> gcc.target/sh/pr49263-1.c scan-assembler-times extu 1
> gcc.target/sh/pr49263-2.c scan-assembler-times -129 2
> gcc.target/sh/pr49263-2.c scan-assembler-times extu 1

That's OK.  The patch removes the xfail markers from already committed
tests.

> 
> For the new ICE, libgomp tests log says:
> 
> /exp/ldroot/dodes/LOCAL/trunk/libgomp/testsuite/libgomp.fortran/udr14.f90:15:0:
>  internal compiler error: in maybe_record_trace_start, at dwarf2cfi.c:2318
> 0x8384ad6 maybe_record_trace_start
>       ../../LOCAL/trunk/gcc/dwarf2cfi.c:2318
> 0x8385023 scan_trace
>       ../../LOCAL/trunk/gcc/dwarf2cfi.c:2496
> 0x8385b35 create_cfi_notes
>       ../../LOCAL/trunk/gcc/dwarf2cfi.c:2650
> 0x8385b35 execute_dwarf2_frame
>       ../../LOCAL/trunk/gcc/dwarf2cfi.c:3006
> 0x8385b35 execute
>       ../../LOCAL/trunk/gcc/dwarf2cfi.c:3486
> Please submit a full bug report,
> ...
> 
> "./f951 udr14.f90 -g -O3 -fopenmp -o xxx.s" can reproduce this ICE.

That's .. ugh..
Without -g it compiles fine.  The resulting code is pretty much the same
as without the patch.  The only thing that combines/splits differently
are the few comparisons and movrt_negc pattern uses.  With the patch the
magic constant '-1' is not shared that often anymore.  This is a known
issue and small 'regression' of the patch (but a general problem on SH).
Anyway, this has nothing to do with debug info.
dwarf2cfi.c's last words are:

Processing trace 45 : start at code_label 723
   saw edge from trace 45 to 46 (via fallthru 0)

and the RTL there looks like this:

(note 3417 3416 3418 (var_location x (nil)) NOTE_INSN_VAR_LOCATION)
(note 3418 3417 723 (var_location y (nil)) NOTE_INSN_VAR_LOCATION)
(code_label 723 3418 724 6 "" [1 uses])
(note 724 723 3569 [bb 54] NOTE_INSN_BASIC_BLOCK)
(code_label 3569 724 727 103 "" [1 uses])
(insn 727 3569 3661 (set (reg:SI 147 t)
        (ge:SI (reg:SI 1 r1 [orig:286 D.1466 ] [286])
            (reg:SI 2 r2 [orig:284 D.1466 ] [284]))) udr14.f90:35 15 {cmpgesi_t}
     (nil))

It looks like the SH reorg pass is creating this.  The compiled code
with the patch applied (without -g) also shows some constant pool
placement differences, which are done by the SH reorg pass.

Increasing the size of define_insn_and_split "movrt_negc" from 2 to 4
makes the problem go away with the patch.
Without the patch the ICE can be triggered by increasing the size of
define_insn_and_split "movrt_negc" from 2 to 3.

I guess this is a latent bug/problem of SH reorg (maybe PR 59189) or the
dwarf2cfi.c code (maybe PR 64602).

Cheers,
Oleg


Reply via email to