# 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 --mcpu=pwr10 --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
