diff options
| author | rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2002-03-26 22:07:47 +0000 |
|---|---|---|
| committer | rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2002-03-26 22:07:47 +0000 |
| commit | 09a6a91be70cc2e5c9966d25c688db339ea870fd (patch) | |
| tree | 032ac1bc17430675ab85fd07cc2073e88a0b65e3 | |
| parent | e911437ff95af5cd56940bfd9739686b72b57d4a (diff) | |
| download | ppe42-gcc-09a6a91be70cc2e5c9966d25c688db339ea870fd.tar.gz ppe42-gcc-09a6a91be70cc2e5c9966d25c688db339ea870fd.zip | |
* toplev.c (rest_of_compilation): Delay emit_initial_value_sets
until after eh landing pad generation.
* config/alpha/alpha.c (alpha_gp_save_rtx): Use gen_mem_addressof.
* config/alpha/alpha.md (exception_receiver_2): Only accept MEMs.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@51411 138bc75d-0d04-0410-961f-82ee72b054a4
| -rw-r--r-- | gcc/ChangeLog | 7 | ||||
| -rw-r--r-- | gcc/config/alpha/alpha.c | 5 | ||||
| -rw-r--r-- | gcc/config/alpha/alpha.md | 9 | ||||
| -rw-r--r-- | gcc/toplev.c | 5 |
4 files changed, 18 insertions, 8 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 67bc5240cb5..583f54a2591 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,12 @@ 2002-03-26 Richard Henderson <rth@redhat.com> + * toplev.c (rest_of_compilation): Delay emit_initial_value_sets + until after eh landing pad generation. + * config/alpha/alpha.c (alpha_gp_save_rtx): Use gen_mem_addressof. + * config/alpha/alpha.md (exception_receiver_2): Only accept MEMs. + +2002-03-26 Richard Henderson <rth@redhat.com> + * expr.h (ADD_PARM_SIZE): One more convert for INC. 2002-03-26 Phil Edwards <pme@gcc.gnu.org> diff --git a/gcc/config/alpha/alpha.c b/gcc/config/alpha/alpha.c index 60334790bc4..708d0359eba 100644 --- a/gcc/config/alpha/alpha.c +++ b/gcc/config/alpha/alpha.c @@ -5011,7 +5011,10 @@ alpha_return_addr (count, frame) rtx alpha_gp_save_rtx () { - return get_hard_reg_initial_val (DImode, 29); + rtx r = get_hard_reg_initial_val (DImode, 29); + if (GET_CODE (r) != MEM) + r = gen_mem_addressof (r, NULL_TREE); + return r; } static int diff --git a/gcc/config/alpha/alpha.md b/gcc/config/alpha/alpha.md index fdbdf089b0c..baaecdd7c1f 100644 --- a/gcc/config/alpha/alpha.md +++ b/gcc/config/alpha/alpha.md @@ -6706,13 +6706,10 @@ fadd,fmul,fcpys,fdiv,fsqrt,misc,mvi,ftoi,itof,multi" (set_attr "type" "multi")]) (define_insn "*exception_receiver_2" - [(unspec_volatile [(match_operand:DI 0 "nonimmediate_operand" "r,m")] - UNSPECV_EHR)] + [(unspec_volatile [(match_operand:DI 0 "memory_operand" "m")] UNSPECV_EHR)] "TARGET_LD_BUGGY_LDGP" - "@ - bis $31,%0,$29 - ldq $29,%0" - [(set_attr "type" "ilog,ild")]) + "ldq $29,%0" + [(set_attr "type" "ild")]) (define_expand "nonlocal_goto_receiver" [(unspec_volatile [(const_int 0)] UNSPECV_BLOCKAGE) diff --git a/gcc/toplev.c b/gcc/toplev.c index 7268b5aa787..ed946ef32ef 100644 --- a/gcc/toplev.c +++ b/gcc/toplev.c @@ -2483,7 +2483,6 @@ rest_of_compilation (decl) carry magic hard reg data throughout the function. */ rtx_equal_function_value_matters = 0; purge_hard_subreg_sets (get_insns ()); - emit_initial_value_sets (); /* Early return if there were errors. We can run afoul of our consistency checks, and there's not really much point in fixing them. @@ -2518,6 +2517,10 @@ rest_of_compilation (decl) timevar_pop (TV_JUMP); } + /* Delay emitting hard_reg_initial_value sets until after EH landing pad + generation, which might create new sets. */ + emit_initial_value_sets (); + #ifdef FINALIZE_PIC /* If we are doing position-independent code generation, now is the time to output special prologues and epilogues. |

