Message ID | 4D63C3D4.1080000@gjlay.de |
---|---|
State | New |
Headers | show |
Georg-Johann Lay schrieb: > 2011-02-11 Georg-Johann Lay <avr@gjlay.de> > > PR target/42240 > * config/avr/avr.c (avr_cannot_modify_jumps_p): New function. > (TARGET_CANNOT_MODIFY_JUMPS_P): Define. There is a typo in the changelog's date stamp. It should read 2011-02-22 Georg-Johann Lay <avr@gjlay.de> PR target/42240 * config/avr/avr.c (avr_cannot_modify_jumps_p): New function. (TARGET_CANNOT_MODIFY_JUMPS_P): Define. Johann
Georg-Johann Lay schrieb: http://gcc.gnu.org/ml/gcc-patches/2011-02/msg01441.html > The patch implements target hook TARGET_CANNOT_MODIFY_JUMPS_P in order > to inhibit post-reload bb reorder for naked functions. > > It's basically the same patch as proposed in bug data base and works > for the test case attached there. > > The patch works just as well for gcc-4.5.2. Should I provide a > seperate patch against 4.5.2 (tags/gcc_4_5_2_release) or is this patch > (against trunk) sufficient? > > Johann > > -- > > 2011-02-11 Georg-Johann Lay <avr@gjlay.de> > > PR target/42240 > * config/avr/avr.c (avr_cannot_modify_jumps_p): New function. > (TARGET_CANNOT_MODIFY_JUMPS_P): Define. > > > ------------------------------------------------------------------------ > > Index: config/avr/avr.c > =================================================================== > --- config/avr/avr.c (revision 170397) > +++ config/avr/avr.c (working copy) > @@ -73,6 +73,7 @@ static void avr_file_end (void); > static bool avr_legitimate_address_p (enum machine_mode, rtx, bool); > static void avr_asm_function_end_prologue (FILE *); > static void avr_asm_function_begin_epilogue (FILE *); > +static bool avr_cannot_modify_jumps_p (void); > static rtx avr_function_value (const_tree, const_tree, bool); > static void avr_insert_attributes (tree, tree *); > static void avr_asm_init_sections (void); > @@ -217,6 +218,9 @@ static const struct default_options avr_ > #undef TARGET_OPTION_OPTIMIZATION_TABLE > #define TARGET_OPTION_OPTIMIZATION_TABLE avr_option_optimization_table > > +#undef TARGET_CANNOT_MODIFY_JUMPS_P > +#define TARGET_CANNOT_MODIFY_JUMPS_P avr_cannot_modify_jumps_p > + > struct gcc_target targetm = TARGET_INITIALIZER; > > static void > @@ -980,6 +984,27 @@ avr_asm_function_begin_epilogue (FILE *f > fprintf (file, "/* epilogue start */\n"); > } > > + > +/* Implement TARGET_CANNOT_MODITY_JUMPS_P */ > + > +static bool > +avr_cannot_modify_jumps_p (void) > +{ > + > + /* Naked Functions must not have any instructions after > + their epilogue, see PR42240 */ > + > + if (reload_completed > + && cfun->machine > + && cfun->machine->is_naked) > + { > + return true; > + } > + > + return false; > +} > + > + > /* Return nonzero if X (an RTX) is a legitimate memory address on the target > machine for a memory operand of mode MODE. */ >
2011/2/26 Georg-Johann Lay <avr@gjlay.de>: > Georg-Johann Lay schrieb: > > http://gcc.gnu.org/ml/gcc-patches/2011-02/msg01441.html > >> The patch implements target hook TARGET_CANNOT_MODIFY_JUMPS_P in order >> to inhibit post-reload bb reorder for naked functions. >> >> It's basically the same patch as proposed in bug data base and works >> for the test case attached there. >> >> The patch works just as well for gcc-4.5.2. Should I provide a >> seperate patch against 4.5.2 (tags/gcc_4_5_2_release) or is this patch >> (against trunk) sufficient? >> >> Johann >> >> -- >> >> 2011-02-11 Georg-Johann Lay <avr@gjlay.de> >> >> PR target/42240 >> * config/avr/avr.c (avr_cannot_modify_jumps_p): New function. >> (TARGET_CANNOT_MODIFY_JUMPS_P): Define. >> Applied. Denis.
Index: config/avr/avr.c =================================================================== --- config/avr/avr.c (revision 170397) +++ config/avr/avr.c (working copy) @@ -73,6 +73,7 @@ static void avr_file_end (void); static bool avr_legitimate_address_p (enum machine_mode, rtx, bool); static void avr_asm_function_end_prologue (FILE *); static void avr_asm_function_begin_epilogue (FILE *); +static bool avr_cannot_modify_jumps_p (void); static rtx avr_function_value (const_tree, const_tree, bool); static void avr_insert_attributes (tree, tree *); static void avr_asm_init_sections (void); @@ -217,6 +218,9 @@ static const struct default_options avr_ #undef TARGET_OPTION_OPTIMIZATION_TABLE #define TARGET_OPTION_OPTIMIZATION_TABLE avr_option_optimization_table +#undef TARGET_CANNOT_MODIFY_JUMPS_P +#define TARGET_CANNOT_MODIFY_JUMPS_P avr_cannot_modify_jumps_p + struct gcc_target targetm = TARGET_INITIALIZER; static void @@ -980,6 +984,27 @@ avr_asm_function_begin_epilogue (FILE *f fprintf (file, "/* epilogue start */\n"); } + +/* Implement TARGET_CANNOT_MODITY_JUMPS_P */ + +static bool +avr_cannot_modify_jumps_p (void) +{ + + /* Naked Functions must not have any instructions after + their epilogue, see PR42240 */ + + if (reload_completed + && cfun->machine + && cfun->machine->is_naked) + { + return true; + } + + return false; +} + + /* Return nonzero if X (an RTX) is a legitimate memory address on the target machine for a memory operand of mode MODE. */