# REQUIRES: ppc
# RUN: split-file %s %t
# RUN: llvm-mc -filetype=obj -triple=powerpc64le %t/initexec -o %t/initexec.o
# RUN: llvm-mc -filetype=obj -triple=powerpc64le %t/defs -o %t/defs.o
# RUN: ld.lld %t/initexec.o %t/defs.o -o %t/out
# RUN: llvm-objdump -d --no-show-raw-insn %t/out | FileCheck %s
# CHECK-LABEL: <GetAddrT>:
# CHECK: mflr 0
# CHECK-NEXT: std 30, -16(1)
# CHECK-NEXT: std 0, 16(1)
# CHECK-NEXT: stdu 1, -48(1)
# CHECK-NEXT: paddi 3, 13, -28672, 0
# CHECK-NEXT: mr 30, 3
# CHECK-NEXT: mr 3, 30
# CHECK-NEXT: bl
# CHECK-NEXT: mr 4, 30
# CHECK-NEXT: addi 1, 1, 48
# CHECK-NEXT: ld 0, 16(1)
# CHECK-NEXT: ld 30, -16(1)
# CHECK-NEXT: mtlr 0
# CHECK-NEXT: b
## Generated From:
## extern __thread unsigned TGlobal;
## unsigned getConst(unsigned*);
## unsigned addVal(unsigned, unsigned*);
##
## unsigned GetAddrT() {
## return addVal(getConst(&TGlobal), &TGlobal);
## }
//--- initexec
GetAddrT:
mflr 0
std 30, -16(1)
std 0, 16(1)
stdu 1, -48(1)
pld 3, TGlobal@got@tprel@pcrel(0), 1
add 30, 3, TGlobal@tls@pcrel
mr 3, 30
bl getConst@notoc
mr 4, 30
addi 1, 1, 48
ld 0, 16(1)
ld 30, -16(1)
mtlr 0
b addVal@notoc
## Generated From:
## __thread unsigned TGlobal;
##
## unsigned getConst(unsigned* A) {
## return *A + 3;
## }
##
## unsigned addVal(unsigned A, unsigned* B) {
## return A + *B;
## }
//--- defs
.globl getConst
getConst:
lwz 3, 0(3)
addi 3, 3, 3
clrldi 3, 3, 32
blr
.globl addVal
addVal:
lwz 4, 0(4)
add 3, 4, 3
clrldi 3, 3, 32
blr
.section .tbss,"awT",@nobits
.globl TGlobal
.p2align 2
TGlobal:
.long 0
.size TGlobal, 4