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