xref: /llvm-project/llvm/test/CodeGen/VE/Scalar/tls.ll (revision b006b60dc993b2e0ba3e412c80709477241b6be6)
11943b7f1SSimon Moll; FIXME: even under non-pic mode, llvm needs to generate pic code since nld
21943b7f1SSimon Moll;        doesn't work with non-pic code.  Thefore, we test pic codes for
31943b7f1SSimon Moll;        both cases here.
41943b7f1SSimon Moll;      llc -mtriple ve < %s | FileCheck %s -check-prefix=LOCAL
51943b7f1SSimon Moll; RUN: llc -mtriple ve < %s | FileCheck %s -check-prefix=GENDYN
61943b7f1SSimon Moll; RUN: llc -mtriple ve -relocation-model=pic < %s | FileCheck %s -check-prefix=GENDYNPIC
71943b7f1SSimon Moll
81943b7f1SSimon Moll@x = external thread_local global i32, align 4
91943b7f1SSimon Moll@y = internal thread_local global i32 0, align 4
101943b7f1SSimon Moll
111943b7f1SSimon Moll; Function Attrs: norecurse nounwind readnone
12*b006b60dSNikita Popovdefine nonnull ptr @get_global() {
131943b7f1SSimon Moll; GENDYN-LABEL: get_global:
141943b7f1SSimon Moll; GENDYN:       .LBB{{[0-9]+}}_2:
151943b7f1SSimon Moll; GENDYN-NEXT:    lea %s0, x@tls_gd_lo(-24)
161943b7f1SSimon Moll; GENDYN-NEXT:    and %s0, %s0, (32)0
171943b7f1SSimon Moll; GENDYN-NEXT:    sic %s10
181943b7f1SSimon Moll; GENDYN-NEXT:    lea.sl %s0, x@tls_gd_hi(%s10, %s0)
191943b7f1SSimon Moll; GENDYN-NEXT:    lea %s12, __tls_get_addr@plt_lo(8)
201943b7f1SSimon Moll; GENDYN-NEXT:    and %s12, %s12, (32)0
211943b7f1SSimon Moll; GENDYN-NEXT:    lea.sl %s12, __tls_get_addr@plt_hi(%s10, %s12)
221943b7f1SSimon Moll; GENDYN-NEXT:    bsic %s10, (, %s12)
231943b7f1SSimon Moll; GENDYN-NEXT:    or %s11, 0, %s9
241943b7f1SSimon Moll;
251943b7f1SSimon Moll; GENDYNPIC-LABEL: get_global:
261943b7f1SSimon Moll; GENDYNPIC:       .LBB{{[0-9]+}}_2:
271943b7f1SSimon Moll; GENDYNPIC-NEXT:    lea %s15, _GLOBAL_OFFSET_TABLE_@pc_lo(-24)
281943b7f1SSimon Moll; GENDYNPIC-NEXT:    and %s15, %s15, (32)0
291943b7f1SSimon Moll; GENDYNPIC-NEXT:    sic %s16
301943b7f1SSimon Moll; GENDYNPIC-NEXT:    lea.sl %s15, _GLOBAL_OFFSET_TABLE_@pc_hi(%s16, %s15)
311943b7f1SSimon Moll; GENDYNPIC-NEXT:    lea %s0, x@tls_gd_lo(-24)
321943b7f1SSimon Moll; GENDYNPIC-NEXT:    and %s0, %s0, (32)0
331943b7f1SSimon Moll; GENDYNPIC-NEXT:    sic %s10
341943b7f1SSimon Moll; GENDYNPIC-NEXT:    lea.sl %s0, x@tls_gd_hi(%s10, %s0)
351943b7f1SSimon Moll; GENDYNPIC-NEXT:    lea %s12, __tls_get_addr@plt_lo(8)
361943b7f1SSimon Moll; GENDYNPIC-NEXT:    and %s12, %s12, (32)0
371943b7f1SSimon Moll; GENDYNPIC-NEXT:    lea.sl %s12, __tls_get_addr@plt_hi(%s10, %s12)
381943b7f1SSimon Moll; GENDYNPIC-NEXT:    bsic %s10, (, %s12)
391943b7f1SSimon Moll; GENDYNPIC-NEXT:    or %s11, 0, %s9
4044a4f939SKazushi (Jam) Marukawa;
411943b7f1SSimon Moll; LOCAL-LABEL: get_global:
421943b7f1SSimon Moll; LOCAL:       .LBB{{[0-9]+}}_2:
431943b7f1SSimon Moll; LOCAL-NEXT:  lea %s34, x@tpoff_lo
441943b7f1SSimon Moll; LOCAL-NEXT:  and %s34, %s34, (32)0
451943b7f1SSimon Moll; LOCAL-NEXT:  lea.sl %s34, x@tpoff_hi(%s34)
461943b7f1SSimon Moll; LOCAL-NEXT:  adds.l %s0, %s14, %s34
471943b7f1SSimon Moll; LOCAL-NEXT:  or %s11, 0, %s9
481943b7f1SSimon Mollentry:
49*b006b60dSNikita Popov  ret ptr @x
501943b7f1SSimon Moll}
511943b7f1SSimon Moll
521943b7f1SSimon Moll; Function Attrs: norecurse nounwind readnone
53*b006b60dSNikita Popovdefine nonnull ptr @get_local() {
541943b7f1SSimon Moll; GENDYN-LABEL: get_local:
551943b7f1SSimon Moll; GENDYN:       .LBB{{[0-9]+}}_2:
561943b7f1SSimon Moll; GENDYN-NEXT:    lea %s0, y@tls_gd_lo(-24)
571943b7f1SSimon Moll; GENDYN-NEXT:    and %s0, %s0, (32)0
581943b7f1SSimon Moll; GENDYN-NEXT:    sic %s10
591943b7f1SSimon Moll; GENDYN-NEXT:    lea.sl %s0, y@tls_gd_hi(%s10, %s0)
601943b7f1SSimon Moll; GENDYN-NEXT:    lea %s12, __tls_get_addr@plt_lo(8)
611943b7f1SSimon Moll; GENDYN-NEXT:    and %s12, %s12, (32)0
621943b7f1SSimon Moll; GENDYN-NEXT:    lea.sl %s12, __tls_get_addr@plt_hi(%s10, %s12)
631943b7f1SSimon Moll; GENDYN-NEXT:    bsic %s10, (, %s12)
641943b7f1SSimon Moll; GENDYN-NEXT:    or %s11, 0, %s9
651943b7f1SSimon Moll;
661943b7f1SSimon Moll; GENDYNPIC-LABEL: get_local:
671943b7f1SSimon Moll; GENDYNPIC:       .LBB{{[0-9]+}}_2:
681943b7f1SSimon Moll; GENDYNPIC-NEXT:    lea %s15, _GLOBAL_OFFSET_TABLE_@pc_lo(-24)
691943b7f1SSimon Moll; GENDYNPIC-NEXT:    and %s15, %s15, (32)0
701943b7f1SSimon Moll; GENDYNPIC-NEXT:    sic %s16
711943b7f1SSimon Moll; GENDYNPIC-NEXT:    lea.sl %s15, _GLOBAL_OFFSET_TABLE_@pc_hi(%s16, %s15)
721943b7f1SSimon Moll; GENDYNPIC-NEXT:    lea %s0, y@tls_gd_lo(-24)
731943b7f1SSimon Moll; GENDYNPIC-NEXT:    and %s0, %s0, (32)0
741943b7f1SSimon Moll; GENDYNPIC-NEXT:    sic %s10
751943b7f1SSimon Moll; GENDYNPIC-NEXT:    lea.sl %s0, y@tls_gd_hi(%s10, %s0)
761943b7f1SSimon Moll; GENDYNPIC-NEXT:    lea %s12, __tls_get_addr@plt_lo(8)
771943b7f1SSimon Moll; GENDYNPIC-NEXT:    and %s12, %s12, (32)0
781943b7f1SSimon Moll; GENDYNPIC-NEXT:    lea.sl %s12, __tls_get_addr@plt_hi(%s10, %s12)
791943b7f1SSimon Moll; GENDYNPIC-NEXT:    bsic %s10, (, %s12)
801943b7f1SSimon Moll; GENDYNPIC-NEXT:    or %s11, 0, %s9
8144a4f939SKazushi (Jam) Marukawa;
821943b7f1SSimon Moll; LOCAL-LABEL: get_local:
831943b7f1SSimon Moll; LOCAL:       .LBB{{[0-9]+}}_2:
841943b7f1SSimon Moll; LOCAL-NEXT:  lea %s34, y@tpoff_lo
851943b7f1SSimon Moll; LOCAL-NEXT:  and %s34, %s34, (32)0
861943b7f1SSimon Moll; LOCAL-NEXT:  lea.sl %s34, y@tpoff_hi(%s34)
871943b7f1SSimon Moll; LOCAL-NEXT:  adds.l %s0, %s14, %s34
881943b7f1SSimon Moll; LOCAL-NEXT:  or %s11, 0, %s9
891943b7f1SSimon Mollentry:
90*b006b60dSNikita Popov  ret ptr @y
911943b7f1SSimon Moll}
921943b7f1SSimon Moll
931943b7f1SSimon Moll; Function Attrs: norecurse nounwind
941943b7f1SSimon Molldefine void @set_global(i32 %v) {
951943b7f1SSimon Moll; GENDYN-LABEL: set_global:
961943b7f1SSimon Moll; GENDYN:       .LBB{{[0-9]+}}_2:
9744a4f939SKazushi (Jam) Marukawa; GENDYN-NEXT:    st %s18, 288(, %s11) # 8-byte Folded Spill
981943b7f1SSimon Moll; GENDYN-NEXT:    or %s18, 0, %s0
991943b7f1SSimon Moll; GENDYN-NEXT:    lea %s0, x@tls_gd_lo(-24)
1001943b7f1SSimon Moll; GENDYN-NEXT:    and %s0, %s0, (32)0
1011943b7f1SSimon Moll; GENDYN-NEXT:    sic %s10
1021943b7f1SSimon Moll; GENDYN-NEXT:    lea.sl %s0, x@tls_gd_hi(%s10, %s0)
1031943b7f1SSimon Moll; GENDYN-NEXT:    lea %s12, __tls_get_addr@plt_lo(8)
1041943b7f1SSimon Moll; GENDYN-NEXT:    and %s12, %s12, (32)0
1051943b7f1SSimon Moll; GENDYN-NEXT:    lea.sl %s12, __tls_get_addr@plt_hi(%s10, %s12)
1061943b7f1SSimon Moll; GENDYN-NEXT:    bsic %s10, (, %s12)
1071943b7f1SSimon Moll; GENDYN-NEXT:    stl %s18, (, %s0)
10844a4f939SKazushi (Jam) Marukawa; GENDYN-NEXT:    ld %s18, 288(, %s11) # 8-byte Folded Reload
1091943b7f1SSimon Moll; GENDYN-NEXT:    or %s11, 0, %s9
1101943b7f1SSimon Moll;
1111943b7f1SSimon Moll; GENDYNPIC-LABEL: set_global:
1121943b7f1SSimon Moll; GENDYNPIC:       .LBB{{[0-9]+}}_2:
11344a4f939SKazushi (Jam) Marukawa; GENDYNPIC-NEXT:    st %s18, 288(, %s11) # 8-byte Folded Spill
1141943b7f1SSimon Moll; GENDYNPIC-NEXT:    or %s18, 0, %s0
1151943b7f1SSimon Moll; GENDYNPIC-NEXT:    lea %s15, _GLOBAL_OFFSET_TABLE_@pc_lo(-24)
1161943b7f1SSimon Moll; GENDYNPIC-NEXT:    and %s15, %s15, (32)0
1171943b7f1SSimon Moll; GENDYNPIC-NEXT:    sic %s16
1181943b7f1SSimon Moll; GENDYNPIC-NEXT:    lea.sl %s15, _GLOBAL_OFFSET_TABLE_@pc_hi(%s16, %s15)
1191943b7f1SSimon Moll; GENDYNPIC-NEXT:    lea %s0, x@tls_gd_lo(-24)
1201943b7f1SSimon Moll; GENDYNPIC-NEXT:    and %s0, %s0, (32)0
1211943b7f1SSimon Moll; GENDYNPIC-NEXT:    sic %s10
1221943b7f1SSimon Moll; GENDYNPIC-NEXT:    lea.sl %s0, x@tls_gd_hi(%s10, %s0)
1231943b7f1SSimon Moll; GENDYNPIC-NEXT:    lea %s12, __tls_get_addr@plt_lo(8)
1241943b7f1SSimon Moll; GENDYNPIC-NEXT:    and %s12, %s12, (32)0
1251943b7f1SSimon Moll; GENDYNPIC-NEXT:    lea.sl %s12, __tls_get_addr@plt_hi(%s10, %s12)
1261943b7f1SSimon Moll; GENDYNPIC-NEXT:    bsic %s10, (, %s12)
1271943b7f1SSimon Moll; GENDYNPIC-NEXT:    stl %s18, (, %s0)
12844a4f939SKazushi (Jam) Marukawa; GENDYNPIC-NEXT:    ld %s18, 288(, %s11) # 8-byte Folded Reload
1291943b7f1SSimon Moll; GENDYNPIC-NEXT:    or %s11, 0, %s9
13044a4f939SKazushi (Jam) Marukawa;
1311943b7f1SSimon Moll; LOCAL-LABEL: set_global:
1321943b7f1SSimon Moll; LOCAL:       .LBB{{[0-9]+}}_2:
1331943b7f1SSimon Moll; LOCAL-NEXT:  lea %s34, x@tpoff_lo
1341943b7f1SSimon Moll; LOCAL-NEXT:  and %s34, %s34, (32)0
1351943b7f1SSimon Moll; LOCAL-NEXT:  lea.sl %s34, x@tpoff_hi(%s34)
1361943b7f1SSimon Moll; LOCAL-NEXT:  adds.l %s34, %s14, %s34
1371943b7f1SSimon Moll; LOCAL-NEXT:  stl %s0, (, %s34)
1381943b7f1SSimon Moll; LOCAL-NEXT:  or %s11, 0, %s9
1391943b7f1SSimon Mollentry:
140*b006b60dSNikita Popov  store i32 %v, ptr @x, align 4
1411943b7f1SSimon Moll  ret void
1421943b7f1SSimon Moll}
1431943b7f1SSimon Moll
1441943b7f1SSimon Moll; Function Attrs: norecurse nounwind
1451943b7f1SSimon Molldefine void @set_local(i32 %v) {
1461943b7f1SSimon Moll; GENDYN-LABEL: set_local:
1471943b7f1SSimon Moll; GENDYN:       .LBB{{[0-9]+}}_2:
14844a4f939SKazushi (Jam) Marukawa; GENDYN-NEXT:    st %s18, 288(, %s11) # 8-byte Folded Spill
1491943b7f1SSimon Moll; GENDYN-NEXT:    or %s18, 0, %s0
1501943b7f1SSimon Moll; GENDYN-NEXT:    lea %s0, y@tls_gd_lo(-24)
1511943b7f1SSimon Moll; GENDYN-NEXT:    and %s0, %s0, (32)0
1521943b7f1SSimon Moll; GENDYN-NEXT:    sic %s10
1531943b7f1SSimon Moll; GENDYN-NEXT:    lea.sl %s0, y@tls_gd_hi(%s10, %s0)
1541943b7f1SSimon Moll; GENDYN-NEXT:    lea %s12, __tls_get_addr@plt_lo(8)
1551943b7f1SSimon Moll; GENDYN-NEXT:    and %s12, %s12, (32)0
1561943b7f1SSimon Moll; GENDYN-NEXT:    lea.sl %s12, __tls_get_addr@plt_hi(%s10, %s12)
1571943b7f1SSimon Moll; GENDYN-NEXT:    bsic %s10, (, %s12)
1581943b7f1SSimon Moll; GENDYN-NEXT:    stl %s18, (, %s0)
15944a4f939SKazushi (Jam) Marukawa; GENDYN-NEXT:    ld %s18, 288(, %s11) # 8-byte Folded Reload
1601943b7f1SSimon Moll; GENDYN-NEXT:    or %s11, 0, %s9
1611943b7f1SSimon Moll;
1621943b7f1SSimon Moll; GENDYNPIC-LABEL: set_local:
1631943b7f1SSimon Moll; GENDYNPIC:       .LBB{{[0-9]+}}_2:
16444a4f939SKazushi (Jam) Marukawa; GENDYNPIC-NEXT:    st %s18, 288(, %s11) # 8-byte Folded Spill
1651943b7f1SSimon Moll; GENDYNPIC-NEXT:    or %s18, 0, %s0
1661943b7f1SSimon Moll; GENDYNPIC-NEXT:    lea %s15, _GLOBAL_OFFSET_TABLE_@pc_lo(-24)
1671943b7f1SSimon Moll; GENDYNPIC-NEXT:    and %s15, %s15, (32)0
1681943b7f1SSimon Moll; GENDYNPIC-NEXT:    sic %s16
1691943b7f1SSimon Moll; GENDYNPIC-NEXT:    lea.sl %s15, _GLOBAL_OFFSET_TABLE_@pc_hi(%s16, %s15)
1701943b7f1SSimon Moll; GENDYNPIC-NEXT:    lea %s0, y@tls_gd_lo(-24)
1711943b7f1SSimon Moll; GENDYNPIC-NEXT:    and %s0, %s0, (32)0
1721943b7f1SSimon Moll; GENDYNPIC-NEXT:    sic %s10
1731943b7f1SSimon Moll; GENDYNPIC-NEXT:    lea.sl %s0, y@tls_gd_hi(%s10, %s0)
1741943b7f1SSimon Moll; GENDYNPIC-NEXT:    lea %s12, __tls_get_addr@plt_lo(8)
1751943b7f1SSimon Moll; GENDYNPIC-NEXT:    and %s12, %s12, (32)0
1761943b7f1SSimon Moll; GENDYNPIC-NEXT:    lea.sl %s12, __tls_get_addr@plt_hi(%s10, %s12)
1771943b7f1SSimon Moll; GENDYNPIC-NEXT:    bsic %s10, (, %s12)
1781943b7f1SSimon Moll; GENDYNPIC-NEXT:    stl %s18, (, %s0)
17944a4f939SKazushi (Jam) Marukawa; GENDYNPIC-NEXT:    ld %s18, 288(, %s11) # 8-byte Folded Reload
1801943b7f1SSimon Moll; GENDYNPIC-NEXT:    or %s11, 0, %s9
18144a4f939SKazushi (Jam) Marukawa;
1821943b7f1SSimon Moll; LOCAL-LABEL: set_local:
1831943b7f1SSimon Moll; LOCAL:       .LBB{{[0-9]+}}_2:
1841943b7f1SSimon Moll; LOCAL-NEXT:  lea %s34, y@tpoff_lo
1851943b7f1SSimon Moll; LOCAL-NEXT:  and %s34, %s34, (32)0
1861943b7f1SSimon Moll; LOCAL-NEXT:  lea.sl %s34, y@tpoff_hi(%s34)
1871943b7f1SSimon Moll; LOCAL-NEXT:  adds.l %s34, %s14, %s34
1881943b7f1SSimon Moll; LOCAL-NEXT:  stl %s0, (, %s34)
1891943b7f1SSimon Moll; LOCAL-NEXT:  or %s11, 0, %s9
1901943b7f1SSimon Mollentry:
191*b006b60dSNikita Popov  store i32 %v, ptr @y, align 4
1921943b7f1SSimon Moll  ret void
1931943b7f1SSimon Moll}
194