OSDN Git Service

* config/alpha/alpha.c (some_small_symbolic_operand,
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 18 Feb 2002 01:07:52 +0000 (01:07 +0000)
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 18 Feb 2002 01:07:52 +0000 (01:07 +0000)
        some_small_symbolic_operand_1, split_small_symbolic_operand,
        split_small_symbolic_operand_1): Rename from *symbolic_mem_op*.
        Handle small SYMBOL_REFs anywhere, not just inside memories.
        * config/alpha/alpha-protos.h: Update.
        * config/alpha/alpha.h (PREDICATE_CODES): Update.
        * config/alpha/alpha.md (small symbolic operand splitter): Update.

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

gcc/ChangeLog
gcc/config/alpha/alpha-protos.h
gcc/config/alpha/alpha.c
gcc/config/alpha/alpha.h
gcc/config/alpha/alpha.md

index dfaf6bc..e1b054c 100644 (file)
@@ -1,3 +1,13 @@
+2002-02-17  Richard Henderson  <rth@redhat.com>
+
+       * config/alpha/alpha.c (some_small_symbolic_operand,
+       some_small_symbolic_operand_1, split_small_symbolic_operand,
+       split_small_symbolic_operand_1): Rename from *symbolic_mem_op*.
+       Handle small SYMBOL_REFs anywhere, not just inside memories.
+       * config/alpha/alpha-protos.h: Update.
+       * config/alpha/alpha.h (PREDICATE_CODES): Update.
+       * config/alpha/alpha.md (small symbolic operand splitter): Update.
+
 2002-02-17  Roland McGrath  <roland@frob.com>
 
        * config.gcc (powerpc-*-gnu-gnualtivec*,
index 957e5d9..c6fdd04 100644 (file)
@@ -59,7 +59,7 @@ extern int current_file_function_operand PARAMS ((rtx, enum machine_mode));
 extern int direct_call_operand PARAMS ((rtx, enum machine_mode));
 extern int local_symbolic_operand PARAMS ((rtx, enum machine_mode));
 extern int small_symbolic_operand PARAMS ((rtx, enum machine_mode));
-extern int some_small_symbolic_mem_operand PARAMS ((rtx, enum machine_mode));
+extern int some_small_symbolic_operand PARAMS ((rtx, enum machine_mode));
 extern int global_symbolic_operand PARAMS ((rtx, enum machine_mode));
 extern int call_operand PARAMS ((rtx, enum machine_mode));
 extern int symbolic_operand PARAMS ((rtx, enum machine_mode));
@@ -90,7 +90,7 @@ extern rtx alpha_legitimize_address PARAMS ((rtx, rtx, enum machine_mode));
 extern rtx alpha_legitimize_reload_address PARAMS ((rtx, enum machine_mode,
                                                    int, int, int));
 
-extern rtx split_small_symbolic_mem_operand PARAMS ((rtx));
+extern rtx split_small_symbolic_operand PARAMS ((rtx));
 
 extern void get_aligned_mem PARAMS ((rtx, rtx *, rtx *));
 extern rtx get_unaligned_address PARAMS ((rtx, int));
index 3fb7cf8..0f4bd14 100644 (file)
@@ -117,9 +117,9 @@ int alpha_this_gpdisp_sequence_number;
 /* Declarations of static functions.  */
 static bool decl_in_text_section
   PARAMS ((tree));
-static int some_small_symbolic_mem_operand_1
+static int some_small_symbolic_operand_1
   PARAMS ((rtx *, void *));
-static int split_small_symbolic_mem_operand_1
+static int split_small_symbolic_operand_1
   PARAMS ((rtx *, void *));
 static bool local_symbol_p
   PARAMS ((rtx));
@@ -1875,61 +1875,55 @@ alpha_legitimize_address (x, scratch, mode)
    so that sched2 has the proper dependency information.  */
 
 int
-some_small_symbolic_mem_operand (x, mode)
+some_small_symbolic_operand (x, mode)
      rtx x;
      enum machine_mode mode ATTRIBUTE_UNUSED;
 {
-  return for_each_rtx (&x, some_small_symbolic_mem_operand_1, NULL);
+  return for_each_rtx (&x, some_small_symbolic_operand_1, NULL);
 }
 
 static int
-some_small_symbolic_mem_operand_1 (px, data)
+some_small_symbolic_operand_1 (px, data)
      rtx *px;
      void *data ATTRIBUTE_UNUSED;
 {
   rtx x = *px;
 
-  if (GET_CODE (x) != MEM)
-    return 0;
-  x = XEXP (x, 0);
-
-  /* If this is an ldq_u type address, discard the outer AND.  */
-  if (GET_CODE (x) == AND)
-    x = XEXP (x, 0);
+  /* Don't re-split.  */
+  if (GET_CODE (x) == LO_SUM)
+    return -1;
 
-  return small_symbolic_operand (x, Pmode) ? 1 : -1;
+  return small_symbolic_operand (x, Pmode) != 0;
 }
 
 rtx
-split_small_symbolic_mem_operand (x)
+split_small_symbolic_operand (x)
      rtx x;
 {
   x = copy_insn (x);
-  for_each_rtx (&x, split_small_symbolic_mem_operand_1, NULL);
+  for_each_rtx (&x, split_small_symbolic_operand_1, NULL);
   return x;
 }
 
 static int
-split_small_symbolic_mem_operand_1 (px, data)
+split_small_symbolic_operand_1 (px, data)
      rtx *px;
      void *data ATTRIBUTE_UNUSED;
 {
   rtx x = *px;
 
-  if (GET_CODE (x) != MEM)
-    return 0;
-
-  px = &XEXP (x, 0), x = *px;
-  if (GET_CODE (x) == AND)
-    px = &XEXP (x, 0), x = *px;
+  /* Don't re-split.  */
+  if (GET_CODE (x) == LO_SUM)
+    return -1;
 
   if (small_symbolic_operand (x, Pmode))
     {
       x = gen_rtx_LO_SUM (Pmode, pic_offset_table_rtx, x);
       *px = x;
+      return -1;
     }
 
-  return -1;
+  return 0;
 }
 
 /* Try a machine-dependent way of reloading an illegitimate address
index 99ef24e..b2363bc 100644 (file)
@@ -2073,7 +2073,8 @@ do {                                              \
   {"reg_no_subreg_operand", {REG}},                                    \
   {"addition_operation", {PLUS}},                                      \
   {"symbolic_operand", {SYMBOL_REF, LABEL_REF, CONST}},                        \
-  {"some_small_symbolic_mem_operand", {SET, PARALLEL}},
+  {"some_small_symbolic_operand", {SET, PARALLEL, PREFETCH, UNSPEC,    \
+                                  UNSPEC_VOLATILE}},
 \f
 /* Define the `__builtin_va_list' type for the ABI.  */
 #define BUILD_VA_LIST_TYPE(VALIST) \
index 2ca8984..48ac0f7 100644 (file)
@@ -5523,10 +5523,10 @@ fadd,fmul,fcpys,fdiv,fsqrt,misc,mvi,ftoi,itof,multi"
   "operands[2] = pic_offset_table_rtx;")
 
 (define_split
-  [(match_operand 0 "some_small_symbolic_mem_operand" "")]
+  [(match_operand 0 "some_small_symbolic_operand" "")]
   "TARGET_EXPLICIT_RELOCS && reload_completed"
   [(match_dup 0)]
-  "operands[0] = split_small_symbolic_mem_operand (operands[0]);")
+  "operands[0] = split_small_symbolic_operand (operands[0]);")
 
 (define_insn "movdi_er_high_g"
   [(set (match_operand:DI 0 "register_operand" "=r")