From 13d7e8af69af2247ab864b2ee1255d34bbc8cbec Mon Sep 17 00:00:00 2001 From: Jeff Law Date: Thu, 11 Sep 2008 11:17:57 -0600 Subject: [PATCH] reload1.c (alter_reg): Undo the BYTE_BIG_ENDIAN correction performed by assign_stack_local on the IRA... * reload1.c (alter_reg): Undo the BYTE_BIG_ENDIAN correction performed by assign_stack_local on the IRA path for stack slot sharing as well as the non-IRA path. From-SVN: r140295 --- gcc/ChangeLog | 6 ++++++ gcc/reload1.c | 12 +++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 73f34cdd91c..d55103b5b93 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2008-09-11 Jeff Law + + * reload1.c (alter_reg): Undo the BYTE_BIG_ENDIAN correction performed + by assign_stack_local on the IRA path for stack slot sharing + as well as the non-IRA path. + 2008-09-11 Uros Bizjak * config/i386/i386.h: Fix whitespace issues. diff --git a/gcc/reload1.c b/gcc/reload1.c index 1ea41091260..93457c162c0 100644 --- a/gcc/reload1.c +++ b/gcc/reload1.c @@ -2176,18 +2176,28 @@ alter_reg (int i, int from_reg, bool dont_share_p) inherent space, and no less total space, then the previous slot. */ else if (from_reg == -1 || (! dont_share_p && flag_ira && optimize)) { + rtx stack_slot; alias_set_type alias_set = new_alias_set (); /* No known place to spill from => no slot to reuse. */ x = assign_stack_local (mode, total_size, min_align > inherent_align || total_size > inherent_size ? -1 : 0); + + stack_slot = x; + if (BYTES_BIG_ENDIAN) /* Cancel the big-endian correction done in assign_stack_local. Get the address of the beginning of the slot. This is so we can do a big-endian correction unconditionally below. */ adjust = inherent_size - total_size; + if (adjust) + stack_slot + = adjust_address_nv (x, mode_for_size (total_size + * BITS_PER_UNIT, + MODE_INT, 1), + adjust); /* Nothing can alias this slot except this pseudo. */ set_mem_alias_set (x, alias_set); @@ -2195,7 +2205,7 @@ alter_reg (int i, int from_reg, bool dont_share_p) if (! dont_share_p && flag_ira && optimize) /* Inform IRA about allocation a new stack slot. */ - ira_mark_new_stack_slot (x, i, total_size); + ira_mark_new_stack_slot (stack_slot, i, total_size); } /* Reuse a stack slot if possible. */