]> gcc.gnu.org Git - gcc.git/commitdiff
alias.c (init_alias_analysis): Handle -fno-alias-check when optimizing correctly.
authorJeffrey A Law <law@cygnus.com>
Sun, 2 Nov 1997 06:28:31 +0000 (06:28 +0000)
committerJeff Law <law@gcc.gnu.org>
Sun, 2 Nov 1997 06:28:31 +0000 (23:28 -0700)
        * alias.c (init_alias_analysis): Handle -fno-alias-check when
        optimizing correctly.

From-SVN: r16268

gcc/ChangeLog
gcc/alias.c

index 1ebcf4792909b064a18b5060a9e6267ba40a64c0..265182fb6dd33b151bf26b51f5f6a9283af56987 100644 (file)
@@ -9,6 +9,9 @@ Sat Nov  1 21:43:00 1997  Mike Stump  (mrs@wrs.com)
 
 Sat Nov  1 19:15:28 1997  Jeffrey A Law  (law@cygnus.com)
 
+       * alias.c (init_alias_analysis): Handle -fno-alias-check when
+       optimizing correctly.
+
        * expr.c (expand_builtin_setjmp): Don't emit a SETJMP note
        or set current_function_calls_setjmp anymore.
 
index 73e2668880d94a4c92d344cce1cd130700f684c3..855abaeec20460b5e93afabecf32bc5b4bb7192e 100644 (file)
@@ -1002,12 +1002,6 @@ init_alias_analysis ()
       /* Assume nothing will change this iteration of the loop.  */
       changed = 0;
 
-      /* Wipe the potential alias information clean for this pass.  */
-      bzero ((char *) new_reg_base_value, reg_base_value_size * sizeof (rtx));
-
-      /* Wipe the reg_seen array clean.  */
-      bzero ((char *) reg_seen, reg_base_value_size);
-
       /* We want to assign the same IDs each iteration of this loop, so
         start counting from zero each iteration of the loop.  */
       unique_id = 0;
@@ -1016,43 +1010,56 @@ init_alias_analysis ()
         loop, so we're copying arguments.  */
       copying_arguments = 1;
 
-      /* Mark all hard registers which may contain an address.
-        The stack, frame and argument pointers may contain an address.
-        An argument register which can hold a Pmode value may contain
-        an address even if it is not in BASE_REGS.
+      /* Only perform initialization of the arrays if we're actually
+        performing alias analysis. */
+      if (flag_alias_check)
+       {
+         /* Wipe the potential alias information clean for this pass.  */
+         bzero ((char *) new_reg_base_value,
+                reg_base_value_size * sizeof (rtx));
+
+         /* Wipe the reg_seen array clean.  */
+         bzero ((char *) reg_seen, reg_base_value_size);
 
-        The address expression is VOIDmode for an argument and
-        Pmode for other registers.  */
+         /* Mark all hard registers which may contain an address.
+            The stack, frame and argument pointers may contain an address.
+            An argument register which can hold a Pmode value may contain
+            an address even if it is not in BASE_REGS.
+
+            The address expression is VOIDmode for an argument and
+            Pmode for other registers.  */
 #ifndef OUTGOING_REGNO
 #define OUTGOING_REGNO(N) N
 #endif
-      for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
-       /* Check whether this register can hold an incoming pointer
-          argument.  FUNCTION_ARG_REGNO_P tests outgoing register
-          numbers, so translate if necessary due to register windows. */
-       if (FUNCTION_ARG_REGNO_P (OUTGOING_REGNO (i)) && HARD_REGNO_MODE_OK (i, Pmode))
-         new_reg_base_value[i] = gen_rtx (ADDRESS, VOIDmode,
-                                          gen_rtx (REG, Pmode, i));
-
-      new_reg_base_value[STACK_POINTER_REGNUM]
-       = gen_rtx (ADDRESS, Pmode, stack_pointer_rtx);
-      new_reg_base_value[ARG_POINTER_REGNUM]
-       = gen_rtx (ADDRESS, Pmode, arg_pointer_rtx);
-      new_reg_base_value[FRAME_POINTER_REGNUM]
-       = gen_rtx (ADDRESS, Pmode, frame_pointer_rtx);
+         for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
+           /* Check whether this register can hold an incoming pointer
+              argument.  FUNCTION_ARG_REGNO_P tests outgoing register
+              numbers, so translate if necessary due to register windows. */
+           if (FUNCTION_ARG_REGNO_P (OUTGOING_REGNO (i))
+               && HARD_REGNO_MODE_OK (i, Pmode))
+             new_reg_base_value[i] = gen_rtx (ADDRESS, VOIDmode,
+                                              gen_rtx (REG, Pmode, i));
+
+         new_reg_base_value[STACK_POINTER_REGNUM]
+           = gen_rtx (ADDRESS, Pmode, stack_pointer_rtx);
+         new_reg_base_value[ARG_POINTER_REGNUM]
+           = gen_rtx (ADDRESS, Pmode, arg_pointer_rtx);
+         new_reg_base_value[FRAME_POINTER_REGNUM]
+           = gen_rtx (ADDRESS, Pmode, frame_pointer_rtx);
 #if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM
-      new_reg_base_value[HARD_FRAME_POINTER_REGNUM]
-       = gen_rtx (ADDRESS, Pmode, hard_frame_pointer_rtx);
+         new_reg_base_value[HARD_FRAME_POINTER_REGNUM]
+           = gen_rtx (ADDRESS, Pmode, hard_frame_pointer_rtx);
 #endif
-      if (struct_value_incoming_rtx
-         && GET_CODE (struct_value_incoming_rtx) == REG)
-      new_reg_base_value[REGNO (struct_value_incoming_rtx)]
-       = gen_rtx (ADDRESS, Pmode, struct_value_incoming_rtx);
-
-      if (static_chain_rtx
-         && GET_CODE (static_chain_rtx) == REG)
-      new_reg_base_value[REGNO (static_chain_rtx)]
-       = gen_rtx (ADDRESS, Pmode, static_chain_rtx);
+         if (struct_value_incoming_rtx
+             && GET_CODE (struct_value_incoming_rtx) == REG)
+           new_reg_base_value[REGNO (struct_value_incoming_rtx)]
+             = gen_rtx (ADDRESS, Pmode, struct_value_incoming_rtx);
+
+         if (static_chain_rtx
+             && GET_CODE (static_chain_rtx) == REG)
+           new_reg_base_value[REGNO (static_chain_rtx)]
+             = gen_rtx (ADDRESS, Pmode, static_chain_rtx);
+       }
 
       /* Walk the insns adding values to the new_reg_base_value array.  */
       for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
@@ -1089,16 +1096,17 @@ init_alias_analysis ()
        }
 
       /* Now propagate values from new_reg_base_value to reg_base_value.  */
-      for (i = 0; i < reg_base_value_size; i++)
-       {
-         if (new_reg_base_value[i]
-             && new_reg_base_value[i] != reg_base_value[i]
-             && !rtx_equal_p (new_reg_base_value[i], reg_base_value[i]))
-           {
-             reg_base_value[i] = new_reg_base_value[i];
-             changed = 1;
-           }
-       }
+      if (flag_alias_check)
+       for (i = 0; i < reg_base_value_size; i++)
+         {
+           if (new_reg_base_value[i]
+               && new_reg_base_value[i] != reg_base_value[i]
+               && !rtx_equal_p (new_reg_base_value[i], reg_base_value[i]))
+             {
+               reg_base_value[i] = new_reg_base_value[i];
+               changed = 1;
+             }
+         }
     }
 
   /* Fill in the remaining entries.  */
This page took 0.063429 seconds and 5 git commands to generate.