| ; RUN: llc -mtriple=xtensa -function-sections --mcpu=esp32 --filetype=obj < %s \ | |
| ; RUN: | llvm-objdump -r -s --triple=xtensa --mcpu=esp32 - | FileCheck -check-prefix=XTENSA-CHECK-OBJ %s | |
| ; RUN: llc -mtriple=xtensa -function-sections --mcpu=esp32 --filetype=asm < %s | FileCheck -check-prefix=XTENSA-CHECK-ASM %s | |
| ; XTENSA-CHECK-OBJ-LABEL: RELOCATION RECORDS FOR [.literal.get_tls]: | |
| ; XTENSA-CHECK-OBJ: OFFSET TYPE VALUE | |
| ; XTENSA-CHECK-OBJ-NEXT: 00000000 R_XTENSA_TLS_TPOFF tls_var | |
| ; XTENSA-CHECK-ASM-LABEL: .literal_position | |
| ; XTENSA-CHECK-ASM: .literal .LCPI0_0, tls_var@TPOFF | |
| ; XTENSA-CHECK-ASM-LABEL: get_tls: | |
| ; XTENSA-CHECK-ASM: .cfi_startproc | |
| ; XTENSA-CHECK-ASM-NEXT: # %bb.0: | |
| ; XTENSA-CHECK-ASM-NEXT: entry a1, 32 | |
| ; XTENSA-CHECK-ASM-NEXT: .cfi_def_cfa_offset 32 | |
| ; XTENSA-CHECK-ASM-NEXT: l32r a8, .LCPI0_0 | |
| ; XTENSA-CHECK-ASM-NEXT: rur a9, threadptr | |
| ; XTENSA-CHECK-ASM-NEXT: add a8, a9, a8 | |
| ; XTENSA-CHECK-ASM-NEXT: l32i a2, a8, 0 | |
| ; XTENSA-CHECK-ASM-NEXT: retw.n | |
| @tls_var = dso_local thread_local local_unnamed_addr global i32 42, align 4 | |
| define dso_local i32 @get_tls() { | |
| entry: | |
| %v = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @tls_var) | |
| %res = load i32, ptr %v, align 4 | |
| ret i32 %res | |
| } |