1# REQUIRES: ppc
2# RUN: llvm-mc -filetype=obj -triple=powerpc64le-unknown-linux %s -o %t.o
3# RUN: ld.lld %t.o -o %t
4# RUN: llvm-readelf -S %t | FileCheck --check-prefixes=SECTIONS %s
5# RUN: llvm-readelf -x .toc %t | FileCheck --check-prefixes=HEX-LE %s
6# RUN: llvm-objdump -d %t | FileCheck --check-prefixes=CHECK %s
7
8# RUN: llvm-mc -filetype=obj -triple=powerpc64-unknown-linux %s -o %t.o
9# RUN: ld.lld %t.o -o %t
10# RUN: llvm-readelf -S %t | FileCheck --check-prefixes=SECTIONS %s
11# RUN: llvm-readelf -x .toc %t | FileCheck --check-prefixes=HEX-BE %s
12# RUN: llvm-objdump -d %t | FileCheck --check-prefixes=CHECK %s
13
14# .LJT is a local symbol (non-preemptable).
15# Test we can perform the toc-indirect to toc-relative relaxation.
16
17# SECTIONS: .rodata PROGBITS 00000000100001c8
18
19# HEX-LE:      section '.toc':
20# HEX-LE-NEXT: 10020228 c8010010 00000000
21
22# HEX-BE:      section '.toc':
23# HEX-BE-NEXT: 10020228 00000000 100001c8
24
25# CHECK-LABEL: _start
26# CHECK:       clrldi  3, 3, 62
27# CHECK-NEXT:  addis 4, 2, -3
28# CHECK-NEXT:  addi  4, 4, 32680
29# CHECK-NEXT:  sldi  3, 3, 2
30
31    .text
32    .global _start
33    .type _start, @function
34_start:
35.Lstart_gep:
36    addis 2, 12, .TOC.-.Lstart_gep@ha
37    addi  2,  2, .TOC.-.Lstart_gep@l
38.Lstart_lep:
39    .localentry _start, .Lstart_lep-.Lstart_gep
40    rldicl 3, 3, 0, 62
41    addis 4, 2, .LJTI_TE@toc@ha
42    ld    4, .LJTI_TE@toc@l(4)
43    sldi  3, 3, 2
44    lwax  3, 3, 4
45    add   3, 3, 4
46    mtctr 3
47    bctr
48
49.LBB1:
50    li 3, 0
51    blr
52.LBB2:
53    li 3, 10
54    blr
55.LBB3:
56    li 3, 55
57    blr
58.LBB4:
59    li 3, 255
60    blr
61
62    .section        .rodata,"a",@progbits
63    .p2align        2
64.LJT:
65    .long   .LBB1-.LJT
66    .long   .LBB2-.LJT
67    .long   .LBB3-.LJT
68    .long   .LBB4-.LJT
69
70.section        .toc,"aw",@progbits
71# TOC entry for the jumptable address.
72.LJTI_TE:
73    .tc .LJT[TC],.LJT
74