xref: /llvm-project/llvm/test/CodeGen/PowerPC/aix-small-local-exec-tls-float.ll (revision 2a50921553798d2db52ca6330c89f0f8a5bc2215)
13f46e545SAmy Kwan; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 3
23f46e545SAmy Kwan; RUN: llc  -verify-machineinstrs -mcpu=pwr7 -ppc-asm-full-reg-names \
33f46e545SAmy Kwan; RUN:      -mtriple powerpc64-ibm-aix-xcoff -mattr=+aix-small-local-exec-tls < %s \
43f46e545SAmy Kwan; RUN:      | FileCheck %s --check-prefix=SMALL-LOCAL-EXEC-SMALLCM64
53f46e545SAmy Kwan; RUN: llc  -verify-machineinstrs -mcpu=pwr7 -ppc-asm-full-reg-names \
63f46e545SAmy Kwan; RUN:      -mtriple powerpc64-ibm-aix-xcoff --code-model=large \
73f46e545SAmy Kwan; RUN:      -mattr=+aix-small-local-exec-tls < %s | FileCheck %s \
83f46e545SAmy Kwan; RUN:      --check-prefix=SMALL-LOCAL-EXEC-LARGECM64
93f46e545SAmy Kwan
103f46e545SAmy Kwan@ThreadLocalVarInit = thread_local(localexec) global float 1.000000e+00, align 4
113f46e545SAmy Kwan@VarInit = local_unnamed_addr global float 8.700000e+01, align 4
123f46e545SAmy Kwan@IThreadLocalVarInit = internal thread_local(localexec) global float 1.000000e+00, align 4
133f46e545SAmy Kwandeclare nonnull ptr @llvm.threadlocal.address.p0(ptr nonnull) #1
143f46e545SAmy Kwan@e = thread_local(localexec) global [87 x float] zeroinitializer, align 4
153f46e545SAmy Kwan
163f46e545SAmy Kwandefine nonnull ptr @AddrTest1() local_unnamed_addr #0 {
173f46e545SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64-LABEL: AddrTest1:
183f46e545SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64:       # %bb.0: # %entry
19*2a509215SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    la r3, e[TL]@le+16(r13)
203f46e545SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    blr
213f46e545SAmy Kwan;
223f46e545SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64-LABEL: AddrTest1:
233f46e545SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64:       # %bb.0: # %entry
24*2a509215SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    la r3, e[TL]@le+16(r13)
253f46e545SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    blr
263f46e545SAmy Kwanentry:
273f46e545SAmy Kwan  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @e)
283f46e545SAmy Kwan  %arrayidx = getelementptr inbounds [87 x float], ptr %0, i64 0, i64 4
293f46e545SAmy Kwan  ret ptr %arrayidx
303f46e545SAmy Kwan}
313f46e545SAmy Kwan
323f46e545SAmy Kwandefine void @storeITLInit(float noundef %x) {
333f46e545SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64-LABEL: storeITLInit:
343f46e545SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64:       # %bb.0: # %entry
353f46e545SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    stfs f1, IThreadLocalVarInit[TL]@le(r13)
363f46e545SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    blr
373f46e545SAmy Kwan;
383f46e545SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64-LABEL: storeITLInit:
393f46e545SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64:       # %bb.0: # %entry
403f46e545SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    stfs f1, IThreadLocalVarInit[TL]@le(r13)
413f46e545SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    blr
423f46e545SAmy Kwanentry:
433f46e545SAmy Kwan  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @IThreadLocalVarInit)
443f46e545SAmy Kwan  store float %x, ptr %0, align 4
453f46e545SAmy Kwan  ret void
463f46e545SAmy Kwan}
473f46e545SAmy Kwan
483f46e545SAmy Kwandefine void @storeTLInit(float noundef %x) {
493f46e545SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64-LABEL: storeTLInit:
503f46e545SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64:       # %bb.0: # %entry
513f46e545SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    stfs f1, ThreadLocalVarInit[TL]@le(r13)
523f46e545SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    blr
533f46e545SAmy Kwan;
543f46e545SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64-LABEL: storeTLInit:
553f46e545SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64:       # %bb.0: # %entry
563f46e545SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    stfs f1, ThreadLocalVarInit[TL]@le(r13)
573f46e545SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    blr
583f46e545SAmy Kwanentry:
593f46e545SAmy Kwan  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @ThreadLocalVarInit)
603f46e545SAmy Kwan  store float %x, ptr %0, align 4
613f46e545SAmy Kwan  ret void
623f46e545SAmy Kwan}
633f46e545SAmy Kwan
643f46e545SAmy Kwandefine float @loadITLInit() {
653f46e545SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64-LABEL: loadITLInit:
663f46e545SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64:       # %bb.0: # %entry
673f46e545SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    lfs f1, IThreadLocalVarInit[TL]@le(r13)
683f46e545SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    blr
693f46e545SAmy Kwan;
703f46e545SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64-LABEL: loadITLInit:
713f46e545SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64:       # %bb.0: # %entry
723f46e545SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    lfs f1, IThreadLocalVarInit[TL]@le(r13)
733f46e545SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    blr
743f46e545SAmy Kwanentry:
753f46e545SAmy Kwan  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @IThreadLocalVarInit)
763f46e545SAmy Kwan  %1 = load float, ptr %0, align 4
773f46e545SAmy Kwan  ret float %1
783f46e545SAmy Kwan}
793f46e545SAmy Kwan
803f46e545SAmy Kwandefine float @loadITLInit2() {
813f46e545SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64-LABEL: loadITLInit2:
823f46e545SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64:       # %bb.0: # %entry
833f46e545SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    ld r3, L..C0(r2) # @VarInit
843f46e545SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    lfs f0, IThreadLocalVarInit[TL]@le(r13)
853f46e545SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    lfs f1, 0(r3)
863f46e545SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    fadds f1, f0, f1
873f46e545SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    blr
883f46e545SAmy Kwan;
893f46e545SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64-LABEL: loadITLInit2:
903f46e545SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64:       # %bb.0: # %entry
913f46e545SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    addis r3, L..C0@u(r2)
923f46e545SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    lfs f0, IThreadLocalVarInit[TL]@le(r13)
933f46e545SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    ld r3, L..C0@l(r3)
943f46e545SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    lfs f1, 0(r3)
953f46e545SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    fadds f1, f0, f1
963f46e545SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    blr
973f46e545SAmy Kwanentry:
983f46e545SAmy Kwan  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @IThreadLocalVarInit)
993f46e545SAmy Kwan  %1 = load float, ptr %0, align 4
1003f46e545SAmy Kwan  %2 = load float, ptr @VarInit, align 4
1013f46e545SAmy Kwan  %add = fadd float %1, %2
1023f46e545SAmy Kwan  ret float %add
1033f46e545SAmy Kwan}
1043f46e545SAmy Kwan
1053f46e545SAmy Kwandefine float @loadTLInit() {
1063f46e545SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64-LABEL: loadTLInit:
1073f46e545SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64:       # %bb.0: # %entry
1083f46e545SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    lfs f1, ThreadLocalVarInit[TL]@le(r13)
1093f46e545SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    blr
1103f46e545SAmy Kwan;
1113f46e545SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64-LABEL: loadTLInit:
1123f46e545SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64:       # %bb.0: # %entry
1133f46e545SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    lfs f1, ThreadLocalVarInit[TL]@le(r13)
1143f46e545SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    blr
1153f46e545SAmy Kwanentry:
1163f46e545SAmy Kwan  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @ThreadLocalVarInit)
1173f46e545SAmy Kwan  %1 = load float, ptr %0, align 4
1183f46e545SAmy Kwan  ret float %1
1193f46e545SAmy Kwan}
1203f46e545SAmy Kwan
1213f46e545SAmy Kwandefine float @loadTLInit2() {
1223f46e545SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64-LABEL: loadTLInit2:
1233f46e545SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64:       # %bb.0: # %entry
1243f46e545SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    ld r3, L..C0(r2) # @VarInit
1253f46e545SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    lfs f0, ThreadLocalVarInit[TL]@le(r13)
1263f46e545SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    lfs f1, 0(r3)
1273f46e545SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    fadds f1, f0, f1
1283f46e545SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    blr
1293f46e545SAmy Kwan;
1303f46e545SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64-LABEL: loadTLInit2:
1313f46e545SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64:       # %bb.0: # %entry
1323f46e545SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    addis r3, L..C0@u(r2)
1333f46e545SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    lfs f0, ThreadLocalVarInit[TL]@le(r13)
1343f46e545SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    ld r3, L..C0@l(r3)
1353f46e545SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    lfs f1, 0(r3)
1363f46e545SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    fadds f1, f0, f1
1373f46e545SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    blr
1383f46e545SAmy Kwanentry:
1393f46e545SAmy Kwan  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @ThreadLocalVarInit)
1403f46e545SAmy Kwan  %1 = load float, ptr %0, align 4
1413f46e545SAmy Kwan  %2 = load float, ptr @VarInit, align 4
1423f46e545SAmy Kwan  %add = fadd float %1, %2
1433f46e545SAmy Kwan  ret float %add
1443f46e545SAmy Kwan}
1453f46e545SAmy Kwan
1463f46e545SAmy Kwandefine void @loadStore1(float noundef %x) {
1473f46e545SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64-LABEL: loadStore1:
1483f46e545SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64:       # %bb.0: # %entry
1493f46e545SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    vspltisw v2, 1
1503f46e545SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    lfs f1, IThreadLocalVarInit[TL]@le(r13)
1513f46e545SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    xvcvsxwdp vs0, vs34
15269b056d5SQiu Chaofan; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    vspltisw v3, 8
1533f46e545SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    fadds f0, f1, f0
15469b056d5SQiu Chaofan; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    xvcvsxwdp vs1, vs35
15569b056d5SQiu Chaofan; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    fadds f0, f0, f1
1563f46e545SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    stfs f0, IThreadLocalVarInit[TL]@le(r13)
1573f46e545SAmy Kwan; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    blr
1583f46e545SAmy Kwan;
1593f46e545SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64-LABEL: loadStore1:
1603f46e545SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64:       # %bb.0: # %entry
1613f46e545SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    vspltisw v2, 1
1623f46e545SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    lfs f1, IThreadLocalVarInit[TL]@le(r13)
1633f46e545SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    xvcvsxwdp vs0, vs34
16469b056d5SQiu Chaofan; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    vspltisw v3, 8
1653f46e545SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    fadds f0, f1, f0
16669b056d5SQiu Chaofan; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    xvcvsxwdp vs1, vs35
16769b056d5SQiu Chaofan; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    fadds f0, f0, f1
1683f46e545SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    stfs f0, IThreadLocalVarInit[TL]@le(r13)
1693f46e545SAmy Kwan; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    blr
1703f46e545SAmy Kwanentry:
1713f46e545SAmy Kwan  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @IThreadLocalVarInit)
1723f46e545SAmy Kwan  %1 = load float, ptr %0, align 4
1733f46e545SAmy Kwan  %inc = fadd float %1, 1.000000e+00
1743f46e545SAmy Kwan  %add = fadd float %inc, 8.000000e+00
1753f46e545SAmy Kwan  store float %add, ptr %0, align 4
1763f46e545SAmy Kwan  ret void
1773f46e545SAmy Kwan}
178