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
This commit is contained in:
Uros Bizjak 2009-08-21 08:01:23 +02:00 committed by Uros Bizjak
parent 685dca122f
commit 7450a081db
2 changed files with 17 additions and 2 deletions

View File

@ -1,3 +1,10 @@
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>
Diego Novillo <dnovillo@google.com>

View File

@ -6855,11 +6855,18 @@
"br $27,$LSJ%=\n$LSJ%=:"
[(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"
[(unspec_volatile [(match_dup 0)] UNSPECV_EHR)]
"TARGET_ABI_OSF"
{
if (TARGET_LD_BUGGY_LDGP)
if (TARGET_LD_BUGGY_LDGP || flag_reorder_blocks_and_partition)
operands[0] = alpha_gp_save_rtx ();
else
operands[0] = const0_rtx;
@ -6867,7 +6874,8 @@
(define_insn "*exception_receiver_2"
[(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"
[(set_attr "type" "ild")])