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