This is the mail archive of the gcc-patches@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]

Re: patch to fix PR55430


On 12-11-23 7:42 AM, Uros Bizjak wrote:
Hello!

The following patch fixes

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55430

The patch was successfully bootstrapped and tested on x86/x86-64.

Committed as rev. 193742.

2012-11-22 Vladimir Makarov <vmakarov@redhat.com>

         PR middle-end/55430
         * lra.c: Move #include "hard-reg-set.h" before #include "rtl.h".
         (new_insn_reg): Update biggest_mode.
         (collect_non_operand_hard_regs): Check eliminable regs too.
         (initialize_lra_reg_info_element): Initialize biggest_mode.
         (add_regs_to_insn_regno_info): Ignore non-allocatable
         non-eliminable hard regs.
         (lra.c): Move setting lra_no_alloc_regs before
         init_insn_recog_data.
         * lra-constraints.c (simplify_operand_subreg): Add a comment.
         (lra_constraints): Ignore equivalent memory of
         regs occuring in paradoxical subregs.
         * lra-lives.c (lra_create_live_ranges): Add a comment.


On Linux/x86-64, this caused:

FAIL: gcc.target/i386/avx-vzeroupper-16.c (internal compiler error)
FAIL: gcc.target/i386/avx-vzeroupper-16.c (test for excess errors)
FAIL: gcc.target/i386/avx-vzeroupper-17.c (internal compiler error)
FAIL: gcc.target/i386/avx-vzeroupper-17.c (test for excess errors)
FAIL: gcc.target/i386/avx-vzeroupper-18.c (internal compiler error)
FAIL: gcc.target/i386/avx-vzeroupper-18.c (test for excess errors)
FAIL: gcc.target/i386/pr43869.c (internal compiler error)
FAIL: gcc.target/i386/pr43869.c (test for excess errors)
FAIL: gcc.target/x86_64/abi/callabi/vaarg-1.c (internal compiler error)
FAIL: gcc.target/x86_64/abi/callabi/vaarg-1.c (test for excess errors)
FAIL: gcc.target/x86_64/abi/callabi/vaarg-3.c (internal compiler error)
FAIL: gcc.target/x86_64/abi/callabi/vaarg-3.c (test for excess errors)
FAIL: gcc.target/x86_64/abi/callabi/vaarg-4a.c (internal compiler error)
FAIL: gcc.target/x86_64/abi/callabi/vaarg-4a.c (test for excess errors)
FAIL: gcc.target/x86_64/abi/callabi/vaarg-4b.c (internal compiler error)
FAIL: gcc.target/x86_64/abi/callabi/vaarg-4b.c (test for excess errors)
FAIL: gcc.target/x86_64/abi/callabi/vaarg-5a.c (internal compiler error)
FAIL: gcc.target/x86_64/abi/callabi/vaarg-5a.c (test for excess errors)
FAIL: gcc.target/x86_64/abi/callabi/vaarg-5b.c (internal compiler error)
FAIL: gcc.target/x86_64/abi/callabi/vaarg-5b.c (test for excess errors)
Compiling gcc.target/i386/pr43869.c, I got a couple of valgrind errors:

bugged

==13536== Conditional jump or move depends on uninitialised value(s)
==13536==    at 0x7C821D: mark_pseudo_regno_live(int) (sparseset.h:147)
==13536==    by 0x7C9234: process_bb_node_lives(ira_loop_tree_node*)
(ira-lives.c:1322)
==13536==    by 0x7B2BB8: ira_traverse_loop_tree(bool,
ira_loop_tree_node*, void (*)(ira_loop_tree_node*), void
(*)(ira_loop_tree_node*)) (ira-build.c:1604)
==13536==    by 0x7C9E11: ira_create_allocno_live_ranges() (ira-lives.c:1596)
==13536==    by 0x7B34CC: ira_build() (ira-build.c:3198)

==13536== Conditional jump or move depends on uninitialised value(s)
==13536==    at 0x7C80F7: make_object_born(ira_object*) (sparseset.h:147)
==13536==    by 0x7C823A: mark_pseudo_regno_live(int) (ira-lives.c:295)
==13536==    by 0x7C9234: process_bb_node_lives(ira_loop_tree_node*)
(ira-lives.c:1322)
==13536==    by 0x7B2BB8: ira_traverse_loop_tree(bool,
ira_loop_tree_node*, void (*)(ira_loop_tree_node*), void
(*)(ira_loop_tree_node*)) (ira-build.c:1604)
==13536==    by 0x7C9E11: ira_create_allocno_live_ranges() (ira-lives.c:1596)
==13536==    by 0x7B34CC: ira_build() (ira-build.c:3198)

isbugged

==13536== Invalid read of size 4
==13536==    at 0x7DCF50: new_insn_reg(int, op_type, machine_mode,
bool, bool, lra_insn_reg*) (lra.c:464)
==13536==    by 0x7DD623: collect_non_operand_hard_regs(rtx_def**,
lra_insn_recog_data*, lra_insn_reg*, op_type, bool) (lra.c:947)
==13536==    by 0x7DD660: collect_non_operand_hard_regs(rtx_def**,
lra_insn_recog_data*, lra_insn_reg*, op_type, bool) (lra.c:986)
==13536==    by 0x7DE43C: lra_set_insn_recog_data(rtx_def*) (lra.c:1131)
==13536==    by 0x7DEE85: check_rtl(bool) (lra-int.h:420)
==13536==    by 0x7DFF5E: lra(_IO_FILE*) (lra.c:2218)

==13536== Invalid write of size 4
==13536==    at 0x7DCF63: new_insn_reg(int, op_type, machine_mode,
bool, bool, lra_insn_reg*) (lra.c:465)
==13536==    by 0x7DD623: collect_non_operand_hard_regs(rtx_def**,
lra_insn_recog_data*, lra_insn_reg*, op_type, bool) (lra.c:947)
==13536==    by 0x7DD660: collect_non_operand_hard_regs(rtx_def**,
lra_insn_recog_data*, lra_insn_reg*, op_type, bool) (lra.c:986)
==13536==    by 0x7DE43C: lra_set_insn_recog_data(rtx_def*) (lra.c:1131)
==13536==    by 0x7DEE85: check_rtl(bool) (lra-int.h:420)
==13536==    by 0x7DFF5E: lra(_IO_FILE*) (lra.c:2218)


Thanks, Uros. H.J. also reported this. I hope I'll fix it soon. My mistake was in testing GCC in release mode and the bug occurs only when checking is on.


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