]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
riscv: Fix duplicate assmbler label in @tlsdesc<mode> insn
authorAndreas Schwab <schwab@suse.de>
Thu, 12 Sep 2024 11:55:09 +0000 (13:55 +0200)
committerKito Cheng <kito.cheng@sifive.com>
Wed, 9 Apr 2025 14:03:10 +0000 (22:03 +0800)
Use %= instead of maintaining a sequence number manually, so that it
doesn't result in a duplicate assembler label when the insn is duplicated.

PR target/116693
* config/riscv/riscv.cc (riscv_legitimize_tls_address): Don't pass
seqno to gen_tlsdesc and remove it.
* config/riscv/riscv.md (@tlsdesc<mode>): Remove operand 1.  Use
%= instead of %1 in template.

gcc/config/riscv/riscv.cc
gcc/config/riscv/riscv.md

index a58c33a0aa2895fdee322f9a7acbfe0d883e28ec..3e3a29d30443edda7b7c008bb97720506952ec7a 100644 (file)
@@ -2250,14 +2250,12 @@ riscv_legitimize_tls_address (rtx loc)
     case TLS_MODEL_GLOBAL_DYNAMIC:
       if (TARGET_TLSDESC)
        {
-         static unsigned seqno;
          tp = gen_rtx_REG (Pmode, THREAD_POINTER_REGNUM);
          a0 = gen_rtx_REG (Pmode, GP_ARG_FIRST);
          dest = gen_reg_rtx (Pmode);
 
-         emit_insn (gen_tlsdesc (Pmode, loc, GEN_INT (seqno)));
+         emit_insn (gen_tlsdesc (Pmode, loc));
          emit_insn (gen_add3_insn (dest, a0, tp));
-         seqno++;
        }
       else
        {
index c4380a06693e591fabef48e1a4e4df3a9535a982..f65d54ceda497670eebd0362b0b868fdc54a7bc4 100644 (file)
 
 (define_insn "@tlsdesc<mode>"
   [(set (reg:P A0_REGNUM)
-           (unspec:P
-                       [(match_operand:P 0 "symbolic_operand" "")
-                        (match_operand:P 1 "const_int_operand")]
-                       UNSPEC_TLSDESC))
+       (unspec:P
+           [(match_operand:P 0 "symbolic_operand" "")]
+           UNSPEC_TLSDESC))
    (clobber (reg:P T0_REGNUM))]
   "TARGET_TLSDESC"
   {
-    return ".LT%1: auipc\ta0,%%tlsdesc_hi(%0)\;"
-           "<load>\tt0,%%tlsdesc_load_lo(.LT%1)(a0)\;"
-           "addi\ta0,a0,%%tlsdesc_add_lo(.LT%1)\;"
-           "jalr\tt0,t0,%%tlsdesc_call(.LT%1)";
+    return ".LT%=: auipc\ta0,%%tlsdesc_hi(%0)\;"
+           "<load>\tt0,%%tlsdesc_load_lo(.LT%=)(a0)\;"
+           "addi\ta0,a0,%%tlsdesc_add_lo(.LT%=)\;"
+           "jalr\tt0,t0,%%tlsdesc_call(.LT%=)";
   }
   [(set_attr "type" "multi")
    (set_attr "length" "16")