aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@libertysurf.fr>2005-03-13 23:11:46 +0100
committerEric Botcazou <ebotcazou@gcc.gnu.org>2005-03-13 22:11:46 +0000
commit1da4c3a71050c5dd82b1d72b84bfecb66f2d882b (patch)
treefcf2b0f81ffc50a649944251c5a2b3957c4c8e88 /gcc
parent053e7c38b330ffb596efb02e42e7e1c63519a39f (diff)
downloadgcc-1da4c3a71050c5dd82b1d72b84bfecb66f2d882b.zip
gcc-1da4c3a71050c5dd82b1d72b84bfecb66f2d882b.tar.gz
gcc-1da4c3a71050c5dd82b1d72b84bfecb66f2d882b.tar.bz2
sparc.c (struct_value_alias_set): New global variable.
* config/sparc/sparc.c (struct_value_alias_set): New global variable. (sparc_override_options): Initialize it. (sparc_struct_value_rtx): Set it on the MEM to be returned. From-SVN: r96395
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/sparc/sparc.c19
2 files changed, 20 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c5989d35b..2a4a78e 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2005-03-14 Eric Botcazou <ebotcazou@libertysurf.fr>
+
+ * config/sparc/sparc.c (struct_value_alias_set): New global variable.
+ (sparc_override_options): Initialize it.
+ (sparc_struct_value_rtx): Set it on the MEM to be returned.
+
2005-03-13 David Edelsohn <edelsohn@gnu.org>
* config/rs6000/predicates.md (mem_or_easy_const_operand): Delete.
diff --git a/gcc/config/sparc/sparc.c b/gcc/config/sparc/sparc.c
index 43aa2f1..1d791cc 100644
--- a/gcc/config/sparc/sparc.c
+++ b/gcc/config/sparc/sparc.c
@@ -227,6 +227,9 @@ static int num_gfregs;
/* The alias set for prologue/epilogue register save/restore. */
static GTY(()) int sparc_sr_alias_set;
+/* The alias set for the structure return value. */
+static GTY(()) int struct_value_alias_set;
+
/* Save the operands last given to a compare for use when we
generate a scc or bcc insn. */
rtx sparc_compare_op0, sparc_compare_op1;
@@ -700,8 +703,9 @@ sparc_override_options (void)
/* Do various machine dependent initializations. */
sparc_init_modes ();
- /* Acquire a unique set number for our register saves and restores. */
+ /* Acquire unique alias sets for our private stuff. */
sparc_sr_alias_set = new_alias_set ();
+ struct_value_alias_set = new_alias_set ();
/* Set up function hooks. */
init_machine_status = sparc_init_machine_status;
@@ -6086,12 +6090,17 @@ sparc_struct_value_rtx (tree fndecl ATTRIBUTE_UNUSED, int incoming)
return 0;
else
{
+ rtx mem;
+
if (incoming)
- return gen_rtx_MEM (Pmode, plus_constant (frame_pointer_rtx,
- STRUCT_VALUE_OFFSET));
+ mem = gen_rtx_MEM (Pmode, plus_constant (frame_pointer_rtx,
+ STRUCT_VALUE_OFFSET));
else
- return gen_rtx_MEM (Pmode, plus_constant (stack_pointer_rtx,
- STRUCT_VALUE_OFFSET));
+ mem = gen_rtx_MEM (Pmode, plus_constant (stack_pointer_rtx,
+ STRUCT_VALUE_OFFSET));
+
+ set_mem_alias_set (mem, struct_value_alias_set);
+ return mem;
}
}