Commit 7450a081 by Uros Bizjak Committed by Uros Bizjak

alpha.md (exception_receiver): Emit alternative GP load sequence if…

alpha.md (exception_receiver): Emit alternative GP load sequence if flag_reorder_blocks_and_partition is set.

	* config/alpha/alpha.md (exception_receiver): Emit alternative
	GP load sequence if flag_reorder_blocks_and_partition is set.
	(*exception_receiver_2): Also enable when
	flag_reorder_blocks_and_partition is set.

From-SVN: r150984
parent 685dca12
2009-08-21 Uros Bizjak <ubizjak@gmail.com>
* config/alpha/alpha.md (exception_receiver): Emit alternative
GP load sequence if flag_reorder_blocks_and_partition is set.
(*exception_receiver_2): Also enable when
flag_reorder_blocks_and_partition is set.
2009-08-20 Matt Rice <ratmice@gmail.com> 2009-08-20 Matt Rice <ratmice@gmail.com>
Diego Novillo <dnovillo@google.com> Diego Novillo <dnovillo@google.com>
......
...@@ -6855,11 +6855,18 @@ ...@@ -6855,11 +6855,18 @@
"br $27,$LSJ%=\n$LSJ%=:" "br $27,$LSJ%=\n$LSJ%=:"
[(set_attr "type" "ibr")]) [(set_attr "type" "ibr")])
;; When flag_reorder_blocks_and_partition is in effect, compiler puts
;; exception landing pads in a cold section. To prevent inter-section offset
;; calculation, a jump to original landing pad is emitted in the place of the
;; original landing pad. Since landing pad is moved, RA-relative GP
;; calculation in the prologue of landing pad breaks. To solve this problem,
;; we use alternative GP load approach, as in the case of TARGET_LD_BUGGY_LDGP.
(define_expand "exception_receiver" (define_expand "exception_receiver"
[(unspec_volatile [(match_dup 0)] UNSPECV_EHR)] [(unspec_volatile [(match_dup 0)] UNSPECV_EHR)]
"TARGET_ABI_OSF" "TARGET_ABI_OSF"
{ {
if (TARGET_LD_BUGGY_LDGP) if (TARGET_LD_BUGGY_LDGP || flag_reorder_blocks_and_partition)
operands[0] = alpha_gp_save_rtx (); operands[0] = alpha_gp_save_rtx ();
else else
operands[0] = const0_rtx; operands[0] = const0_rtx;
...@@ -6867,7 +6874,8 @@ ...@@ -6867,7 +6874,8 @@
(define_insn "*exception_receiver_2" (define_insn "*exception_receiver_2"
[(unspec_volatile [(match_operand:DI 0 "memory_operand" "m")] UNSPECV_EHR)] [(unspec_volatile [(match_operand:DI 0 "memory_operand" "m")] UNSPECV_EHR)]
"TARGET_ABI_OSF && TARGET_LD_BUGGY_LDGP" "TARGET_ABI_OSF
&& (TARGET_LD_BUGGY_LDGP || flag_reorder_blocks_and_partition)"
"ldq $29,%0" "ldq $29,%0"
[(set_attr "type" "ild")]) [(set_attr "type" "ild")])
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment