| ; RUN: llc -verify-machineinstrs -relocation-model=pic < %s | FileCheck %s | |
| target triple = "powerpc-unknown-linux-gnu" | |
| ; Test that LR is preserved when PPC32PICGOT clobbers it with a local "bl". | |
| @TLS = external thread_local global i8 | |
| ; CHECK-LABEL: tls_addr: | |
| ; CHECK: mflr [[SAVED_REG:[0-9]+]] | |
| ; CHECK: bl [[JUMP:\.L[[:alnum:]_]+]] | |
| ; CHECK-NEXT: [[OFFSET:\.L[[:alnum:]_]+]]: | |
| ; CHECK-NEXT: .long _GLOBAL_OFFSET_TABLE_-[[OFFSET]] | |
| ; CHECK-NEXT: [[JUMP]] | |
| ; CHECK-NEXT: mflr {{[0-9]+}} | |
| ; CHECK: mtlr [[SAVED_REG]] | |
| ; CHECK-NEXT: blr | |
| define ptr @tls_addr() unnamed_addr { | |
| %1 = call ptr @llvm.threadlocal.address.p0(ptr @TLS) | |
| ret ptr %1 | |
| } | |
| declare nonnull ptr @llvm.threadlocal.address.p0(ptr nonnull) | |
| !llvm.module.flags = !{!0, !1} | |
| !0 = !{i32 8, !"PIC Level", i32 2} | |
| !1 = !{i32 7, !"PIE Level", i32 2} |