aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2002-03-26 14:07:47 -0800
committerRichard Henderson <rth@gcc.gnu.org>2002-03-26 14:07:47 -0800
commit1eefb6c14905428bd54415913c5622efcd748be8 (patch)
tree032ac1bc17430675ab85fd07cc2073e88a0b65e3
parentdcce8b1d54785af4f28c3cb4f49897eeb7ff6c45 (diff)
downloadgcc-1eefb6c14905428bd54415913c5622efcd748be8.zip
gcc-1eefb6c14905428bd54415913c5622efcd748be8.tar.gz
gcc-1eefb6c14905428bd54415913c5622efcd748be8.tar.bz2
toplev.c (rest_of_compilation): Delay emit_initial_value_sets until after eh landing pad generation.
* 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. From-SVN: r51411
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/config/alpha/alpha.c5
-rw-r--r--gcc/config/alpha/alpha.md9
-rw-r--r--gcc/toplev.c5
4 files changed, 18 insertions, 8 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 67bc524..583f54a 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 6033479..708d035 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 fdbdf08..baaecdd 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 7268b5a..ed946ef 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.