xref: /llvm-project/llvm/test/CodeGen/PowerPC/aix-small-local-exec-tls-largeaccess2.ll (revision 90e8dc0f7cbd09cc653b497eb2dfc68edd800f48)
12a509215SAmy Kwan; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 3
22a509215SAmy Kwan; RUN: llc  -verify-machineinstrs -mcpu=pwr7 -ppc-asm-full-reg-names \
32a509215SAmy Kwan; RUN:      -mtriple powerpc64-ibm-aix-xcoff -mattr=+aix-small-local-exec-tls < %s \
42a509215SAmy Kwan; RUN:      | FileCheck %s --check-prefix=SMALL-LOCAL-EXEC-SMALLCM64
52a509215SAmy Kwan; RUN: llc  -verify-machineinstrs -mcpu=pwr7 -ppc-asm-full-reg-names \
62a509215SAmy Kwan; RUN:      -mtriple powerpc64-ibm-aix-xcoff --code-model=large \
72a509215SAmy Kwan; RUN:      -mattr=+aix-small-local-exec-tls < %s | FileCheck %s \
82a509215SAmy Kwan; RUN:      --check-prefix=SMALL-LOCAL-EXEC-LARGECM64
92a509215SAmy Kwan
102a509215SAmy Kwan; Test disassembly of object.
112a509215SAmy Kwan; RUN: llc -verify-machineinstrs -mcpu=pwr7 -mattr=+aix-small-local-exec-tls \
122a509215SAmy Kwan; RUN:      -mtriple powerpc64-ibm-aix-xcoff -xcoff-traceback-table=false \
132a509215SAmy Kwan; RUN:      --code-model=large -filetype=obj -o %t.o < %s
14*90e8dc0fSstephenpeckham; RUN: llvm-objdump -D -r --symbol-description %t.o | FileCheck -D#NFA=2 --check-prefix=DIS %s
152a509215SAmy Kwan
162a509215SAmy Kwan@mySmallLocalExecTLS6 = external thread_local(localexec) global [60 x i64], align 8
172a509215SAmy Kwan@mySmallLocalExecTLS2 = thread_local(localexec) global [3000 x i64] zeroinitializer, align 8
182a509215SAmy Kwan@MyTLSGDVar = thread_local global [800 x i64] zeroinitializer, align 8
192a509215SAmy Kwan@mySmallLocalExecTLS3 = thread_local(localexec) global [3000 x i64] zeroinitializer, align 8
202a509215SAmy Kwan@mySmallLocalExecTLS4 = thread_local(localexec) global [3000 x i64] zeroinitializer, align 8
212a509215SAmy Kwan@mySmallLocalExecTLS5 = thread_local(localexec) global [3000 x i64] zeroinitializer, align 8
222a509215SAmy Kwan@mySmallLocalExecTLS = thread_local(localexec) local_unnamed_addr global [7800 x i64] zeroinitializer, align 8
232a509215SAmy Kwandeclare nonnull ptr @llvm.threadlocal.address.p0(ptr nonnull) #1
242a509215SAmy Kwan
252a509215SAmy Kwan; All accesses use a "faster" local-exec sequence directly off the thread pointer.
262a509215SAmy Kwandefine i64 @StoreLargeAccess1() {
272a509215SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64-LABEL: StoreLargeAccess1:
282a509215SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64:       # %bb.0: # %entry
292a509215SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    mflr r0
302a509215SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    stdu r1, -48(r1)
312a509215SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    li r3, 212
322a509215SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    li r4, 203
332a509215SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    std r0, 64(r1)
342a509215SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    std r3, mySmallLocalExecTLS6[UL]@le+424(r13)
352a509215SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    std r4, mySmallLocalExecTLS2[TL]@le+1200(r13)
362a509215SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    ld r3, L..C0(r2) # target-flags(ppc-tlsgdm) @MyTLSGDVar
372a509215SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    ld r4, L..C1(r2) # target-flags(ppc-tlsgd) @MyTLSGDVar
382a509215SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    bla .__tls_get_addr[PR]
392a509215SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    li r4, 44
402a509215SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    std r4, 440(r3)
412a509215SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    li r3, 6
422a509215SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    li r4, 100
432a509215SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    std r3, mySmallLocalExecTLS3[TL]@le+2000(r13)
442a509215SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    li r3, 882
452a509215SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    std r4, (mySmallLocalExecTLS4[TL]@le+6800)-65536(r13)
462a509215SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    std r3, (mySmallLocalExecTLS5[TL]@le+8400)-65536(r13)
472a509215SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    li r3, 1191
482a509215SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    addi r1, r1, 48
492a509215SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    ld r0, 16(r1)
502a509215SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    mtlr r0
512a509215SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    blr
522a509215SAmy Kwan;
532a509215SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64-LABEL: StoreLargeAccess1:
542a509215SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64:       # %bb.0: # %entry
552a509215SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    mflr r0
562a509215SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    stdu r1, -48(r1)
572a509215SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    li r3, 212
582a509215SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    std r0, 64(r1)
592a509215SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    addis r4, L..C0@u(r2)
602a509215SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    ld r4, L..C0@l(r4)
612a509215SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    std r3, mySmallLocalExecTLS6[UL]@le+424(r13)
622a509215SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    li r3, 203
632a509215SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    std r3, mySmallLocalExecTLS2[TL]@le+1200(r13)
642a509215SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    addis r3, L..C1@u(r2)
652a509215SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    ld r3, L..C1@l(r3)
662a509215SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    bla .__tls_get_addr[PR]
672a509215SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    li r4, 44
682a509215SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    std r4, 440(r3)
692a509215SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    li r3, 6
702a509215SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    li r4, 100
712a509215SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    std r3, mySmallLocalExecTLS3[TL]@le+2000(r13)
722a509215SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    li r3, 882
732a509215SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    std r4, (mySmallLocalExecTLS4[TL]@le+6800)-65536(r13)
742a509215SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    std r3, (mySmallLocalExecTLS5[TL]@le+8400)-65536(r13)
752a509215SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    li r3, 1191
762a509215SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    addi r1, r1, 48
772a509215SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    ld r0, 16(r1)
782a509215SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    mtlr r0
792a509215SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    blr
802a509215SAmy Kwanentry:
812a509215SAmy Kwan  %0 = tail call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @mySmallLocalExecTLS6)
822a509215SAmy Kwan  %arrayidx = getelementptr inbounds [60 x i64], ptr %0, i64 0, i64 53
832a509215SAmy Kwan  store i64 212, ptr %arrayidx, align 8
842a509215SAmy Kwan  %1 = tail call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @mySmallLocalExecTLS2)
852a509215SAmy Kwan  %arrayidx1 = getelementptr inbounds [3000 x i64], ptr %1, i64 0, i64 150
862a509215SAmy Kwan  store i64 203, ptr %arrayidx1, align 8
872a509215SAmy Kwan  %2 = tail call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @MyTLSGDVar)
882a509215SAmy Kwan  %arrayidx2 = getelementptr inbounds [800 x i64], ptr %2, i64 0, i64 55
892a509215SAmy Kwan  store i64 44, ptr %arrayidx2, align 8
902a509215SAmy Kwan  %3 = tail call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @mySmallLocalExecTLS3)
912a509215SAmy Kwan  %arrayidx3 = getelementptr inbounds [3000 x i64], ptr %3, i64 0, i64 250
922a509215SAmy Kwan  store i64 6, ptr %arrayidx3, align 8
932a509215SAmy Kwan  %4 = tail call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @mySmallLocalExecTLS4)
942a509215SAmy Kwan  %arrayidx4 = getelementptr inbounds [3000 x i64], ptr %4, i64 0, i64 850
952a509215SAmy Kwan  store i64 100, ptr %arrayidx4, align 8
962a509215SAmy Kwan  %5 = tail call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @mySmallLocalExecTLS5)
972a509215SAmy Kwan  %arrayidx5 = getelementptr inbounds [3000 x i64], ptr %5, i64 0, i64 1050
982a509215SAmy Kwan  store i64 882, ptr %arrayidx5, align 8
992a509215SAmy Kwan  %6 = load i64, ptr %arrayidx1, align 8
1002a509215SAmy Kwan  %7 = load i64, ptr %arrayidx3, align 8
1012a509215SAmy Kwan  %8 = load i64, ptr %arrayidx4, align 8
1022a509215SAmy Kwan  %add = add i64 %6, 882
1032a509215SAmy Kwan  %add9 = add i64 %add, %7
1042a509215SAmy Kwan  %add11 = add i64 %add9, %8
1052a509215SAmy Kwan  ret i64 %add11
1062a509215SAmy Kwan}
1072a509215SAmy Kwan
108*90e8dc0fSstephenpeckham; DIS:      0000000000000000 (idx: [[#NFA+7]]) .StoreLargeAccess1:
1092a509215SAmy Kwan; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                mflr 0
1102a509215SAmy Kwan; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                stdu 1, -48(1)
1112a509215SAmy Kwan; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                li 3, 212
1122a509215SAmy Kwan; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                std 0, 64(1)
1132a509215SAmy Kwan; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                addis 4, 2, 0
114*90e8dc0fSstephenpeckham; DIS-NEXT: {{0*}}[[#ADDR + 2]]: R_TOCU	(idx: [[#NFA+13]]) MyTLSGDVar[TE]
1152a509215SAmy Kwan; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                ld 4, 0(4)
116*90e8dc0fSstephenpeckham; DIS-NEXT: {{0*}}[[#ADDR + 2]]: R_TOCL	(idx: [[#NFA+13]]) MyTLSGDVar[TE]
1172a509215SAmy Kwan; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                std 3, 424(13)
118*90e8dc0fSstephenpeckham; DIS-NEXT: {{0*}}[[#ADDR + 2]]: R_TLS_LE	(idx: [[#NFA+1]]) mySmallLocalExecTLS6[UL]
1192a509215SAmy Kwan; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                li 3, 203
1202a509215SAmy Kwan; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                std 3, 1200(13)
121*90e8dc0fSstephenpeckham; DIS-NEXT: {{0*}}[[#ADDR + 2]]: R_TLS_LE	(idx: [[#NFA+17]]) mySmallLocalExecTLS2[TL]
1222a509215SAmy Kwan; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                addis 3, 2, 0
123*90e8dc0fSstephenpeckham; DIS-NEXT: {{0*}}[[#ADDR + 2]]: R_TOCU	(idx: [[#NFA+15]]) .MyTLSGDVar[TE]
1242a509215SAmy Kwan; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                ld 3, 8(3)
125*90e8dc0fSstephenpeckham; DIS-NEXT: {{0*}}[[#ADDR + 2]]: R_TOCL	(idx: [[#NFA+15]]) .MyTLSGDVar[TE]
1262a509215SAmy Kwan; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                bla 0
127*90e8dc0fSstephenpeckham; DIS-NEXT: {{0*}}[[#ADDR]]: R_RBA  (idx: [[#NFA+3]])      .__tls_get_addr[PR]
1282a509215SAmy Kwan; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                li 4, 44
1292a509215SAmy Kwan; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                std 4, 440(3)
1302a509215SAmy Kwan; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                li 3, 6
1312a509215SAmy Kwan; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                li 4, 100
1322a509215SAmy Kwan; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                std 3, 32400(13)
133*90e8dc0fSstephenpeckham; DIS-NEXT: {{0*}}[[#ADDR + 2]]: R_TLS_LE       (idx: [[#NFA+21]]) mySmallLocalExecTLS3[TL]
1342a509215SAmy Kwan; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                li 3, 882
1352a509215SAmy Kwan; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                std 4, -4336(13)
136*90e8dc0fSstephenpeckham; DIS-NEXT: {{0*}}[[#ADDR + 2]]: R_TLS_LE       (idx: [[#NFA+23]]) mySmallLocalExecTLS4[TL]
1372a509215SAmy Kwan; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                std 3, 21264(13)
138*90e8dc0fSstephenpeckham; DIS-NEXT: {{0*}}[[#ADDR + 2]]: R_TLS_LE       (idx: [[#NFA+25]]) mySmallLocalExecTLS5[TL]
1392a509215SAmy Kwan; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                li 3, 1191
1402a509215SAmy Kwan; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                addi 1, 1, 48
1412a509215SAmy Kwan; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                ld 0, 16(1)
1422a509215SAmy Kwan; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                mtlr 0
1432a509215SAmy Kwan; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                blr
1442a509215SAmy Kwan
1452a509215SAmy Kwan; DIS:      Disassembly of section .data:
146*90e8dc0fSstephenpeckham; DIS:      0000000000000068 (idx: [[#NFA+9]]) StoreLargeAccess1[DS]:
1472a509215SAmy Kwan; DIS-NEXT:       68: 00 00 00 00
148*90e8dc0fSstephenpeckham; DIS-NEXT: 0000000000000068:  R_POS    (idx: [[#NFA+7]]) .StoreLargeAccess1
1492a509215SAmy Kwan; DIS-NEXT:       6c: 00 00 00 00
1502a509215SAmy Kwan; DIS-NEXT:       70: 00 00 00 00
151*90e8dc0fSstephenpeckham; DIS-NEXT: 0000000000000070:  R_POS        (idx: [[#NFA+11]]) TOC[TC0]
1522a509215SAmy Kwan; DIS-NEXT:       74: 00 00 00 80
1532a509215SAmy Kwan
1542a509215SAmy Kwan; DIS:      Disassembly of section .tdata:
155*90e8dc0fSstephenpeckham; DIS:      0000000000000000 (idx: [[#NFA+17]]) mySmallLocalExecTLS2[TL]:
156*90e8dc0fSstephenpeckham; DIS:      0000000000005dc0 (idx: [[#NFA+19]]) MyTLSGDVar[TL]:
157*90e8dc0fSstephenpeckham; DIS:      00000000000076c0 (idx: [[#NFA+21]]) mySmallLocalExecTLS3[TL]:
158*90e8dc0fSstephenpeckham; DIS:      000000000000d480 (idx: [[#NFA+23]]) mySmallLocalExecTLS4[TL]:
159*90e8dc0fSstephenpeckham; DIS:      0000000000013240 (idx: [[#NFA+25]]) mySmallLocalExecTLS5[TL]:
160*90e8dc0fSstephenpeckham; DIS:      0000000000019000 (idx: [[#NFA+27]]) mySmallLocalExecTLS[TL]:
161