[Bug target/14798] [3.4/4.0/4.1/4.2 Regression] In case of SH target with -O2 option #pragma interrupt doesn't get resetted.
--- Comment #23 from amylaar at gcc dot gnu dot org 2006-01-30 17:22 --- Fixed on mainline and the 4.1 branch. -- amylaar at gcc dot gnu dot org changed: What|Removed |Added Status|ASSIGNED|RESOLVED Resolution||FIXED http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14798
[Bug target/14798] [3.4/4.0/4.1/4.2 Regression] In case of SH target with -O2 option #pragma interrupt doesn't get resetted.
--- Comment #22 from amylaar at gcc dot gnu dot org 2006-01-30 16:19 --- Subject: Bug 14798 Author: amylaar Date: Mon Jan 30 16:19:11 2006 New Revision: 110401 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=110401 Log: PR target/14798: gcc: * sh.c (pragma_interrupt, trap_exit, sp_switch): Remove variable. (pragma_trap, pragma_nosave_low_regs): Likewise. (current_function_anonymous_args): Likewise. (sh_deferred_function_attributes): New variable. (sh_deferred_function_attributes_tail): Likewise. (print_operand): For '@', look up trap_exit attribute. (calc_live_regs): Look up trapa_handler attribute. For trapa handlers, save/restore fpscr, but don't do any other interrupt-specific saves. Don't save r0..r7 if the nosave_low_regs attribute is in effect. Fix check for partially saved registers to check for SHmedia. (sh_expand_prologue, sh_expand_epilogue): Look up sp_switch attribute. (sh_output_function_epilogue): Don't clear any of the removed variables. (sh_insert_attributes): Don't check pragma_interrupt. Insert deferred attributes. Check that interrupt attribute is present for other attributes that require its presence. (sh_attribute_table): Add new attributes trapa_handler and nosave_low_regs. (sh_handle_sp_switch_attribute, sh_handle_trap_exit_attribute): Don't check for pragma_interrupt. Don't store argument. * sh.h (pragma_interrupt, sp_switch): Don't declare. (sh_deferred_function_attributes): Declare. (sh_deferred_function_attributes_tail): Likewise. * sh.md (sp_switch_1): Add operand. Change generator caller. (sh_pr_interrupt, sh_pr_trapa, sh_pr_nosave_low_regs): Remove. (*return_i): Don't use when trap_exit attribute is in effect. (*return_trapa): New insn pattern. * sh-c.c: New file. * config.gcc (sh[123456ble]*-* | sh-*-*): New trailer stanza, setting c_target_objs and cxx_target_objs. * t-sh: Add rule for sh-c.o. * config/sh/sh.c (sh_cfun_trap_exit_p): New function. * sh-protos.h (sh_cfun_trap_exit_p): Declare. gcc/testsuite: * gcc.dg/pragma-isr.c: Added target sh[1234ble]*-*-*. * gcc.dg/pragma-isr2.c, gcc.dg/pragma-isr-trapa.c: New tests. * gcc.dg/pragma-isr-trapa2.c: Likewise. * gcc.dg/pragma-isr-nosave_low_regs.c: Likewise. * gcc.dg/pragma-isr-trap_exit.c: Likewise. * gcc.dg/attr-isr.c, gcc.dg/attr-isr-trapa.c: Likewise. * gcc.dg/attr-isr-trap_exit.c: Likewise. * gcc.dg/attr-isr-nosave_low_regs.c: Likewise. Added: branches/gcc-4_1-branch/gcc/config/sh/sh-c.c - copied unchanged from r110398, trunk/gcc/config/sh/sh-c.c branches/gcc-4_1-branch/gcc/testsuite/gcc.dg/attr-isr-nosave_low_regs.c - copied unchanged from r110398, trunk/gcc/testsuite/gcc.dg/attr-isr-nosave_low_regs.c branches/gcc-4_1-branch/gcc/testsuite/gcc.dg/attr-isr-trap_exit.c - copied unchanged from r110398, trunk/gcc/testsuite/gcc.dg/attr-isr-trap_exit.c branches/gcc-4_1-branch/gcc/testsuite/gcc.dg/attr-isr-trapa.c - copied unchanged from r110398, trunk/gcc/testsuite/gcc.dg/attr-isr-trapa.c branches/gcc-4_1-branch/gcc/testsuite/gcc.dg/attr-isr.c - copied unchanged from r110398, trunk/gcc/testsuite/gcc.dg/attr-isr.c branches/gcc-4_1-branch/gcc/testsuite/gcc.dg/pragma-isr-nosave_low_regs.c - copied unchanged from r110398, trunk/gcc/testsuite/gcc.dg/pragma-isr-nosave_low_regs.c branches/gcc-4_1-branch/gcc/testsuite/gcc.dg/pragma-isr-trap_exit.c - copied unchanged from r110398, trunk/gcc/testsuite/gcc.dg/pragma-isr-trap_exit.c branches/gcc-4_1-branch/gcc/testsuite/gcc.dg/pragma-isr-trapa.c - copied unchanged from r110398, trunk/gcc/testsuite/gcc.dg/pragma-isr-trapa.c branches/gcc-4_1-branch/gcc/testsuite/gcc.dg/pragma-isr-trapa2.c - copied unchanged from r110398, trunk/gcc/testsuite/gcc.dg/pragma-isr-trapa2.c branches/gcc-4_1-branch/gcc/testsuite/gcc.dg/pragma-isr2.c - copied unchanged from r110398, trunk/gcc/testsuite/gcc.dg/pragma-isr2.c Modified: branches/gcc-4_1-branch/gcc/ChangeLog branches/gcc-4_1-branch/gcc/config.gcc branches/gcc-4_1-branch/gcc/config/sh/sh-protos.h branches/gcc-4_1-branch/gcc/config/sh/sh.c branches/gcc-4_1-branch/gcc/config/sh/sh.h branches/gcc-4_1-branch/gcc/config/sh/sh.md branches/gcc-4_1-branch/gcc/config/sh/t-sh branches/gcc-4_1-branch/gcc/testsuite/ChangeLog branches/gcc-4_1-branch/gcc/testsuite/gcc.dg/pragma-isr.c -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14798
[Bug target/14798] [3.4/4.0/4.1/4.2 Regression] In case of SH target with -O2 option #pragma interrupt doesn't get resetted.
--- Comment #21 from amylaar at gcc dot gnu dot org 2006-01-30 15:07 --- Subject: Bug 14798 Author: amylaar Date: Mon Jan 30 15:07:43 2006 New Revision: 110398 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=110398 Log: PR target/14798: gcc: * sh.c (pragma_interrupt, trap_exit, sp_switch): Remove variable. (pragma_trap, pragma_nosave_low_regs): Likewise. (current_function_anonymous_args): Likewise. (sh_deferred_function_attributes): New variable. (sh_deferred_function_attributes_tail): Likewise. (print_operand): For '@', look up trap_exit attribute. (calc_live_regs): Look up trapa_handler attribute. For trapa handlers, save/restore fpscr, but don't do any other interrupt-specific saves. Don't save r0..r7 if the nosave_low_regs attribute is in effect. Fix check for partially saved registers to check for SHmedia. (sh_expand_prologue, sh_expand_epilogue): Look up sp_switch attribute. (sh_output_function_epilogue): Don't clear any of the removed variables. (sh_insert_attributes): Don't check pragma_interrupt. Insert deferred attributes. Check that interrupt attribute is present for other attributes that require its presence. (sh_attribute_table): Add new attributes trapa_handler and nosave_low_regs. (sh_handle_sp_switch_attribute, sh_handle_trap_exit_attribute): Don't check for pragma_interrupt. Don't store argument. * sh.h (pragma_interrupt, sp_switch): Don't declare. (sh_deferred_function_attributes): Declare. (sh_deferred_function_attributes_tail): Likewise. * sh.md (sp_switch_1): Add operand. Change generator caller. (sh_pr_interrupt, sh_pr_trapa, sh_pr_nosave_low_regs): Remove. (*return_i): Don't use when trap_exit attribute is in effect. (*return_trapa): New insn pattern. * sh-c.c: New file. * config.gcc (sh[123456ble]*-* | sh-*-*): New trailer stanza, setting c_target_objs and cxx_target_objs. * t-sh: Add rule for sh-c.o. gcc/testsuite: * gcc.dg/pragma-isr.c: Added target sh[1234ble]*-*-*. * gcc.dg/pragma-isr2.c, gcc.dg/pragma-isr-trapa.c: New tests. * gcc.dg/pragma-isr-trapa2.c: Likewise. * gcc.dg/pragma-isr-nosave_low_regs.c: Likewise. * gcc.dg/pragma-isr-trap_exit.c: Likewise. * gcc.dg/attr-isr.c, gcc.dg/attr-isr-trapa.c: Likewise. * gcc.dg/attr-isr-trap_exit.c: Likewise. * gcc.dg/attr-isr-nosave_low_regs.c: Likewise. Added: trunk/gcc/config/sh/sh-c.c trunk/gcc/testsuite/gcc.dg/attr-isr-nosave_low_regs.c trunk/gcc/testsuite/gcc.dg/attr-isr-trap_exit.c trunk/gcc/testsuite/gcc.dg/attr-isr-trapa.c trunk/gcc/testsuite/gcc.dg/attr-isr.c trunk/gcc/testsuite/gcc.dg/pragma-isr-nosave_low_regs.c trunk/gcc/testsuite/gcc.dg/pragma-isr-trap_exit.c trunk/gcc/testsuite/gcc.dg/pragma-isr-trapa.c trunk/gcc/testsuite/gcc.dg/pragma-isr-trapa2.c trunk/gcc/testsuite/gcc.dg/pragma-isr2.c Modified: trunk/gcc/ChangeLog trunk/gcc/config.gcc trunk/gcc/config/sh/sh.c trunk/gcc/config/sh/sh.h trunk/gcc/config/sh/sh.md trunk/gcc/config/sh/t-sh trunk/gcc/testsuite/ChangeLog trunk/gcc/testsuite/gcc.dg/pragma-isr.c -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14798
[Bug target/14798] [3.4/4.0/4.1/4.2 Regression] In case of SH target with -O2 option #pragma interrupt doesn't get resetted.
--- Comment #20 from amylaar at gcc dot gnu dot org 2006-01-26 15:22 --- http://gcc.gnu.org/ml/gcc-patches/2006-01/msg01782.html was regression tested successfully for sh-elf in Revision 110178. However, it makes sense to write or collect a number of new test cases to test the affected pragmas and attributes. -- amylaar at gcc dot gnu dot org changed: What|Removed |Added AssignedTo|unassigned at gcc dot gnu |amylaar at gcc dot gnu dot |dot org |org URL||http://gcc.gnu.org/ml/gcc- ||patches/2006- ||01/msg01782.html Status|NEW |ASSIGNED Last reconfirmed|2005-06-04 16:55:35 |2006-01-26 15:22:23 date|| http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14798
[Bug target/14798] [3.4/4.0/4.1/4.2 Regression] In case of SH target with -O2 option #pragma interrupt doesn't get resetted.
--- Comment #19 from amylaar at gcc dot gnu dot org 2006-01-25 17:27 --- There is even more wrong with the way we translate function pro-epilogue affecting pragmas to attributes. When we used only pragmas, the pragma could placed not only in front of the function, but also anywhere within the function, and it would affect the prologue/epilogue generation of that function. In order to restore this behaviour, the pragma hooks should check cfun, and apply the pragma to the current function if cfun is set. -- amylaar at gcc dot gnu dot org changed: What|Removed |Added CC|joern dot rennecke at superh|joern dot rennecke at st dot |dot com |com http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14798
[Bug target/14798] [3.4/4.0/4.1/4.2 Regression] In case of SH target with -O2 option #pragma interrupt doesn't get resetted.
--- Comment #18 from kazu at gcc dot gnu dot org 2005-12-17 02:27 --- Anil, would you care to post your patch on gcc-patches? In general, people don't review patches in PRs. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14798