brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.2 KiB · c74abe9 Raw
193 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 32; RUN: llc  -verify-machineinstrs -mcpu=pwr7 -ppc-asm-full-reg-names \3; RUN:      -mtriple powerpc64-ibm-aix-xcoff -mattr=+aix-small-local-exec-tls < %s \4; RUN:      | FileCheck %s --check-prefix=SMALL-LOCAL-EXEC-SMALLCM645; RUN: llc  -verify-machineinstrs -mcpu=pwr7 -ppc-asm-full-reg-names \6; RUN:      -mtriple powerpc64-ibm-aix-xcoff --code-model=large \7; RUN:      -mattr=+aix-small-local-exec-tls < %s | FileCheck %s \8; RUN:      --check-prefix=SMALL-LOCAL-EXEC-LARGECM649 10@ThreadLocalVarInit = thread_local(localexec) global i32 1, align 411@VarInit = local_unnamed_addr global i32 87, align 412@IThreadLocalVarInit = internal thread_local(localexec) global i32 1, align 413declare nonnull ptr @llvm.threadlocal.address.p0(ptr nonnull) #114%struct.anon = type { i32 }15@ThreadLocalStruct = thread_local(localexec) global %struct.anon zeroinitializer, align 116@a = thread_local(localexec) global [87 x i32] zeroinitializer, align 417 18define nonnull ptr @AddrTest1() local_unnamed_addr #0 {19; SMALL-LOCAL-EXEC-SMALLCM64-LABEL: AddrTest1:20; SMALL-LOCAL-EXEC-SMALLCM64:       # %bb.0: # %entry21; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    la r3, a[TL]@le+12(r13)22; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    blr23;24; SMALL-LOCAL-EXEC-LARGECM64-LABEL: AddrTest1:25; SMALL-LOCAL-EXEC-LARGECM64:       # %bb.0: # %entry26; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    la r3, a[TL]@le+12(r13)27; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    blr28entry:29  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @a)30  %arrayidx = getelementptr inbounds [87 x i32], ptr %0, i64 0, i64 331  ret ptr %arrayidx32}33 34define signext i32 @testUnaligned() {35; SMALL-LOCAL-EXEC-SMALLCM64-LABEL: testUnaligned:36; SMALL-LOCAL-EXEC-SMALLCM64:       # %bb.0: # %entry37; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    la r3, ThreadLocalStruct[TL]@le(r13)38; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    lwa r3, 0(r3)39; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    blr40;41; SMALL-LOCAL-EXEC-LARGECM64-LABEL: testUnaligned:42; SMALL-LOCAL-EXEC-LARGECM64:       # %bb.0: # %entry43; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    la r3, ThreadLocalStruct[TL]@le(r13)44; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    lwa r3, 0(r3)45; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    blr46entry:47  %0 = call align 1 ptr @llvm.threadlocal.address.p0(ptr align 1 @ThreadLocalStruct)48  %x = getelementptr inbounds %struct.anon, ptr %0, i32 0, i32 049  %1 = load i32, ptr %x, align 150  ret i32 %151}52 53define void @storeITLInit(i32 noundef signext %x) {54; SMALL-LOCAL-EXEC-SMALLCM64-LABEL: storeITLInit:55; SMALL-LOCAL-EXEC-SMALLCM64:       # %bb.0: # %entry56; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    stw r3, IThreadLocalVarInit[TL]@le(r13)57; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    blr58;59; SMALL-LOCAL-EXEC-LARGECM64-LABEL: storeITLInit:60; SMALL-LOCAL-EXEC-LARGECM64:       # %bb.0: # %entry61; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    stw r3, IThreadLocalVarInit[TL]@le(r13)62; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    blr63entry:64  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @IThreadLocalVarInit)65  store i32 %x, ptr %0, align 466  ret void67}68 69define void @storeTLInit(i32 noundef signext %x) {70; SMALL-LOCAL-EXEC-SMALLCM64-LABEL: storeTLInit:71; SMALL-LOCAL-EXEC-SMALLCM64:       # %bb.0: # %entry72; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    stw r3, ThreadLocalVarInit[TL]@le(r13)73; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    blr74;75; SMALL-LOCAL-EXEC-LARGECM64-LABEL: storeTLInit:76; SMALL-LOCAL-EXEC-LARGECM64:       # %bb.0: # %entry77; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    stw r3, ThreadLocalVarInit[TL]@le(r13)78; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    blr79entry:80  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @ThreadLocalVarInit)81  store i32 %x, ptr %0, align 482  ret void83}84 85define signext i32 @loadITLInit() {86; SMALL-LOCAL-EXEC-SMALLCM64-LABEL: loadITLInit:87; SMALL-LOCAL-EXEC-SMALLCM64:       # %bb.0: # %entry88; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    lwa r3, IThreadLocalVarInit[TL]@le(r13)89; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    blr90;91; SMALL-LOCAL-EXEC-LARGECM64-LABEL: loadITLInit:92; SMALL-LOCAL-EXEC-LARGECM64:       # %bb.0: # %entry93; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    lwa r3, IThreadLocalVarInit[TL]@le(r13)94; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    blr95entry:96  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @IThreadLocalVarInit)97  %1 = load i32, ptr %0, align 498  ret i32 %199}100 101define signext i32 @loadITLInit2() {102; SMALL-LOCAL-EXEC-SMALLCM64-LABEL: loadITLInit2:103; SMALL-LOCAL-EXEC-SMALLCM64:       # %bb.0: # %entry104; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    ld r4, L..C0(r2) # @VarInit105; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    lwz r3, IThreadLocalVarInit[TL]@le(r13)106; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    lwz r4, 0(r4)107; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    add r3, r4, r3108; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    extsw r3, r3109; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    blr110;111; SMALL-LOCAL-EXEC-LARGECM64-LABEL: loadITLInit2:112; SMALL-LOCAL-EXEC-LARGECM64:       # %bb.0: # %entry113; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    addis r4, L..C0@u(r2)114; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    lwz r3, IThreadLocalVarInit[TL]@le(r13)115; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    ld r4, L..C0@l(r4)116; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    lwz r4, 0(r4)117; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    add r3, r4, r3118; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    extsw r3, r3119; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    blr120entry:121  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @IThreadLocalVarInit)122  %1 = load i32, ptr %0, align 4123  %2 = load i32, ptr @VarInit, align 4124  %add = add nsw i32 %2, %1125  ret i32 %add126}127 128define signext i32 @loadTLInit() {129; SMALL-LOCAL-EXEC-SMALLCM64-LABEL: loadTLInit:130; SMALL-LOCAL-EXEC-SMALLCM64:       # %bb.0: # %entry131; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    lwa r3, ThreadLocalVarInit[TL]@le(r13)132; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    blr133;134; SMALL-LOCAL-EXEC-LARGECM64-LABEL: loadTLInit:135; SMALL-LOCAL-EXEC-LARGECM64:       # %bb.0: # %entry136; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    lwa r3, ThreadLocalVarInit[TL]@le(r13)137; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    blr138entry:139  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @ThreadLocalVarInit)140  %1 = load i32, ptr %0, align 4141  ret i32 %1142}143 144define signext i32 @loadTLInit2() {145; SMALL-LOCAL-EXEC-SMALLCM64-LABEL: loadTLInit2:146; SMALL-LOCAL-EXEC-SMALLCM64:       # %bb.0: # %entry147; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    ld r4, L..C0(r2) # @VarInit148; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    lwz r3, ThreadLocalVarInit[TL]@le(r13)149; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    lwz r4, 0(r4)150; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    add r3, r4, r3151; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    extsw r3, r3152; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    blr153;154; SMALL-LOCAL-EXEC-LARGECM64-LABEL: loadTLInit2:155; SMALL-LOCAL-EXEC-LARGECM64:       # %bb.0: # %entry156; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    addis r4, L..C0@u(r2)157; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    lwz r3, ThreadLocalVarInit[TL]@le(r13)158; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    ld r4, L..C0@l(r4)159; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    lwz r4, 0(r4)160; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    add r3, r4, r3161; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    extsw r3, r3162; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    blr163entry:164  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @ThreadLocalVarInit)165  %1 = load i32, ptr %0, align 4166  %2 = load i32, ptr @VarInit, align 4167  %add = add nsw i32 %2, %1168  ret i32 %add169}170 171define void @loadStore1(i32 noundef signext %x) {172; SMALL-LOCAL-EXEC-SMALLCM64-LABEL: loadStore1:173; SMALL-LOCAL-EXEC-SMALLCM64:       # %bb.0: # %entry174; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    lwz r3, IThreadLocalVarInit[TL]@le(r13)175; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    addi r3, r3, 9176; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    stw r3, IThreadLocalVarInit[TL]@le(r13)177; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    blr178;179; SMALL-LOCAL-EXEC-LARGECM64-LABEL: loadStore1:180; SMALL-LOCAL-EXEC-LARGECM64:       # %bb.0: # %entry181; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    lwz r3, IThreadLocalVarInit[TL]@le(r13)182; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    addi r3, r3, 9183; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    stw r3, IThreadLocalVarInit[TL]@le(r13)184; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    blr185entry:186  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @IThreadLocalVarInit)187  %1 = load i32, ptr %0, align 4188  %add = add nsw i32 %1, 9189  store i32 %add, ptr %0, align 4190  ret void191}192 193