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 <vmaka...@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.