brintos

brintos / llvm-project-archived public Read only

0
0
Text · 23.0 KiB · 6c5cb54 Raw
687 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 22; RUN: llc  -verify-machineinstrs -mcpu=pwr7 -ppc-asm-full-reg-names \3; RUN:      -mtriple powerpc64-ibm-aix-xcoff < %s | FileCheck %s \4; RUN:      --check-prefix=SMALL645; RUN: llc  -verify-machineinstrs -mcpu=pwr7 -ppc-asm-full-reg-names \6; RUN:      -mtriple powerpc64-ibm-aix-xcoff --code-model=large < %s \7; RUN:      | FileCheck %s --check-prefix=LARGE648; RUN: llc  -verify-machineinstrs -mcpu=pwr7 -ppc-asm-full-reg-names \9; RUN:      -mtriple powerpc-ibm-aix-xcoff < %s | FileCheck %s \10; RUN:      --check-prefix=SMALL3211; RUN: llc  -verify-machineinstrs -mcpu=pwr7 -ppc-asm-full-reg-names \12; RUN:      -mtriple powerpc-ibm-aix-xcoff --code-model=large < %s \13; RUN:      | FileCheck %s --check-prefix=LARGE3214 15@ThreadLocalVarInit = thread_local(localexec) global float 0x401D333340000000, align 416@VarInit = global float 0x4021666660000000, align 417@IThreadLocalVarUninit = internal thread_local(localexec) global float 0.000000e+00, align 418@IThreadLocalVarInit = internal thread_local(localexec) global float 0x4018CCCCC0000000, align 419@ThreadLocalVarUninit = thread_local(localexec) global float 0.000000e+00, align 420declare nonnull ptr @llvm.threadlocal.address.p0(ptr nonnull) #121 22define void @storeITLUninit(float noundef %x) {23; SMALL64-LABEL: storeITLUninit:24; SMALL64:       # %bb.0: # %entry25; SMALL64-NEXT:    ld r3, L..C0(r2) # target-flags(ppc-tprel) @IThreadLocalVarUninit26; SMALL64-NEXT:    stfsx f1, r13, r327; SMALL64-NEXT:    blr28;29; LARGE64-LABEL: storeITLUninit:30; LARGE64:       # %bb.0: # %entry31; LARGE64-NEXT:    addis r3, L..C0@u(r2)32; LARGE64-NEXT:    ld r3, L..C0@l(r3)33; LARGE64-NEXT:    stfsx f1, r13, r334; LARGE64-NEXT:    blr35;36; SMALL32-LABEL: storeITLUninit:37; SMALL32:       # %bb.0: # %entry38; SMALL32-NEXT:    mflr r039; SMALL32-NEXT:    stwu r1, -32(r1)40; SMALL32-NEXT:    lwz r4, L..C0(r2) # target-flags(ppc-tprel) @IThreadLocalVarUninit41; SMALL32-NEXT:    bla .__get_tpointer[PR]42; SMALL32-NEXT:    stw r0, 40(r1)43; SMALL32-NEXT:    stfsx f1, r3, r444; SMALL32-NEXT:    addi r1, r1, 3245; SMALL32-NEXT:    lwz r0, 8(r1)46; SMALL32-NEXT:    mtlr r047; SMALL32-NEXT:    blr48;49; LARGE32-LABEL: storeITLUninit:50; LARGE32:       # %bb.0: # %entry51; LARGE32-NEXT:    mflr r052; LARGE32-NEXT:    stwu r1, -32(r1)53; LARGE32-NEXT:    stw r0, 40(r1)54; LARGE32-NEXT:    addis r3, L..C0@u(r2)55; LARGE32-NEXT:    lwz r4, L..C0@l(r3)56; LARGE32-NEXT:    bla .__get_tpointer[PR]57; LARGE32-NEXT:    stfsx f1, r3, r458; LARGE32-NEXT:    addi r1, r1, 3259; LARGE32-NEXT:    lwz r0, 8(r1)60; LARGE32-NEXT:    mtlr r061; LARGE32-NEXT:    blr62entry:63  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @IThreadLocalVarUninit)64  store float %x, ptr %0, align 465  ret void66}67 68define void @storeITLInit(float noundef %x) {69; SMALL64-LABEL: storeITLInit:70; SMALL64:       # %bb.0: # %entry71; SMALL64-NEXT:    ld r3, L..C1(r2) # target-flags(ppc-tprel) @IThreadLocalVarInit72; SMALL64-NEXT:    stfsx f1, r13, r373; SMALL64-NEXT:    blr74;75; LARGE64-LABEL: storeITLInit:76; LARGE64:       # %bb.0: # %entry77; LARGE64-NEXT:    addis r3, L..C1@u(r2)78; LARGE64-NEXT:    ld r3, L..C1@l(r3)79; LARGE64-NEXT:    stfsx f1, r13, r380; LARGE64-NEXT:    blr81;82; SMALL32-LABEL: storeITLInit:83; SMALL32:       # %bb.0: # %entry84; SMALL32-NEXT:    mflr r085; SMALL32-NEXT:    stwu r1, -32(r1)86; SMALL32-NEXT:    lwz r4, L..C1(r2) # target-flags(ppc-tprel) @IThreadLocalVarInit87; SMALL32-NEXT:    bla .__get_tpointer[PR]88; SMALL32-NEXT:    stw r0, 40(r1)89; SMALL32-NEXT:    stfsx f1, r3, r490; SMALL32-NEXT:    addi r1, r1, 3291; SMALL32-NEXT:    lwz r0, 8(r1)92; SMALL32-NEXT:    mtlr r093; SMALL32-NEXT:    blr94;95; LARGE32-LABEL: storeITLInit:96; LARGE32:       # %bb.0: # %entry97; LARGE32-NEXT:    mflr r098; LARGE32-NEXT:    stwu r1, -32(r1)99; LARGE32-NEXT:    stw r0, 40(r1)100; LARGE32-NEXT:    addis r3, L..C1@u(r2)101; LARGE32-NEXT:    lwz r4, L..C1@l(r3)102; LARGE32-NEXT:    bla .__get_tpointer[PR]103; LARGE32-NEXT:    stfsx f1, r3, r4104; LARGE32-NEXT:    addi r1, r1, 32105; LARGE32-NEXT:    lwz r0, 8(r1)106; LARGE32-NEXT:    mtlr r0107; LARGE32-NEXT:    blr108entry:109  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @IThreadLocalVarInit)110  store float %x, ptr %0, align 4111  ret void112}113 114define void @storeTLUninit(float noundef %x) {115; SMALL64-LABEL: storeTLUninit:116; SMALL64:       # %bb.0: # %entry117; SMALL64-NEXT:    ld r3, L..C2(r2) # target-flags(ppc-tprel) @ThreadLocalVarUninit118; SMALL64-NEXT:    stfsx f1, r13, r3119; SMALL64-NEXT:    blr120;121; LARGE64-LABEL: storeTLUninit:122; LARGE64:       # %bb.0: # %entry123; LARGE64-NEXT:    addis r3, L..C2@u(r2)124; LARGE64-NEXT:    ld r3, L..C2@l(r3)125; LARGE64-NEXT:    stfsx f1, r13, r3126; LARGE64-NEXT:    blr127;128; SMALL32-LABEL: storeTLUninit:129; SMALL32:       # %bb.0: # %entry130; SMALL32-NEXT:    mflr r0131; SMALL32-NEXT:    stwu r1, -32(r1)132; SMALL32-NEXT:    lwz r4, L..C2(r2) # target-flags(ppc-tprel) @ThreadLocalVarUninit133; SMALL32-NEXT:    bla .__get_tpointer[PR]134; SMALL32-NEXT:    stw r0, 40(r1)135; SMALL32-NEXT:    stfsx f1, r3, r4136; SMALL32-NEXT:    addi r1, r1, 32137; SMALL32-NEXT:    lwz r0, 8(r1)138; SMALL32-NEXT:    mtlr r0139; SMALL32-NEXT:    blr140;141; LARGE32-LABEL: storeTLUninit:142; LARGE32:       # %bb.0: # %entry143; LARGE32-NEXT:    mflr r0144; LARGE32-NEXT:    stwu r1, -32(r1)145; LARGE32-NEXT:    stw r0, 40(r1)146; LARGE32-NEXT:    addis r3, L..C2@u(r2)147; LARGE32-NEXT:    lwz r4, L..C2@l(r3)148; LARGE32-NEXT:    bla .__get_tpointer[PR]149; LARGE32-NEXT:    stfsx f1, r3, r4150; LARGE32-NEXT:    addi r1, r1, 32151; LARGE32-NEXT:    lwz r0, 8(r1)152; LARGE32-NEXT:    mtlr r0153; LARGE32-NEXT:    blr154entry:155  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @ThreadLocalVarUninit)156  store float %x, ptr %0, align 4157  ret void158}159 160define void @storeTLInit(float noundef %x) {161; SMALL64-LABEL: storeTLInit:162; SMALL64:       # %bb.0: # %entry163; SMALL64-NEXT:    ld r3, L..C3(r2) # target-flags(ppc-tprel) @ThreadLocalVarInit164; SMALL64-NEXT:    stfsx f1, r13, r3165; SMALL64-NEXT:    blr166;167; LARGE64-LABEL: storeTLInit:168; LARGE64:       # %bb.0: # %entry169; LARGE64-NEXT:    addis r3, L..C3@u(r2)170; LARGE64-NEXT:    ld r3, L..C3@l(r3)171; LARGE64-NEXT:    stfsx f1, r13, r3172; LARGE64-NEXT:    blr173;174; SMALL32-LABEL: storeTLInit:175; SMALL32:       # %bb.0: # %entry176; SMALL32-NEXT:    mflr r0177; SMALL32-NEXT:    stwu r1, -32(r1)178; SMALL32-NEXT:    lwz r4, L..C3(r2) # target-flags(ppc-tprel) @ThreadLocalVarInit179; SMALL32-NEXT:    bla .__get_tpointer[PR]180; SMALL32-NEXT:    stw r0, 40(r1)181; SMALL32-NEXT:    stfsx f1, r3, r4182; SMALL32-NEXT:    addi r1, r1, 32183; SMALL32-NEXT:    lwz r0, 8(r1)184; SMALL32-NEXT:    mtlr r0185; SMALL32-NEXT:    blr186;187; LARGE32-LABEL: storeTLInit:188; LARGE32:       # %bb.0: # %entry189; LARGE32-NEXT:    mflr r0190; LARGE32-NEXT:    stwu r1, -32(r1)191; LARGE32-NEXT:    stw r0, 40(r1)192; LARGE32-NEXT:    addis r3, L..C3@u(r2)193; LARGE32-NEXT:    lwz r4, L..C3@l(r3)194; LARGE32-NEXT:    bla .__get_tpointer[PR]195; LARGE32-NEXT:    stfsx f1, r3, r4196; LARGE32-NEXT:    addi r1, r1, 32197; LARGE32-NEXT:    lwz r0, 8(r1)198; LARGE32-NEXT:    mtlr r0199; LARGE32-NEXT:    blr200entry:201  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @ThreadLocalVarInit)202  store float %x, ptr %0, align 4203  ret void204}205 206define float @loadITLUninit() {207; SMALL64-LABEL: loadITLUninit:208; SMALL64:       # %bb.0: # %entry209; SMALL64-NEXT:    ld r3, L..C0(r2) # target-flags(ppc-tprel) @IThreadLocalVarUninit210; SMALL64-NEXT:    lfsx f1, r13, r3211; SMALL64-NEXT:    blr212;213; LARGE64-LABEL: loadITLUninit:214; LARGE64:       # %bb.0: # %entry215; LARGE64-NEXT:    addis r3, L..C0@u(r2)216; LARGE64-NEXT:    ld r3, L..C0@l(r3)217; LARGE64-NEXT:    lfsx f1, r13, r3218; LARGE64-NEXT:    blr219;220; SMALL32-LABEL: loadITLUninit:221; SMALL32:       # %bb.0: # %entry222; SMALL32-NEXT:    mflr r0223; SMALL32-NEXT:    stwu r1, -32(r1)224; SMALL32-NEXT:    lwz r4, L..C0(r2) # target-flags(ppc-tprel) @IThreadLocalVarUninit225; SMALL32-NEXT:    stw r0, 40(r1)226; SMALL32-NEXT:    bla .__get_tpointer[PR]227; SMALL32-NEXT:    lfsx f1, r3, r4228; SMALL32-NEXT:    addi r1, r1, 32229; SMALL32-NEXT:    lwz r0, 8(r1)230; SMALL32-NEXT:    mtlr r0231; SMALL32-NEXT:    blr232;233; LARGE32-LABEL: loadITLUninit:234; LARGE32:       # %bb.0: # %entry235; LARGE32-NEXT:    mflr r0236; LARGE32-NEXT:    stwu r1, -32(r1)237; LARGE32-NEXT:    stw r0, 40(r1)238; LARGE32-NEXT:    addis r3, L..C0@u(r2)239; LARGE32-NEXT:    lwz r4, L..C0@l(r3)240; LARGE32-NEXT:    bla .__get_tpointer[PR]241; LARGE32-NEXT:    lfsx f1, r3, r4242; LARGE32-NEXT:    addi r1, r1, 32243; LARGE32-NEXT:    lwz r0, 8(r1)244; LARGE32-NEXT:    mtlr r0245; LARGE32-NEXT:    blr246entry:247  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @IThreadLocalVarUninit)248  %1 = load float, ptr %0, align 4249  ret float %1250}251 252define float @loadITLUninit2() {253; SMALL64-LABEL: loadITLUninit2:254; SMALL64:       # %bb.0: # %entry255; SMALL64-NEXT:    ld r3, L..C0(r2) # target-flags(ppc-tprel) @IThreadLocalVarUninit256; SMALL64-NEXT:    lfsx f0, r13, r3257; SMALL64-NEXT:    ld r3, L..C4(r2) # @VarInit258; SMALL64-NEXT:    lfs f1, 0(r3)259; SMALL64-NEXT:    fadds f1, f0, f1260; SMALL64-NEXT:    blr261;262; LARGE64-LABEL: loadITLUninit2:263; LARGE64:       # %bb.0: # %entry264; LARGE64-NEXT:    addis r3, L..C0@u(r2)265; LARGE64-NEXT:    ld r3, L..C0@l(r3)266; LARGE64-NEXT:    lfsx f0, r13, r3267; LARGE64-NEXT:    addis r3, L..C4@u(r2)268; LARGE64-NEXT:    ld r3, L..C4@l(r3)269; LARGE64-NEXT:    lfs f1, 0(r3)270; LARGE64-NEXT:    fadds f1, f0, f1271; LARGE64-NEXT:    blr272;273; SMALL32-LABEL: loadITLUninit2:274; SMALL32:       # %bb.0: # %entry275; SMALL32-NEXT:    mflr r0276; SMALL32-NEXT:    stwu r1, -32(r1)277; SMALL32-NEXT:    lwz r4, L..C0(r2) # target-flags(ppc-tprel) @IThreadLocalVarUninit278; SMALL32-NEXT:    stw r0, 40(r1)279; SMALL32-NEXT:    bla .__get_tpointer[PR]280; SMALL32-NEXT:    lfsx f0, r3, r4281; SMALL32-NEXT:    lwz r3, L..C4(r2) # @VarInit282; SMALL32-NEXT:    lfs f1, 0(r3)283; SMALL32-NEXT:    fadds f1, f0, f1284; SMALL32-NEXT:    addi r1, r1, 32285; SMALL32-NEXT:    lwz r0, 8(r1)286; SMALL32-NEXT:    mtlr r0287; SMALL32-NEXT:    blr288;289; LARGE32-LABEL: loadITLUninit2:290; LARGE32:       # %bb.0: # %entry291; LARGE32-NEXT:    mflr r0292; LARGE32-NEXT:    stwu r1, -32(r1)293; LARGE32-NEXT:    stw r0, 40(r1)294; LARGE32-NEXT:    addis r3, L..C0@u(r2)295; LARGE32-NEXT:    lwz r4, L..C0@l(r3)296; LARGE32-NEXT:    bla .__get_tpointer[PR]297; LARGE32-NEXT:    lfsx f0, r3, r4298; LARGE32-NEXT:    addis r3, L..C4@u(r2)299; LARGE32-NEXT:    lwz r3, L..C4@l(r3)300; LARGE32-NEXT:    lfs f1, 0(r3)301; LARGE32-NEXT:    fadds f1, f0, f1302; LARGE32-NEXT:    addi r1, r1, 32303; LARGE32-NEXT:    lwz r0, 8(r1)304; LARGE32-NEXT:    mtlr r0305; LARGE32-NEXT:    blr306entry:307  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @IThreadLocalVarUninit)308  %1 = load float, ptr %0, align 4309  %2 = load float, ptr @VarInit, align 4310  %add = fadd float %1, %2311  ret float %add312}313 314define float @loadITLInit() {315; SMALL64-LABEL: loadITLInit:316; SMALL64:       # %bb.0: # %entry317; SMALL64-NEXT:    ld r3, L..C1(r2) # target-flags(ppc-tprel) @IThreadLocalVarInit318; SMALL64-NEXT:    lfsx f1, r13, r3319; SMALL64-NEXT:    blr320;321; LARGE64-LABEL: loadITLInit:322; LARGE64:       # %bb.0: # %entry323; LARGE64-NEXT:    addis r3, L..C1@u(r2)324; LARGE64-NEXT:    ld r3, L..C1@l(r3)325; LARGE64-NEXT:    lfsx f1, r13, r3326; LARGE64-NEXT:    blr327;328; SMALL32-LABEL: loadITLInit:329; SMALL32:       # %bb.0: # %entry330; SMALL32-NEXT:    mflr r0331; SMALL32-NEXT:    stwu r1, -32(r1)332; SMALL32-NEXT:    lwz r4, L..C1(r2) # target-flags(ppc-tprel) @IThreadLocalVarInit333; SMALL32-NEXT:    stw r0, 40(r1)334; SMALL32-NEXT:    bla .__get_tpointer[PR]335; SMALL32-NEXT:    lfsx f1, r3, r4336; SMALL32-NEXT:    addi r1, r1, 32337; SMALL32-NEXT:    lwz r0, 8(r1)338; SMALL32-NEXT:    mtlr r0339; SMALL32-NEXT:    blr340;341; LARGE32-LABEL: loadITLInit:342; LARGE32:       # %bb.0: # %entry343; LARGE32-NEXT:    mflr r0344; LARGE32-NEXT:    stwu r1, -32(r1)345; LARGE32-NEXT:    stw r0, 40(r1)346; LARGE32-NEXT:    addis r3, L..C1@u(r2)347; LARGE32-NEXT:    lwz r4, L..C1@l(r3)348; LARGE32-NEXT:    bla .__get_tpointer[PR]349; LARGE32-NEXT:    lfsx f1, r3, r4350; LARGE32-NEXT:    addi r1, r1, 32351; LARGE32-NEXT:    lwz r0, 8(r1)352; LARGE32-NEXT:    mtlr r0353; LARGE32-NEXT:    blr354entry:355  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @IThreadLocalVarInit)356  %1 = load float, ptr %0, align 4357  ret float %1358}359 360define float @loadITLInit2() {361; SMALL64-LABEL: loadITLInit2:362; SMALL64:       # %bb.0: # %entry363; SMALL64-NEXT:    ld r3, L..C1(r2) # target-flags(ppc-tprel) @IThreadLocalVarInit364; SMALL64-NEXT:    lfsx f0, r13, r3365; SMALL64-NEXT:    ld r3, L..C4(r2) # @VarInit366; SMALL64-NEXT:    lfs f1, 0(r3)367; SMALL64-NEXT:    fadds f1, f0, f1368; SMALL64-NEXT:    blr369;370; LARGE64-LABEL: loadITLInit2:371; LARGE64:       # %bb.0: # %entry372; LARGE64-NEXT:    addis r3, L..C1@u(r2)373; LARGE64-NEXT:    ld r3, L..C1@l(r3)374; LARGE64-NEXT:    lfsx f0, r13, r3375; LARGE64-NEXT:    addis r3, L..C4@u(r2)376; LARGE64-NEXT:    ld r3, L..C4@l(r3)377; LARGE64-NEXT:    lfs f1, 0(r3)378; LARGE64-NEXT:    fadds f1, f0, f1379; LARGE64-NEXT:    blr380;381; SMALL32-LABEL: loadITLInit2:382; SMALL32:       # %bb.0: # %entry383; SMALL32-NEXT:    mflr r0384; SMALL32-NEXT:    stwu r1, -32(r1)385; SMALL32-NEXT:    lwz r4, L..C1(r2) # target-flags(ppc-tprel) @IThreadLocalVarInit386; SMALL32-NEXT:    stw r0, 40(r1)387; SMALL32-NEXT:    bla .__get_tpointer[PR]388; SMALL32-NEXT:    lfsx f0, r3, r4389; SMALL32-NEXT:    lwz r3, L..C4(r2) # @VarInit390; SMALL32-NEXT:    lfs f1, 0(r3)391; SMALL32-NEXT:    fadds f1, f0, f1392; SMALL32-NEXT:    addi r1, r1, 32393; SMALL32-NEXT:    lwz r0, 8(r1)394; SMALL32-NEXT:    mtlr r0395; SMALL32-NEXT:    blr396;397; LARGE32-LABEL: loadITLInit2:398; LARGE32:       # %bb.0: # %entry399; LARGE32-NEXT:    mflr r0400; LARGE32-NEXT:    stwu r1, -32(r1)401; LARGE32-NEXT:    stw r0, 40(r1)402; LARGE32-NEXT:    addis r3, L..C1@u(r2)403; LARGE32-NEXT:    lwz r4, L..C1@l(r3)404; LARGE32-NEXT:    bla .__get_tpointer[PR]405; LARGE32-NEXT:    lfsx f0, r3, r4406; LARGE32-NEXT:    addis r3, L..C4@u(r2)407; LARGE32-NEXT:    lwz r3, L..C4@l(r3)408; LARGE32-NEXT:    lfs f1, 0(r3)409; LARGE32-NEXT:    fadds f1, f0, f1410; LARGE32-NEXT:    addi r1, r1, 32411; LARGE32-NEXT:    lwz r0, 8(r1)412; LARGE32-NEXT:    mtlr r0413; LARGE32-NEXT:    blr414entry:415  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @IThreadLocalVarInit)416  %1 = load float, ptr %0, align 4417  %2 = load float, ptr @VarInit, align 4418  %add = fadd float %1, %2419  ret float %add420}421 422define float @loadTLUninit() {423; SMALL64-LABEL: loadTLUninit:424; SMALL64:       # %bb.0: # %entry425; SMALL64-NEXT:    ld r3, L..C2(r2) # target-flags(ppc-tprel) @ThreadLocalVarUninit426; SMALL64-NEXT:    lfsx f1, r13, r3427; SMALL64-NEXT:    blr428;429; LARGE64-LABEL: loadTLUninit:430; LARGE64:       # %bb.0: # %entry431; LARGE64-NEXT:    addis r3, L..C2@u(r2)432; LARGE64-NEXT:    ld r3, L..C2@l(r3)433; LARGE64-NEXT:    lfsx f1, r13, r3434; LARGE64-NEXT:    blr435;436; SMALL32-LABEL: loadTLUninit:437; SMALL32:       # %bb.0: # %entry438; SMALL32-NEXT:    mflr r0439; SMALL32-NEXT:    stwu r1, -32(r1)440; SMALL32-NEXT:    lwz r4, L..C2(r2) # target-flags(ppc-tprel) @ThreadLocalVarUninit441; SMALL32-NEXT:    stw r0, 40(r1)442; SMALL32-NEXT:    bla .__get_tpointer[PR]443; SMALL32-NEXT:    lfsx f1, r3, r4444; SMALL32-NEXT:    addi r1, r1, 32445; SMALL32-NEXT:    lwz r0, 8(r1)446; SMALL32-NEXT:    mtlr r0447; SMALL32-NEXT:    blr448;449; LARGE32-LABEL: loadTLUninit:450; LARGE32:       # %bb.0: # %entry451; LARGE32-NEXT:    mflr r0452; LARGE32-NEXT:    stwu r1, -32(r1)453; LARGE32-NEXT:    stw r0, 40(r1)454; LARGE32-NEXT:    addis r3, L..C2@u(r2)455; LARGE32-NEXT:    lwz r4, L..C2@l(r3)456; LARGE32-NEXT:    bla .__get_tpointer[PR]457; LARGE32-NEXT:    lfsx f1, r3, r4458; LARGE32-NEXT:    addi r1, r1, 32459; LARGE32-NEXT:    lwz r0, 8(r1)460; LARGE32-NEXT:    mtlr r0461; LARGE32-NEXT:    blr462entry:463  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @ThreadLocalVarUninit)464  %1 = load float, ptr %0, align 4465  ret float %1466}467 468define float @loadTLUninit2() {469; SMALL64-LABEL: loadTLUninit2:470; SMALL64:       # %bb.0: # %entry471; SMALL64-NEXT:    ld r3, L..C2(r2) # target-flags(ppc-tprel) @ThreadLocalVarUninit472; SMALL64-NEXT:    lfsx f0, r13, r3473; SMALL64-NEXT:    ld r3, L..C4(r2) # @VarInit474; SMALL64-NEXT:    lfs f1, 0(r3)475; SMALL64-NEXT:    fadds f1, f0, f1476; SMALL64-NEXT:    blr477;478; LARGE64-LABEL: loadTLUninit2:479; LARGE64:       # %bb.0: # %entry480; LARGE64-NEXT:    addis r3, L..C2@u(r2)481; LARGE64-NEXT:    ld r3, L..C2@l(r3)482; LARGE64-NEXT:    lfsx f0, r13, r3483; LARGE64-NEXT:    addis r3, L..C4@u(r2)484; LARGE64-NEXT:    ld r3, L..C4@l(r3)485; LARGE64-NEXT:    lfs f1, 0(r3)486; LARGE64-NEXT:    fadds f1, f0, f1487; LARGE64-NEXT:    blr488;489; SMALL32-LABEL: loadTLUninit2:490; SMALL32:       # %bb.0: # %entry491; SMALL32-NEXT:    mflr r0492; SMALL32-NEXT:    stwu r1, -32(r1)493; SMALL32-NEXT:    lwz r4, L..C2(r2) # target-flags(ppc-tprel) @ThreadLocalVarUninit494; SMALL32-NEXT:    stw r0, 40(r1)495; SMALL32-NEXT:    bla .__get_tpointer[PR]496; SMALL32-NEXT:    lfsx f0, r3, r4497; SMALL32-NEXT:    lwz r3, L..C4(r2) # @VarInit498; SMALL32-NEXT:    lfs f1, 0(r3)499; SMALL32-NEXT:    fadds f1, f0, f1500; SMALL32-NEXT:    addi r1, r1, 32501; SMALL32-NEXT:    lwz r0, 8(r1)502; SMALL32-NEXT:    mtlr r0503; SMALL32-NEXT:    blr504;505; LARGE32-LABEL: loadTLUninit2:506; LARGE32:       # %bb.0: # %entry507; LARGE32-NEXT:    mflr r0508; LARGE32-NEXT:    stwu r1, -32(r1)509; LARGE32-NEXT:    stw r0, 40(r1)510; LARGE32-NEXT:    addis r3, L..C2@u(r2)511; LARGE32-NEXT:    lwz r4, L..C2@l(r3)512; LARGE32-NEXT:    bla .__get_tpointer[PR]513; LARGE32-NEXT:    lfsx f0, r3, r4514; LARGE32-NEXT:    addis r3, L..C4@u(r2)515; LARGE32-NEXT:    lwz r3, L..C4@l(r3)516; LARGE32-NEXT:    lfs f1, 0(r3)517; LARGE32-NEXT:    fadds f1, f0, f1518; LARGE32-NEXT:    addi r1, r1, 32519; LARGE32-NEXT:    lwz r0, 8(r1)520; LARGE32-NEXT:    mtlr r0521; LARGE32-NEXT:    blr522entry:523  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @ThreadLocalVarUninit)524  %1 = load float, ptr %0, align 4525  %2 = load float, ptr @VarInit, align 4526  %add = fadd float %1, %2527  ret float %add528}529 530define float @loadTLInit() {531; SMALL64-LABEL: loadTLInit:532; SMALL64:       # %bb.0: # %entry533; SMALL64-NEXT:    ld r3, L..C3(r2) # target-flags(ppc-tprel) @ThreadLocalVarInit534; SMALL64-NEXT:    lfsx f1, r13, r3535; SMALL64-NEXT:    blr536;537; LARGE64-LABEL: loadTLInit:538; LARGE64:       # %bb.0: # %entry539; LARGE64-NEXT:    addis r3, L..C3@u(r2)540; LARGE64-NEXT:    ld r3, L..C3@l(r3)541; LARGE64-NEXT:    lfsx f1, r13, r3542; LARGE64-NEXT:    blr543;544; SMALL32-LABEL: loadTLInit:545; SMALL32:       # %bb.0: # %entry546; SMALL32-NEXT:    mflr r0547; SMALL32-NEXT:    stwu r1, -32(r1)548; SMALL32-NEXT:    lwz r4, L..C3(r2) # target-flags(ppc-tprel) @ThreadLocalVarInit549; SMALL32-NEXT:    stw r0, 40(r1)550; SMALL32-NEXT:    bla .__get_tpointer[PR]551; SMALL32-NEXT:    lfsx f1, r3, r4552; SMALL32-NEXT:    addi r1, r1, 32553; SMALL32-NEXT:    lwz r0, 8(r1)554; SMALL32-NEXT:    mtlr r0555; SMALL32-NEXT:    blr556;557; LARGE32-LABEL: loadTLInit:558; LARGE32:       # %bb.0: # %entry559; LARGE32-NEXT:    mflr r0560; LARGE32-NEXT:    stwu r1, -32(r1)561; LARGE32-NEXT:    stw r0, 40(r1)562; LARGE32-NEXT:    addis r3, L..C3@u(r2)563; LARGE32-NEXT:    lwz r4, L..C3@l(r3)564; LARGE32-NEXT:    bla .__get_tpointer[PR]565; LARGE32-NEXT:    lfsx f1, r3, r4566; LARGE32-NEXT:    addi r1, r1, 32567; LARGE32-NEXT:    lwz r0, 8(r1)568; LARGE32-NEXT:    mtlr r0569; LARGE32-NEXT:    blr570entry:571  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @ThreadLocalVarInit)572  %1 = load float, ptr %0, align 4573  ret float %1574}575 576define float @loadTLInit2() {577; SMALL64-LABEL: loadTLInit2:578; SMALL64:       # %bb.0: # %entry579; SMALL64-NEXT:    ld r3, L..C3(r2) # target-flags(ppc-tprel) @ThreadLocalVarInit580; SMALL64-NEXT:    lfsx f0, r13, r3581; SMALL64-NEXT:    ld r3, L..C4(r2) # @VarInit582; SMALL64-NEXT:    lfs f1, 0(r3)583; SMALL64-NEXT:    fadds f1, f0, f1584; SMALL64-NEXT:    blr585;586; LARGE64-LABEL: loadTLInit2:587; LARGE64:       # %bb.0: # %entry588; LARGE64-NEXT:    addis r3, L..C3@u(r2)589; LARGE64-NEXT:    ld r3, L..C3@l(r3)590; LARGE64-NEXT:    lfsx f0, r13, r3591; LARGE64-NEXT:    addis r3, L..C4@u(r2)592; LARGE64-NEXT:    ld r3, L..C4@l(r3)593; LARGE64-NEXT:    lfs f1, 0(r3)594; LARGE64-NEXT:    fadds f1, f0, f1595; LARGE64-NEXT:    blr596;597; SMALL32-LABEL: loadTLInit2:598; SMALL32:       # %bb.0: # %entry599; SMALL32-NEXT:    mflr r0600; SMALL32-NEXT:    stwu r1, -32(r1)601; SMALL32-NEXT:    lwz r4, L..C3(r2) # target-flags(ppc-tprel) @ThreadLocalVarInit602; SMALL32-NEXT:    stw r0, 40(r1)603; SMALL32-NEXT:    bla .__get_tpointer[PR]604; SMALL32-NEXT:    lfsx f0, r3, r4605; SMALL32-NEXT:    lwz r3, L..C4(r2) # @VarInit606; SMALL32-NEXT:    lfs f1, 0(r3)607; SMALL32-NEXT:    fadds f1, f0, f1608; SMALL32-NEXT:    addi r1, r1, 32609; SMALL32-NEXT:    lwz r0, 8(r1)610; SMALL32-NEXT:    mtlr r0611; SMALL32-NEXT:    blr612;613; LARGE32-LABEL: loadTLInit2:614; LARGE32:       # %bb.0: # %entry615; LARGE32-NEXT:    mflr r0616; LARGE32-NEXT:    stwu r1, -32(r1)617; LARGE32-NEXT:    stw r0, 40(r1)618; LARGE32-NEXT:    addis r3, L..C3@u(r2)619; LARGE32-NEXT:    lwz r4, L..C3@l(r3)620; LARGE32-NEXT:    bla .__get_tpointer[PR]621; LARGE32-NEXT:    lfsx f0, r3, r4622; LARGE32-NEXT:    addis r3, L..C4@u(r2)623; LARGE32-NEXT:    lwz r3, L..C4@l(r3)624; LARGE32-NEXT:    lfs f1, 0(r3)625; LARGE32-NEXT:    fadds f1, f0, f1626; LARGE32-NEXT:    addi r1, r1, 32627; LARGE32-NEXT:    lwz r0, 8(r1)628; LARGE32-NEXT:    mtlr r0629; LARGE32-NEXT:    blr630entry:631  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @ThreadLocalVarInit)632  %1 = load float, ptr %0, align 4633  %2 = load float, ptr @VarInit, align 4634  %add = fadd float %1, %2635  ret float %add636}637 638; TOC Entry Checks.639 640; SMALL64-LABEL: .toc641; SMALL64-LABEL: L..C0:642; SMALL64-NEXT: .tc IThreadLocalVarUninit[TC],IThreadLocalVarUninit[UL]@le643; SMALL64-LABEL: L..C1:644; SMALL64-NEXT: .tc IThreadLocalVarInit[TC],IThreadLocalVarInit[TL]@le645; SMALL64-LABEL: L..C2:646; SMALL64-NEXT: .tc ThreadLocalVarUninit[TC],ThreadLocalVarUninit[TL]@le647; SMALL64-LABEL: L..C3:648; SMALL64-NEXT: .tc ThreadLocalVarInit[TC],ThreadLocalVarInit[TL]@le649; SMALL64-LABEL: L..C4:650; SMALL64-NEXT: .tc VarInit[TC],VarInit[RW]651 652; LARGE64-LABEL: .toc653; LARGE64-LABEL: L..C0:654; LARGE64-NEXT: .tc IThreadLocalVarUninit[TE],IThreadLocalVarUninit[UL]@le655; LARGE64-LABEL: L..C1:656; LARGE64-NEXT: .tc IThreadLocalVarInit[TE],IThreadLocalVarInit[TL]@le657; LARGE64-LABEL: L..C2:658; LARGE64-NEXT: .tc ThreadLocalVarUninit[TE],ThreadLocalVarUninit[TL]@le659; LARGE64-LABEL: L..C3:660; LARGE64-NEXT: .tc ThreadLocalVarInit[TE],ThreadLocalVarInit[TL]@le661; LARGE64-LABEL: L..C4:662; LARGE64-NEXT: .tc VarInit[TE],VarInit[RW]663 664; SMALL32-LABEL: .toc665; SMALL32-LABEL: L..C0:666; SMALL32-NEXT: .tc IThreadLocalVarUninit[TC],IThreadLocalVarUninit[UL]@le667; SMALL32-LABEL: L..C1:668; SMALL32-NEXT: .tc IThreadLocalVarInit[TC],IThreadLocalVarInit[TL]@le669; SMALL32-LABEL: L..C2:670; SMALL32-NEXT: .tc ThreadLocalVarUninit[TC],ThreadLocalVarUninit[TL]@le671; SMALL32-LABEL: L..C3:672; SMALL32-NEXT: .tc ThreadLocalVarInit[TC],ThreadLocalVarInit[TL]@le673; SMALL32-LABEL: L..C4:674; SMALL32-NEXT: .tc VarInit[TC],VarInit[RW]675 676; LARGE32-LABEL: .toc677; LARGE32-LABEL: L..C0:678; LARGE32-NEXT: .tc IThreadLocalVarUninit[TE],IThreadLocalVarUninit[UL]@le679; LARGE32-LABEL: L..C1:680; LARGE32-NEXT: .tc IThreadLocalVarInit[TE],IThreadLocalVarInit[TL]@le681; LARGE32-LABEL: L..C2:682; LARGE32-NEXT: .tc ThreadLocalVarUninit[TE],ThreadLocalVarUninit[TL]@le683; LARGE32-LABEL: L..C3:684; LARGE32-NEXT: .tc ThreadLocalVarInit[TE],ThreadLocalVarInit[TL]@le685; LARGE32-LABEL: L..C4:686; LARGE32-NEXT: .tc VarInit[TE],VarInit[RW]687