Skip to content

Commit 4f2dca4

Browse files
committed
Add test loongarch-relax-tls-ie.s
1 parent 78a16b0 commit 4f2dca4

File tree

1 file changed

+70
-0
lines changed

1 file changed

+70
-0
lines changed

lld/test/ELF/loongarch-relax-tls-ie.s

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
# REQUIRES: loongarch
2+
## Test LA64 IE -> LE in various cases.
3+
4+
# RUN: llvm-mc --filetype=obj --triple=loongarch64 -mattr=+relax %s -o %t.o
5+
6+
## FIXME: IE relaxation has not yet been implemented.
7+
## --relax/--no-relax has the same result. Also check --emit-relocs.
8+
# RUN: ld.lld --emit-relocs %t.o -o %t
9+
# RUN: llvm-readelf -x .got %t 2>&1 | FileCheck --check-prefix=LE-GOT %s
10+
# RUN: llvm-objdump -dr --no-show-raw-insn %t | FileCheck --check-prefixes=LE %s
11+
12+
# RUN: ld.lld --emit-relocs --no-relax %t.o -o %t.norelax
13+
# RUN: llvm-readelf -x .got %t.norelax 2>&1 | FileCheck --check-prefix=LE-GOT %s
14+
# RUN: llvm-objdump -dr --no-show-raw-insn %t.norelax | FileCheck --check-prefixes=LE %s
15+
16+
# LE-GOT: could not find section '.got'
17+
18+
# a@tprel = st_value(a) = 0xfff
19+
# b@tprel = st_value(a) = 0x1000
20+
# LE: 20158: nop
21+
# LE-NEXT: R_LARCH_TLS_IE_PC_HI20 a
22+
# LE-NEXT: R_LARCH_RELAX *ABS*
23+
# LE-NEXT: ori $a0, $zero, 4095
24+
# LE-NEXT: R_LARCH_TLS_IE_PC_LO12 a
25+
# LE-NEXT: R_LARCH_RELAX *ABS*
26+
# LE-NEXT: add.d $a0, $a0, $tp
27+
# LE-NEXT: 20164: lu12i.w $a1, 1
28+
# LE-NEXT: R_LARCH_TLS_IE_PC_HI20 b
29+
# LE-NEXT: ori $a1, $a1, 0
30+
# LE-NEXT: R_LARCH_TLS_IE_PC_LO12 b
31+
# LE-NEXT: add.d $a1, $a1, $tp
32+
# LE-NEXT: 20170: nop
33+
# LE-NEXT: R_LARCH_TLS_IE_PC_HI20 a
34+
# LE-NEXT: R_LARCH_RELAX *ABS*
35+
# LE-NEXT: lu12i.w $a3, 1
36+
# LE-NEXT: R_LARCH_TLS_IE_PC_HI20 b
37+
# LE-NEXT: R_LARCH_RELAX *ABS*
38+
# LE-NEXT: ori $a2, $zero, 4095
39+
# LE-NEXT: R_LARCH_TLS_IE_PC_LO12 a
40+
# LE-NEXT: ori $a3, $a3, 0
41+
# LE-NEXT: R_LARCH_TLS_IE_PC_LO12 b
42+
# LE-NEXT: add.d $a2, $a2, $tp
43+
# LE-NEXT: add.d $a3, $a3, $tp
44+
45+
la.tls.ie $a0, a # relax
46+
add.d $a0, $a0, $tp
47+
48+
# PCALAU12I does not have R_LARCH_RELAX. No relaxation.
49+
pcalau12i $a1, %ie_pc_hi20(b)
50+
ld.d $a1, $a1, %ie_pc_lo12(b)
51+
add.d $a1, $a1, $tp
52+
53+
# Test instructions are interleaved.
54+
# PCALAU12I has an R_LARCH_RELAX. We preform relaxation.
55+
pcalau12i $a2, %ie_pc_hi20(a)
56+
.reloc .-4, R_LARCH_RELAX, 0
57+
pcalau12i $a3, %ie_pc_hi20(b)
58+
.reloc .-4, R_LARCH_RELAX, 0
59+
ld.d $a2, $a2, %ie_pc_lo12(a)
60+
ld.d $a3, $a3, %ie_pc_lo12(b)
61+
add.d $a2, $a2, $tp
62+
add.d $a3, $a3, $tp
63+
64+
.section .tbss,"awT",@nobits
65+
.globl a
66+
.zero 0xfff ## Place a at 0xfff, LE needs only one ins.
67+
a:
68+
.zero 1 ## Place b at 0x1000, LE needs two ins.
69+
b:
70+
.zero 4

0 commit comments

Comments
 (0)