brintos

brintos / llvm-project-archived public Read only

0
0
Text · 12.8 KiB · a6d1fa1 Raw
231 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; Test disassembly of object.11; RUN: llc -verify-machineinstrs -mcpu=pwr7 -mattr=+aix-small-local-exec-tls \12; RUN:      -mtriple powerpc64-ibm-aix-xcoff -xcoff-traceback-table=false \13; RUN:      --code-model=large -filetype=obj -o %t.o < %s14; RUN: llvm-objdump -D -r --symbol-description %t.o | FileCheck -D#NFA=2 --check-prefix=DIS %s15 16@mySmallLocalExecTLSv1 = thread_local(localexec) global [8187 x i32] zeroinitializer, align 417@mySmallLocalExecTLS2 = thread_local(localexec) global [4000 x i32] zeroinitializer, align 418@mySmallLocalExecTLS3 = thread_local(localexec) global [4000 x i32] zeroinitializer, align 419@mySmallLocalExecTLS4 = thread_local(localexec) global [4000 x i32] zeroinitializer, align 420@mySmallLocalExecTLS5 = thread_local(localexec) global [4000 x i32] zeroinitializer, align 421@mySmallLocalExecTLSv2 = thread_local(localexec) global [9000 x i32] zeroinitializer, align 422declare nonnull ptr @llvm.threadlocal.address.p0(ptr nonnull) #123 24; All accesses use a "faster" local-exec sequence directly off the thread pointer.25define signext i32 @StoreArrays1() {26; SMALL-LOCAL-EXEC-SMALLCM64-LABEL: StoreArrays1:27; SMALL-LOCAL-EXEC-SMALLCM64:       # %bb.0: # %entry28; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    li r3, 129; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    li r4, 430; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    stw r3, mySmallLocalExecTLSv1[TL]@le(r13)31; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    li r3, 232; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    stw r4, mySmallLocalExecTLSv1[TL]@le+24(r13)33; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    stw r4, mySmallLocalExecTLS4[TL]@le+328-65536(r13)34; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    stw r3, mySmallLocalExecTLS2[TL]@le+320-65536(r13)35; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    li r3, 336; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    stw r3, mySmallLocalExecTLS3[TL]@le+324-65536(r13)37; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    li r3, 8838; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    stw r3, mySmallLocalExecTLS5[TL]@le+332-65536(r13)39; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    li r3, 10240; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    blr41;42; SMALL-LOCAL-EXEC-LARGECM64-LABEL: StoreArrays1:43; SMALL-LOCAL-EXEC-LARGECM64:       # %bb.0: # %entry44; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    li r3, 145; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    li r4, 446; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    stw r3, mySmallLocalExecTLSv1[TL]@le(r13)47; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    li r3, 248; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    stw r4, mySmallLocalExecTLSv1[TL]@le+24(r13)49; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    stw r4, mySmallLocalExecTLS4[TL]@le+328-65536(r13)50; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    stw r3, mySmallLocalExecTLS2[TL]@le+320-65536(r13)51; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    li r3, 352; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    stw r3, mySmallLocalExecTLS3[TL]@le+324-65536(r13)53; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    li r3, 8854; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    stw r3, mySmallLocalExecTLS5[TL]@le+332-65536(r13)55; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    li r3, 10256; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    blr57entry:58  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @mySmallLocalExecTLSv1)59  store i32 1, ptr %0, align 460  %arrayidx1 = getelementptr inbounds [8187 x i32], ptr %0, i64 0, i64 661  store i32 4, ptr %arrayidx1, align 462  %1 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @mySmallLocalExecTLS2)63  %arrayidx2 = getelementptr inbounds [4000 x i32], ptr %1, i64 0, i64 8064  store i32 2, ptr %arrayidx2, align 465  %2 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @mySmallLocalExecTLS3)66  %arrayidx3 = getelementptr inbounds [4000 x i32], ptr %2, i64 0, i64 8167  store i32 3, ptr %arrayidx3, align 468  %3 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @mySmallLocalExecTLS4)69  %arrayidx4 = getelementptr inbounds [4000 x i32], ptr %3, i64 0, i64 8270  store i32 4, ptr %arrayidx4, align 471  %4 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @mySmallLocalExecTLS5)72  %arrayidx5 = getelementptr inbounds [4000 x i32], ptr %4, i64 0, i64 8373  store i32 88, ptr %arrayidx5, align 474  %5 = load i32, ptr %0, align 475  %6 = load i32, ptr %arrayidx1, align 476  %7 = load i32, ptr %arrayidx2, align 477  %8 = load i32, ptr %arrayidx3, align 478  %9 = load i32, ptr %arrayidx4, align 479  %add = add i32 %5, 8880  %add9 = add i32 %add, %681  %add11 = add i32 %add9, %782  %add13 = add i32 %add11, %883  %add15 = add i32 %add13, %984  ret i32 %add1585}86 87; Example of one access using the regular local-exec access from the TOC.88define signext i32 @StoreArrays2() {89; SMALL-LOCAL-EXEC-SMALLCM64-LABEL: StoreArrays2:90; SMALL-LOCAL-EXEC-SMALLCM64:       # %bb.0: # %entry91; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    li r4, 292; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    li r3, 193; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    stw r4, mySmallLocalExecTLS2[TL]@le+320-65536(r13)94; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    li r4, 395; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    stw r4, mySmallLocalExecTLS3[TL]@le+324-65536(r13)96; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    ld r4, L..C0(r2) # target-flags(ppc-tprel) @mySmallLocalExecTLSv297; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    add r4, r13, r498; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    stw r3, 0(r4)99; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    li r3, 4100; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    stw r3, 24(r4)101; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    li r4, 88102; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    stw r3, mySmallLocalExecTLS4[TL]@le+328-65536(r13)103; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    li r3, 102104; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    stw r4, mySmallLocalExecTLS5[TL]@le+332-65536(r13)105; SMALL-LOCAL-EXEC-SMALLCM64-NEXT:    blr106;107; SMALL-LOCAL-EXEC-LARGECM64-LABEL: StoreArrays2:108; SMALL-LOCAL-EXEC-LARGECM64:       # %bb.0: # %entry109; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    li r3, 2110; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    li r4, 3111; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    stw r3, mySmallLocalExecTLS2[TL]@le+320-65536(r13)112; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    addis r3, L..C0@u(r2)113; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    ld r3, L..C0@l(r3)114; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    stw r4, mySmallLocalExecTLS3[TL]@le+324-65536(r13)115; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    li r4, 1116; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    add r3, r13, r3117; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    stw r4, 0(r3)118; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    li r4, 4119; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    stw r4, 24(r3)120; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    li r3, 88121; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    stw r4, mySmallLocalExecTLS4[TL]@le+328-65536(r13)122; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    stw r3, mySmallLocalExecTLS5[TL]@le+332-65536(r13)123; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    li r3, 102124; SMALL-LOCAL-EXEC-LARGECM64-NEXT:    blr125entry:126  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @mySmallLocalExecTLSv2)127  store i32 1, ptr %0, align 4128  %arrayidx1 = getelementptr inbounds [9000 x i32], ptr %0, i64 0, i64 6129  store i32 4, ptr %arrayidx1, align 4130  %1 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @mySmallLocalExecTLS2)131  %arrayidx2 = getelementptr inbounds [4000 x i32], ptr %1, i64 0, i64 80132  store i32 2, ptr %arrayidx2, align 4133  %2 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @mySmallLocalExecTLS3)134  %arrayidx3 = getelementptr inbounds [4000 x i32], ptr %2, i64 0, i64 81135  store i32 3, ptr %arrayidx3, align 4136  %3 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @mySmallLocalExecTLS4)137  %arrayidx4 = getelementptr inbounds [4000 x i32], ptr %3, i64 0, i64 82138  store i32 4, ptr %arrayidx4, align 4139  %4 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @mySmallLocalExecTLS5)140  %arrayidx5 = getelementptr inbounds [4000 x i32], ptr %4, i64 0, i64 83141  store i32 88, ptr %arrayidx5, align 4142  %5 = load i32, ptr %0, align 4143  %6 = load i32, ptr %arrayidx1, align 4144  %7 = load i32, ptr %arrayidx2, align 4145  %8 = load i32, ptr %arrayidx3, align 4146  %9 = load i32, ptr %arrayidx4, align 4147  %add = add i32 %5, 88148  %add9 = add i32 %add, %6149  %add11 = add i32 %add9, %7150  %add13 = add i32 %add11, %8151  %add15 = add i32 %add13, %9152  ret i32 %add15153}154 155; DIS:      file format aix5coff64-rs6000156; DIS:      Disassembly of section .text:157; DIS:      0000000000000000 (idx: [[#NFA+3]]) .StoreArrays1:158; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                li 3, 1159; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                li 4, 4160; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                stw 3, 0(13)161; DIS-NEXT: {{0*}}[[#ADDR + 2]]: R_TLS_LE	(idx: [[#NFA+15]]) mySmallLocalExecTLSv1[TL]162; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                li 3, 2163; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                stw 4, 24(13)164; DIS-NEXT: {{0*}}[[#ADDR + 2]]: R_TLS_LE	(idx: [[#NFA+15]]) mySmallLocalExecTLSv1[TL]165; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                stw 4, -460(13)166; DIS-NEXT: {{0*}}[[#ADDR + 2]]: R_TLS_LE	(idx: [[#NFA+21]]) mySmallLocalExecTLS4[TL]167; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                stw 3, -32468(13)168; DIS-NEXT: {{0*}}[[#ADDR + 2]]: R_TLS_LE	(idx: [[#NFA+17]]) mySmallLocalExecTLS2[TL]169; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                li 3, 3170; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                stw 3, -16464(13)171; DIS-NEXT: {{0*}}[[#ADDR + 2]]: R_TLS_LE	(idx: [[#NFA+19]]) mySmallLocalExecTLS3[TL]172; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                li 3, 88173; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                stw 3, 15544(13)174; DIS-NEXT: {{0*}}[[#ADDR + 2]]: R_TLS_LE	(idx: [[#NFA+23]]) mySmallLocalExecTLS5[TL]175; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                li 3, 102176; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                blr177 178; DIS:      0000000000000040 (idx: [[#NFA+5]]) .StoreArrays2:179; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                li 3, 2180; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                li 4, 3181; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                stw 3, -32468(13)182; DIS-NEXT: {{0*}}[[#ADDR + 2]]: R_TLS_LE	(idx: [[#NFA+17]]) mySmallLocalExecTLS2[TL]183; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                addis 3, 2, 0184; DIS-NEXT: {{0*}}[[#ADDR + 2]]: R_TOCU	(idx: [[#NFA+13]]) mySmallLocalExecTLSv2[TE]185; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                ld 3, 0(3)186; DIS-NEXT: {{0*}}[[#ADDR + 2]]: R_TOCL	(idx: [[#NFA+13]]) mySmallLocalExecTLSv2[TE]187; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                stw 4, -16464(13)188; DIS-NEXT: {{0*}}[[#ADDR + 2]]: R_TLS_LE	(idx: [[#NFA+19]]) mySmallLocalExecTLS3[TL]189; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                li 4, 1190; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                add 3, 13, 3191; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                stw 4, 0(3)192; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                li 4, 4193; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                stw 4, 24(3)194; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                li 3, 88195; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                stw 4, -460(13)196; DIS-NEXT: {{0*}}[[#ADDR + 2]]: R_TLS_LE	(idx: [[#NFA+21]]) mySmallLocalExecTLS4[TL]197; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                stw 3, 15544(13)198; DIS-NEXT: {{0*}}[[#ADDR + 2]]: R_TLS_LE	(idx: [[#NFA+23]]) mySmallLocalExecTLS5[TL]199; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                li 3, 102200; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                blr201 202; DIS:      Disassembly of section .data:203; DIS:      0000000000000080 (idx: [[#NFA+7]]) StoreArrays1[DS]:204; DIS-NEXT:       80: 00 00 00 00205; DIS-NEXT: 0000000000000080:  R_POS	(idx: [[#NFA+3]]) .StoreArrays1206; DIS-NEXT:       84: 00 00 00 00207; DIS-NEXT:       88: 00 00 00 00208; DIS-NEXT: 0000000000000088:  R_POS        (idx: [[#NFA+11]]) TOC[TC0]209; DIS-NEXT:       8c: 00 00 00 b0210 211; DIS:      0000000000000098 (idx: [[#NFA+9]]) StoreArrays2[DS]:212; DIS-NEXT:       98: 00 00 00 00213; DIS-NEXT: 0000000000000098:  R_POS	(idx: [[#NFA+5]]) .StoreArrays2214; DIS-NEXT:       9c: 00 00 00 40215; DIS-NEXT:       a0: 00 00 00 00216; DIS-NEXT: 00000000000000a0:  R_POS        (idx: [[#NFA+11]]) TOC[TC0]217; DIS-NEXT:       a4: 00 00 00 b0218 219; DIS:      00000000000000b0 (idx: [[#NFA+13]]) mySmallLocalExecTLSv2[TE]:220; DIS-NEXT:       b0: 00 00 00 00221; DIS-NEXT: 00000000000000b0:  R_TLS_LE     (idx: [[#NFA+25]]) mySmallLocalExecTLSv2[TL]222; DIS-NEXT:       b4: 00 01 79 ec223 224; DIS:      Disassembly of section .tdata:225; DIS:      0000000000000000 (idx: [[#NFA+15]]) mySmallLocalExecTLSv1[TL]:226; DIS:      0000000000007fec (idx: [[#NFA+17]]) mySmallLocalExecTLS2[TL]:227; DIS:      000000000000be6c (idx: [[#NFA+19]]) mySmallLocalExecTLS3[TL]:228; DIS:      000000000000fcec (idx: [[#NFA+21]]) mySmallLocalExecTLS4[TL]:229; DIS:      0000000000013b6c (idx: [[#NFA+23]]) mySmallLocalExecTLS5[TL]:230; DIS:      00000000000179ec (idx: [[#NFA+25]]) mySmallLocalExecTLSv2[TL]:231