OSDN Git Service

* config/sparc/sparc.c (struct_value_alias_set): New global variable.
authorebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 13 Mar 2005 22:11:46 +0000 (22:11 +0000)
committerebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 13 Mar 2005 22:11:46 +0000 (22:11 +0000)
(sparc_override_options): Initialize it.
(sparc_struct_value_rtx): Set it on the MEM to be returned.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@96395 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/sparc/sparc.c

index c5989d3..2a4a78e 100644 (file)
@@ -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.
index 43aa2f1..1d791cc 100644 (file)
@@ -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;
     }
 }