]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR target/20611 (duplicate label for inlined function referencing TLS)
authorAlan Modra <amodra@bigpond.net.au>
Thu, 31 Mar 2005 11:45:47 +0000 (11:45 +0000)
committerAlan Modra <amodra@gcc.gnu.org>
Thu, 31 Mar 2005 11:45:47 +0000 (21:15 +0930)
PR target/20611
* config/rs6000/rs6000.md (load_toc_v4_PIC_1b): Remove inline
label operand.  Remove (use (unspec..)).  Don't emit a label on
the offset word.
* config/rs6000/rs6000.c (rs6000_legitimize_tls_address): Don't
generate inline label for load_toc_v4_PIC_1b.
(rs6000_emit_load_toc_table): Likewise.

From-SVN: r97316

gcc/ChangeLog
gcc/config/rs6000/rs6000.c
gcc/config/rs6000/rs6000.md

index 132529d12b77e73e043de5d563c7b8136459831f..4d795d52d6f640eacb32f221a57457c0f2c4879b 100644 (file)
@@ -1,3 +1,13 @@
+2005-03-31  Alan Modra  <amodra@bigpond.net.au>
+
+       PR target/20611
+       * config/rs6000/rs6000.md (load_toc_v4_PIC_1b): Remove inline
+       label operand.  Remove (use (unspec..)).  Don't emit a label on
+       the offset word.
+       * config/rs6000/rs6000.c (rs6000_legitimize_tls_address): Don't
+       generate inline label for load_toc_v4_PIC_1b.
+       (rs6000_emit_load_toc_table): Likewise.
+
 2005-03-31  Alan Modra  <amodra@bigpond.net.au>
 
        * config.gcc (cpu_is_64bit): Set for 64-bit powerpc cpus.
index f23de4c3f76153a07fe5b7756b683e57ceca7365..c25aa9efff109cc4180999ec2f356e8fadcbd00d 100644 (file)
@@ -3001,13 +3001,9 @@ rs6000_legitimize_tls_address (rtx addr, enum tls_model model)
                rs6000_emit_move (got, gsym, Pmode);
              else
                {
-                 char buf[30];
-                 static int tls_got_labelno = 0;
-                 rtx tempLR, lab, tmp3, mem;
+                 rtx tempLR, tmp3, mem;
                  rtx first, last;
 
-                 ASM_GENERATE_INTERNAL_LABEL (buf, "LTLS", tls_got_labelno++);
-                 lab = gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (buf));
                  tempLR = gen_reg_rtx (Pmode);
                  tmp1 = gen_reg_rtx (Pmode);
                  tmp2 = gen_reg_rtx (Pmode);
@@ -3015,8 +3011,7 @@ rs6000_legitimize_tls_address (rtx addr, enum tls_model model)
                  mem = gen_rtx_MEM (Pmode, tmp1);
                  RTX_UNCHANGING_P (mem) = 1;
 
-                 first = emit_insn (gen_load_toc_v4_PIC_1b (tempLR, lab,
-                                                            gsym));
+                 first = emit_insn (gen_load_toc_v4_PIC_1b (tempLR, gsym));
                  emit_move_insn (tmp1, tempLR);
                  emit_move_insn (tmp2, mem);
                  emit_insn (gen_addsi3 (tmp3, tmp1, tmp2));
@@ -11467,7 +11462,6 @@ rs6000_emit_load_toc_table (int fromprolog)
       rtx temp0 = (fromprolog
                   ? gen_rtx_REG (Pmode, 0)
                   : gen_reg_rtx (Pmode));
-      rtx symF;
 
       /* possibly create the toc section */
       if (! toc_initialized)
@@ -11478,7 +11472,7 @@ rs6000_emit_load_toc_table (int fromprolog)
 
       if (fromprolog)
        {
-         rtx symL;
+         rtx symF, symL;
 
          ASM_GENERATE_INTERNAL_LABEL (buf, "LCF", rs6000_pic_labelno);
          symF = gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (buf));
@@ -11496,14 +11490,9 @@ rs6000_emit_load_toc_table (int fromprolog)
       else
        {
          rtx tocsym;
-         static int reload_toc_labelno = 0;
 
          tocsym = gen_rtx_SYMBOL_REF (Pmode, toc_label_name);
-
-         ASM_GENERATE_INTERNAL_LABEL (buf, "LCG", reload_toc_labelno++);
-         symF = gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (buf));
-
-         emit_insn (gen_load_toc_v4_PIC_1b (tempLR, symF, tocsym));
+         emit_insn (gen_load_toc_v4_PIC_1b (tempLR, tocsym));
          emit_move_insn (dest, tempLR);
          emit_move_insn (temp0, gen_rtx_MEM (Pmode, dest));
        }
index f4fd3df53f82996bdd6a8f7cc4b35fb8627a1079..3b062ce7cde5651abba5d8602c9a4507d728c851 100644 (file)
 
 (define_insn "load_toc_v4_PIC_1b"
   [(set (match_operand:SI 0 "register_operand" "=l")
-       (match_operand:SI 1 "immediate_operand" "s"))
-   (use (unspec [(match_dup 1) (match_operand 2 "immediate_operand" "s")]
+       (unspec:SI [(match_operand:SI 1 "immediate_operand" "s")]
                UNSPEC_TOCPTR))]
   "TARGET_ELF && DEFAULT_ABI != ABI_AIX && flag_pic == 2"
-  "bcl 20,31,%1+4\\n%1:\\n\\t.long %2-%1"
+  "bcl 20,31,$+8\\n\\t.long %1-$"
   [(set_attr "type" "branch")
    (set_attr "length" "8")])