aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAndreas Schwab <schwab@suse.de>2024-09-12 13:55:09 +0200
committerAndreas Schwab <schwab@suse.de>2024-09-16 11:23:11 +0200
commit952df9c50b30cc6f849c422b84592a81524f8ef7 (patch)
tree00ba41bdd2485eeffba9cc2dd0f94d9931806e60 /gcc
parenteb67e2396f3ee834bf3a8299f5b6d93ba82d3950 (diff)
downloadgcc-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.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/config/riscv/riscv.cc4
-rw-r--r--gcc/config/riscv/riscv.md15
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")