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 other/63504] [5 Regression] Issues found by --enable-checking=valgrind


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63504

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |jakub at gcc dot gnu.org,
                   |                            |segher at gcc dot gnu.org

--- Comment #10 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
I can reproduce 3) with current trunk (again, using x86_64-linux ->
powerpc64-linux cross).
The problem is that on
(set (reg:DI 213)
    (plus:DI (reg:DI 211 [ D.2022+-4 ])
        (const_int -4294967297 [0xfffffffeffffffff])))
we get:
#6  0x000000000093ea52 in gen_raw_REG (mode=DImode, regno=215) at
../../gcc/emit-rtl.c:440
#7  0x000000000093fc35 in gen_reg_rtx (mode=DImode) at
../../gcc/emit-rtl.c:1081
#8  0x000000000116465c in gen_split_1299 (curr_insn=0x7ffff19a4000,
operands=0x1d86980 <recog_data>) at ../../gcc/config/rs6000/rs6000.md:1639
#9  0x00000000012693fd in split_11 (x0=0x7ffff19a3f48, insn=0x7ffff19a4000) at
../../gcc/config/rs6000/rs6000.md:305
#10 0x0000000001273870 in split_insns (x0=0x7ffff19a3f48,
uncast_insn=0x7ffff19a4000) at ../../gcc/config/rs6000/rs6000.md:12081
#11 0x00000000012a2c0e in combine_split_insns (pattern=0x7ffff19a3f48,
insn=0x7ffff19a4000) at ../../gcc/combine.c:552
#12 0x00000000012aaba1 in try_combine (i3=0x7ffff19a4000, i2=0x7ffff1935d80,
i1=0x7ffff1935d40, i0=0x0, new_direct_jump_p=0x7fffffffde7c, 
    last_combined_insn=0x7ffff19a4000) at ../../gcc/combine.c:3482
#13 0x00000000012a49d4 in combine_instructions (f=0x7ffff19698f8, nregs=215) at
../../gcc/combine.c:1396
#14 0x00000000012c7d52 in rest_of_handle_combine () at
../../gcc/combine.c:14107

combine_split_insns takes care to adjust reg_stat vector, but
regstat_n_sets_and_refs unfortunately is not a vector, and there is no function
to reallocate it and update for the added pseudos.
So, either we need to change that into a vector and add some entry point to
grow it, or guard all uses of REG_N_SETS etc. in the combiner with comparison
against maximum pseudo at the start of combine, something else?


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