diff options
author | Andreas Schwab <schwab@suse.de> | 2024-09-12 13:55:09 +0200 |
---|---|---|
committer | Andreas Schwab <schwab@suse.de> | 2024-09-16 11:23:11 +0200 |
commit | 952df9c50b30cc6f849c422b84592a81524f8ef7 (patch) | |
tree | 00ba41bdd2485eeffba9cc2dd0f94d9931806e60 | |
parent | eb67e2396f3ee834bf3a8299f5b6d93ba82d3950 (diff) | |
download | gcc-952df9c50b30cc6f849c422b84592a81524f8ef7.zip gcc-952df9c50b30cc6f849c422b84592a81524f8ef7.tar.gz gcc-952df9c50b30cc6f849c422b84592a81524f8ef7.tar.bz2 |
riscv: Fix duplicate assmbler label in @tlsdesc<mode> insn
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.
-rw-r--r-- | gcc/config/riscv/riscv.cc | 4 | ||||
-rw-r--r-- | gcc/config/riscv/riscv.md | 15 |
2 files changed, 8 insertions, 11 deletions
diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc index 6efe14f..fbf2da7 100644 --- a/gcc/config/riscv/riscv.cc +++ b/gcc/config/riscv/riscv.cc @@ -2779,14 +2779,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 { diff --git a/gcc/config/riscv/riscv.md b/gcc/config/riscv/riscv.md index 9f94b5a..fd1cbeb 100644 --- a/gcc/config/riscv/riscv.md +++ b/gcc/config/riscv/riscv.md @@ -2327,17 +2327,16 @@ (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") |