[Bug debug/39432] [4.4 Regression] gdb.base/store.exp failures
--- Comment #7 from vmakarov at gcc dot gnu dot org 2009-03-12 14:40 --- Subject: Bug 39432 Author: vmakarov Date: Thu Mar 12 14:39:55 2009 New Revision: 144812 URL: http://gcc.gnu.org/viewcvs?root=gccview=revrev=144812 Log: 2009-03-12 Vladimir Makarov vmaka...@redhat.com PR debug/39432 * ira-int.h (struct allocno): Fix comment for calls_crossed_num. * ira-conflicts.c (ira_build_conflicts): Prohibit call used registers for allocnos created from user-defined variables. Modified: trunk/gcc/ChangeLog trunk/gcc/ira-conflicts.c trunk/gcc/ira-int.h -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39432
[Bug debug/39432] [4.4 Regression] gdb.base/store.exp failures
--- Comment #8 from jakub at gcc dot gnu dot org 2009-03-12 15:49 --- Fixed, thanks. -- jakub at gcc dot gnu dot org changed: What|Removed |Added Status|UNCONFIRMED |RESOLVED Resolution||FIXED http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39432
[Bug debug/39432] [4.4 Regression] gdb.base/store.exp failures
--- Comment #1 from vmakarov at redhat dot com 2009-03-11 16:57 --- Jakub, how is about the following patch. Is it ok for you? I mean correct user variable identification. 2009-03-11 Vladimir Makarov vmaka...@redhat.com PR debug/39432 * ira-int.h (struct allocno): Fix comment for calls_crossed_num. * ira-conflicts.c (ira_build_conflicts): Prohibit call used registers for allocnos created from user-defined variables. Index: ira-int.h === --- ira-int.h (revision 144543) +++ ira-int.h (working copy) @@ -333,7 +333,7 @@ struct ira_allocno /* Accumulated frequency of calls which given allocno intersects. */ int call_freq; - /* Length of the previous array (number of the intersected calls). */ + /* Accumulated number of the intersected calls. */ int calls_crossed_num; /* Non NULL if we remove restoring value from given allocno to MEM_OPTIMIZED_DEST at loop exit (see ira-emit.c) because the Index: ira-conflicts.c === --- ira-conflicts.c (revision 144543) +++ ira-conflicts.c (working copy) @@ -800,29 +800,33 @@ ira_build_conflicts (void) } FOR_EACH_ALLOCNO (a, ai) { - if (ALLOCNO_CALLS_CROSSED_NUM (a) == 0) - continue; - if (! flag_caller_saves) + reg_attrs *attrs; + tree decl; + + if ((! flag_caller_saves ALLOCNO_CALLS_CROSSED_NUM (a) != 0) + /* For debugging purposes don't put user defined variables in +callee-clobbered registers. */ + || (optimize = 1 + (attrs = REG_ATTRS (regno_reg_rtx [ALLOCNO_REGNO (a)])) != NULL + (decl = attrs-decl) != NULL + VAR_OR_FUNCTION_DECL_P (decl) + DECL_NAME (decl) != NULL)) { IOR_HARD_REG_SET (ALLOCNO_TOTAL_CONFLICT_HARD_REGS (a), call_used_reg_set); - if (ALLOCNO_CALLS_CROSSED_NUM (a) != 0) - IOR_HARD_REG_SET (ALLOCNO_CONFLICT_HARD_REGS (a), - call_used_reg_set); + IOR_HARD_REG_SET (ALLOCNO_CONFLICT_HARD_REGS (a), + call_used_reg_set); } - else + else if (ALLOCNO_CALLS_CROSSED_NUM (a) != 0) { IOR_HARD_REG_SET (ALLOCNO_TOTAL_CONFLICT_HARD_REGS (a), no_caller_save_reg_set); IOR_HARD_REG_SET (ALLOCNO_TOTAL_CONFLICT_HARD_REGS (a), temp_hard_reg_set); - if (ALLOCNO_CALLS_CROSSED_NUM (a) != 0) - { - IOR_HARD_REG_SET (ALLOCNO_CONFLICT_HARD_REGS (a), - no_caller_save_reg_set); - IOR_HARD_REG_SET (ALLOCNO_CONFLICT_HARD_REGS (a), - temp_hard_reg_set); - } + IOR_HARD_REG_SET (ALLOCNO_CONFLICT_HARD_REGS (a), + no_caller_save_reg_set); + IOR_HARD_REG_SET (ALLOCNO_CONFLICT_HARD_REGS (a), + temp_hard_reg_set); } } if (optimize ira_conflicts_p -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39432
[Bug debug/39432] [4.4 Regression] gdb.base/store.exp failures
--- Comment #2 from rguenth at gcc dot gnu dot org 2009-03-11 17:02 --- You should use DECL_ARTIFICIAL I think. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39432
[Bug debug/39432] [4.4 Regression] gdb.base/store.exp failures
--- Comment #3 from vmakarov at redhat dot com 2009-03-11 17:10 --- Thanks, Richard. So instead of DECL_NAME (decl) != NULL I should use ! DECL_ARTIFICIAL (decl). Right? Ok, I'll test the new patch then and send it for approval after testing. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39432
[Bug debug/39432] [4.4 Regression] gdb.base/store.exp failures
--- Comment #4 from jakub at gcc dot gnu dot org 2009-03-11 17:11 --- Also perhaps should test DECL_HARD_REGISTER, for DECL_HARD_REGISTER we shouldn't limit them in any way to allow the user to shoot himself. In any case, I'll test your patch momentarily. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39432
[Bug debug/39432] [4.4 Regression] gdb.base/store.exp failures
--- Comment #5 from vmakarov at redhat dot com 2009-03-11 17:28 --- As for DECL_HARD_REGISTER, such decl regs are never considered by IRA for allocation. So I think there is no necessity to check them here. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39432
[Bug debug/39432] [4.4 Regression] gdb.base/store.exp failures
--- Comment #6 from jakub at gcc dot gnu dot org 2009-03-11 19:38 --- I can confirm that trunk with the #c1 patch modified as mentioned in #c3 cures all the gdb.base/store.exp failures. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39432