brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.8 KiB · 310773d Raw
187 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 i64 1, align 811@VarInit = local_unnamed_addr global i64 87, align 812@IThreadLocalVarInit = internal thread_local(localexec) global i64 1, align 813declare nonnull ptr @llvm.threadlocal.address.p0(ptr nonnull) #114%struct.anon = type { i64 }15@ThreadLocalStruct = thread_local(localexec) global %struct.anon zeroinitializer, align 116@d = thread_local(localexec) global [87 x i64] zeroinitializer, align 817 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, d[TL]@le(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, d[TL]@le(r13)27; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    blr28entry:29  %0 = tail call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @d)30  ret ptr %031}32 33define i64 @testUnaligned() {34; SMALL-LOCAL-EXEC-SMALLCM64-LABEL: testUnaligned:35; SMALL-LOCAL-EXEC-SMALLCM64:       # %bb.0: # %entry36; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    la r3, ThreadLocalStruct[TL]@le(r13)37; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    ld r3, 0(r3)38; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    blr39;40; SMALL-LOCAL-EXEC-LARGECM64-LABEL: testUnaligned:41; SMALL-LOCAL-EXEC-LARGECM64:       # %bb.0: # %entry42; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    la r3, ThreadLocalStruct[TL]@le(r13)43; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    ld r3, 0(r3)44; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    blr45entry:46  %0 = call align 1 ptr @llvm.threadlocal.address.p0(ptr align 1 @ThreadLocalStruct)47  %x = getelementptr inbounds %struct.anon, ptr %0, i32 0, i32 048  %1 = load i64, ptr %x, align 149  ret i64 %150}51 52define void @storeITLInit(i64 noundef %x) {53; SMALL-LOCAL-EXEC-SMALLCM64-LABEL: storeITLInit:54; SMALL-LOCAL-EXEC-SMALLCM64:       # %bb.0: # %entry55; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    std r3, IThreadLocalVarInit[TL]@le(r13)56; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    blr57;58; SMALL-LOCAL-EXEC-LARGECM64-LABEL: storeITLInit:59; SMALL-LOCAL-EXEC-LARGECM64:       # %bb.0: # %entry60; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    std r3, IThreadLocalVarInit[TL]@le(r13)61; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    blr62entry:63  %0 = tail call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @IThreadLocalVarInit)64  store i64 %x, ptr %0, align 865  ret void66}67 68define void @storeTLInit(i64 noundef %x) {69; SMALL-LOCAL-EXEC-SMALLCM64-LABEL: storeTLInit:70; SMALL-LOCAL-EXEC-SMALLCM64:       # %bb.0: # %entry71; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    std r3, ThreadLocalVarInit[TL]@le(r13)72; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    blr73;74; SMALL-LOCAL-EXEC-LARGECM64-LABEL: storeTLInit:75; SMALL-LOCAL-EXEC-LARGECM64:       # %bb.0: # %entry76; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    std r3, ThreadLocalVarInit[TL]@le(r13)77; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    blr78entry:79  %0 = tail call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @ThreadLocalVarInit)80  store i64 %x, ptr %0, align 881  ret void82}83 84define i64 @loadITLInit() {85; SMALL-LOCAL-EXEC-SMALLCM64-LABEL: loadITLInit:86; SMALL-LOCAL-EXEC-SMALLCM64:       # %bb.0: # %entry87; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    ld r3, IThreadLocalVarInit[TL]@le(r13)88; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    blr89;90; SMALL-LOCAL-EXEC-LARGECM64-LABEL: loadITLInit:91; SMALL-LOCAL-EXEC-LARGECM64:       # %bb.0: # %entry92; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    ld r3, IThreadLocalVarInit[TL]@le(r13)93; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    blr94entry:95  %0 = tail call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @IThreadLocalVarInit)96  %1 = load i64, ptr %0, align 897  ret i64 %198}99 100define i64 @loadITLInit2() {101; SMALL-LOCAL-EXEC-SMALLCM64-LABEL: loadITLInit2:102; SMALL-LOCAL-EXEC-SMALLCM64:       # %bb.0: # %entry103; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    ld r4, L..C0(r2) # @VarInit104; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    ld r3, IThreadLocalVarInit[TL]@le(r13)105; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    ld r4, 0(r4)106; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    add r3, r4, r3107; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    blr108;109; SMALL-LOCAL-EXEC-LARGECM64-LABEL: loadITLInit2:110; SMALL-LOCAL-EXEC-LARGECM64:       # %bb.0: # %entry111; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    addis r4, L..C0@u(r2)112; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    ld r3, IThreadLocalVarInit[TL]@le(r13)113; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    ld r4, L..C0@l(r4)114; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    ld r4, 0(r4)115; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    add r3, r4, r3116; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    blr117entry:118  %0 = tail call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @IThreadLocalVarInit)119  %1 = load i64, ptr %0, align 8120  %2 = load i64, ptr @VarInit, align 8121  %add = add nsw i64 %2, %1122  ret i64 %add123}124 125define i64 @loadTLInit() {126; SMALL-LOCAL-EXEC-SMALLCM64-LABEL: loadTLInit:127; SMALL-LOCAL-EXEC-SMALLCM64:       # %bb.0: # %entry128; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    ld r3, ThreadLocalVarInit[TL]@le(r13)129; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    blr130;131; SMALL-LOCAL-EXEC-LARGECM64-LABEL: loadTLInit:132; SMALL-LOCAL-EXEC-LARGECM64:       # %bb.0: # %entry133; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    ld r3, ThreadLocalVarInit[TL]@le(r13)134; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    blr135entry:136  %0 = tail call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @ThreadLocalVarInit)137  %1 = load i64, ptr %0, align 8138  ret i64 %1139}140 141define i64 @loadTLInit2() {142; SMALL-LOCAL-EXEC-SMALLCM64-LABEL: loadTLInit2:143; SMALL-LOCAL-EXEC-SMALLCM64:       # %bb.0: # %entry144; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    ld r4, L..C0(r2) # @VarInit145; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    ld r3, ThreadLocalVarInit[TL]@le(r13)146; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    ld r4, 0(r4)147; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    add r3, r4, r3148; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    blr149;150; SMALL-LOCAL-EXEC-LARGECM64-LABEL: loadTLInit2:151; SMALL-LOCAL-EXEC-LARGECM64:       # %bb.0: # %entry152; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    addis r4, L..C0@u(r2)153; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    ld r3, ThreadLocalVarInit[TL]@le(r13)154; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    ld r4, L..C0@l(r4)155; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    ld r4, 0(r4)156; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    add r3, r4, r3157; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    blr158entry:159  %0 = tail call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @ThreadLocalVarInit)160  %1 = load i64, ptr %0, align 8161  %2 = load i64, ptr @VarInit, align 8162  %add = add nsw i64 %2, %1163  ret i64 %add164}165 166define void @loadStore1(i64 noundef %x) {167; SMALL-LOCAL-EXEC-SMALLCM64-LABEL: loadStore1:168; SMALL-LOCAL-EXEC-SMALLCM64:       # %bb.0: # %entry169; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    ld r3, IThreadLocalVarInit[TL]@le(r13)170; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    addi r3, r3, 9171; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    std r3, IThreadLocalVarInit[TL]@le(r13)172; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    blr173;174; SMALL-LOCAL-EXEC-LARGECM64-LABEL: loadStore1:175; SMALL-LOCAL-EXEC-LARGECM64:       # %bb.0: # %entry176; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    ld r3, IThreadLocalVarInit[TL]@le(r13)177; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    addi r3, r3, 9178; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    std r3, IThreadLocalVarInit[TL]@le(r13)179; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    blr180entry:181  %0 = tail call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @IThreadLocalVarInit)182  %1 = load i64, ptr %0, align 8183  %add = add nsw i64 %1, 9184  store i64 %add, ptr %0, align 8185  ret void186}187