mep.md (eh_epilogue): Defer until after epilogue is emitted.

* config/mep/mep.md (eh_epilogue): Defer until after epilogue is
emitted.

* config/mep/mep.h (LEGITIMATE_CONSTANT_P): New.
* config/mep/mep.c (mep_legitimate_constant_p): New.
* config/mep/mep-protos.h: Prototype it.

From-SVN: r151625
This commit is contained in:
DJ Delorie 2009-09-10 21:06:36 -04:00 committed by DJ Delorie
parent 24f7037972
commit 5ba863d70d
5 changed files with 27 additions and 2 deletions

View file

@ -1,3 +1,12 @@
2009-09-10 DJ Delorie <dj@redhat.com>
* config/mep/mep.md (eh_epilogue): Defer until after epilogue is
emitted.
* config/mep/mep.h (LEGITIMATE_CONSTANT_P): New.
* config/mep/mep.c (mep_legitimate_constant_p): New.
* config/mep/mep-protos.h: Prototype it.
2009-09-10 Richard Henderson <rth@redhat.com>
* print-rtl.c (print_rtx): Fix JUMP_LABEL index.

View file

@ -48,6 +48,7 @@ extern void mep_split_wide_move (rtx *, enum machine_mode);
#ifdef RTX_CODE
extern bool mep_expand_setcc (rtx *);
extern rtx mep_expand_cbranch (rtx *);
extern bool mep_legitimate_constant_p (rtx);
#endif
extern const char *mep_emit_cbranch (rtx *, int);
extern void mep_expand_call (rtx *, int);

View file

@ -1211,6 +1211,20 @@ mep_multi_slot (rtx x)
}
bool
mep_legitimate_constant_p (rtx x)
{
/* We can't convert symbol values to gp- or tp-rel values after
reload, as reload might have used $gp or $tp for other
purposes. */
if (GET_CODE (x) == SYMBOL_REF && (reload_in_progress || reload_completed))
{
char e = mep_section_tag (x);
return (e != 't' && e != 'b');
}
return 1;
}
/* Be careful not to use macros that need to be compiled one way for
strict, and another way for not-strict, like REG_OK_FOR_BASE_P. */

View file

@ -599,7 +599,8 @@ typedef struct
#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR, LABEL)
#define LEGITIMATE_CONSTANT_P(X) 1
#define LEGITIMATE_CONSTANT_P(X) \
mep_legitimate_constant_p(X)
#define SELECT_CC_MODE(OP, X, Y) CCmode

View file

@ -2192,7 +2192,7 @@
(use (reg:SI LP_REGNO))]
""
"#"
"reload_completed"
"epilogue_completed"
[(const_int 1)]
"mep_emit_eh_epilogue (operands); DONE;"
[(set_attr "slot" "multi")])