arm.c (legitimize_pic_address): Handle LABEL_REFs in substantially the same way as...
authorRichard Earnshaw <rearnsha@arm.com>
Thu, 13 Dec 2001 13:58:47 +0000 (13:58 +0000)
committerRichard Earnshaw <rearnsha@gcc.gnu.org>
Thu, 13 Dec 2001 13:58:47 +0000 (13:58 +0000)
* arm.c (legitimize_pic_address): Handle LABEL_REFs in substantially
the same way as we handle SYMBOL_REFS.

From-SVN: r47973

gcc/ChangeLog
gcc/config/arm/arm.c

index 67931eb4bf6ddce7f0b829f946b7f22e520f04c1..3861aadd7f3cc77c31cb62fe0b34c5067a1b7672 100644 (file)
@@ -1,3 +1,8 @@
+2001-12-13  Richard Earnshaw  <rearnsha@arm.com>
+
+       * arm.c (legitimize_pic_address): Handle LABEL_REFs in substantially
+       the same way as we handle SYMBOL_REFS.
+
 Thu Dec 13 07:47:24 2001  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
 
        * loop.c (remove_constant_addition): Fix prototype and whitespace.
index 98b9230a8e6452dbe7272692789db6283d209934..7ede66663148d492a5b7e07556567047ce2026bc 100644 (file)
@@ -2254,7 +2254,8 @@ legitimize_pic_address (orig, mode, reg)
      enum machine_mode mode;
      rtx reg;
 {
-  if (GET_CODE (orig) == SYMBOL_REF)
+  if (GET_CODE (orig) == SYMBOL_REF
+      || GET_CODE (orig) == LABEL_REF)
     {
 #ifndef AOF_ASSEMBLER
       rtx pic_ref, address;
@@ -2287,10 +2288,16 @@ legitimize_pic_address (orig, mode, reg)
       else
        emit_insn (gen_pic_load_addr_thumb (address, orig));
 
-      pic_ref = gen_rtx_MEM (Pmode,
-                            gen_rtx_PLUS (Pmode, pic_offset_table_rtx,
-                                          address));
-      RTX_UNCHANGING_P (pic_ref) = 1;
+      if (GET_CODE (orig) == LABEL_REF && NEED_GOT_RELOC)
+       pic_ref = gen_rtx_PLUS (Pmode, pic_offset_table_rtx, address);
+      else
+       {
+         pic_ref = gen_rtx_MEM (Pmode,
+                                gen_rtx_PLUS (Pmode, pic_offset_table_rtx,
+                                              address));
+         RTX_UNCHANGING_P (pic_ref) = 1;
+       }
+
       insn = emit_move_insn (reg, pic_ref);
 #endif
       current_function_uses_pic_offset_table = 1;
@@ -2351,25 +2358,6 @@ legitimize_pic_address (orig, mode, reg)
 
       return gen_rtx_PLUS (Pmode, base, offset);
     }
-  else if (GET_CODE (orig) == LABEL_REF)
-    {
-      current_function_uses_pic_offset_table = 1;
-      
-      if (NEED_GOT_RELOC)
-       {
-         rtx pic_ref, address = gen_reg_rtx (Pmode);
-
-         if (TARGET_ARM)
-           emit_insn (gen_pic_load_addr_arm (address, orig));
-         else
-           emit_insn (gen_pic_load_addr_thumb (address, orig));
-
-         pic_ref = gen_rtx_PLUS (Pmode, pic_offset_table_rtx, address);
-         
-         emit_move_insn (address, pic_ref);
-         return address;
-       }
-    }
 
   return orig;
 }