brintos

brintos / llvm-project-archived public Read only

0
0
Text · 23.3 KiB · 9a147e6 Raw
703 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 i32 1, align 416@VarInit = global i32 87, align 417@IThreadLocalVarUninit = internal thread_local(localexec) global i32 0, align 418@IThreadLocalVarInit = internal thread_local(localexec) global i32 1, align 419@ThreadLocalVarUninit = thread_local(localexec) global i32 0, align 420declare nonnull ptr @llvm.threadlocal.address.p0(ptr nonnull) #121 22define void @storeITLUninit(i32 noundef signext %x) {23; SMALL64-LABEL: storeITLUninit:24; SMALL64:       # %bb.0: # %entry25; SMALL64-NEXT:    ld r4, L..C0(r2) # target-flags(ppc-tprel) @IThreadLocalVarUninit26; SMALL64-NEXT:    stwx r3, r13, r427; SMALL64-NEXT:    blr28;29; LARGE64-LABEL: storeITLUninit:30; LARGE64:       # %bb.0: # %entry31; LARGE64-NEXT:    addis r4, L..C0@u(r2)32; LARGE64-NEXT:    ld r4, L..C0@l(r4)33; LARGE64-NEXT:    stwx r3, r13, r434; 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 r5, L..C0(r2) # target-flags(ppc-tprel) @IThreadLocalVarUninit41; SMALL32-NEXT:    mr r4, r342; SMALL32-NEXT:    bla .__get_tpointer[PR]43; SMALL32-NEXT:    stw r0, 40(r1)44; SMALL32-NEXT:    stwx r4, r3, r545; SMALL32-NEXT:    addi r1, r1, 3246; SMALL32-NEXT:    lwz r0, 8(r1)47; SMALL32-NEXT:    mtlr r048; SMALL32-NEXT:    blr49;50; LARGE32-LABEL: storeITLUninit:51; LARGE32:       # %bb.0: # %entry52; LARGE32-NEXT:    mflr r053; LARGE32-NEXT:    stwu r1, -32(r1)54; LARGE32-NEXT:    stw r0, 40(r1)55; LARGE32-NEXT:    mr r4, r356; LARGE32-NEXT:    addis r3, L..C0@u(r2)57; LARGE32-NEXT:    lwz r5, L..C0@l(r3)58; LARGE32-NEXT:    bla .__get_tpointer[PR]59; LARGE32-NEXT:    stwx r4, r3, r560; LARGE32-NEXT:    addi r1, r1, 3261; LARGE32-NEXT:    lwz r0, 8(r1)62; LARGE32-NEXT:    mtlr r063; LARGE32-NEXT:    blr64entry:65  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @IThreadLocalVarUninit)66  store i32 %x, ptr %0, align 467  ret void68}69 70define void @storeITLInit(i32 noundef signext %x) {71; SMALL64-LABEL: storeITLInit:72; SMALL64:       # %bb.0: # %entry73; SMALL64-NEXT:    ld r4, L..C1(r2) # target-flags(ppc-tprel) @IThreadLocalVarInit74; SMALL64-NEXT:    stwx r3, r13, r475; SMALL64-NEXT:    blr76;77; LARGE64-LABEL: storeITLInit:78; LARGE64:       # %bb.0: # %entry79; LARGE64-NEXT:    addis r4, L..C1@u(r2)80; LARGE64-NEXT:    ld r4, L..C1@l(r4)81; LARGE64-NEXT:    stwx r3, r13, r482; LARGE64-NEXT:    blr83;84; SMALL32-LABEL: storeITLInit:85; SMALL32:       # %bb.0: # %entry86; SMALL32-NEXT:    mflr r087; SMALL32-NEXT:    stwu r1, -32(r1)88; SMALL32-NEXT:    lwz r5, L..C1(r2) # target-flags(ppc-tprel) @IThreadLocalVarInit89; SMALL32-NEXT:    mr r4, r390; SMALL32-NEXT:    bla .__get_tpointer[PR]91; SMALL32-NEXT:    stw r0, 40(r1)92; SMALL32-NEXT:    stwx r4, r3, r593; SMALL32-NEXT:    addi r1, r1, 3294; SMALL32-NEXT:    lwz r0, 8(r1)95; SMALL32-NEXT:    mtlr r096; SMALL32-NEXT:    blr97;98; LARGE32-LABEL: storeITLInit:99; LARGE32:       # %bb.0: # %entry100; LARGE32-NEXT:    mflr r0101; LARGE32-NEXT:    stwu r1, -32(r1)102; LARGE32-NEXT:    stw r0, 40(r1)103; LARGE32-NEXT:    mr r4, r3104; LARGE32-NEXT:    addis r3, L..C1@u(r2)105; LARGE32-NEXT:    lwz r5, L..C1@l(r3)106; LARGE32-NEXT:    bla .__get_tpointer[PR]107; LARGE32-NEXT:    stwx r4, r3, r5108; LARGE32-NEXT:    addi r1, r1, 32109; LARGE32-NEXT:    lwz r0, 8(r1)110; LARGE32-NEXT:    mtlr r0111; LARGE32-NEXT:    blr112entry:113  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @IThreadLocalVarInit)114  store i32 %x, ptr %0, align 4115  ret void116}117 118define void @storeTLUninit(i32 noundef signext %x) {119; SMALL64-LABEL: storeTLUninit:120; SMALL64:       # %bb.0: # %entry121; SMALL64-NEXT:    ld r4, L..C2(r2) # target-flags(ppc-tprel) @ThreadLocalVarUninit122; SMALL64-NEXT:    stwx r3, r13, r4123; SMALL64-NEXT:    blr124;125; LARGE64-LABEL: storeTLUninit:126; LARGE64:       # %bb.0: # %entry127; LARGE64-NEXT:    addis r4, L..C2@u(r2)128; LARGE64-NEXT:    ld r4, L..C2@l(r4)129; LARGE64-NEXT:    stwx r3, r13, r4130; LARGE64-NEXT:    blr131;132; SMALL32-LABEL: storeTLUninit:133; SMALL32:       # %bb.0: # %entry134; SMALL32-NEXT:    mflr r0135; SMALL32-NEXT:    stwu r1, -32(r1)136; SMALL32-NEXT:    lwz r5, L..C2(r2) # target-flags(ppc-tprel) @ThreadLocalVarUninit137; SMALL32-NEXT:    mr r4, r3138; SMALL32-NEXT:    bla .__get_tpointer[PR]139; SMALL32-NEXT:    stw r0, 40(r1)140; SMALL32-NEXT:    stwx r4, r3, r5141; SMALL32-NEXT:    addi r1, r1, 32142; SMALL32-NEXT:    lwz r0, 8(r1)143; SMALL32-NEXT:    mtlr r0144; SMALL32-NEXT:    blr145;146; LARGE32-LABEL: storeTLUninit:147; LARGE32:       # %bb.0: # %entry148; LARGE32-NEXT:    mflr r0149; LARGE32-NEXT:    stwu r1, -32(r1)150; LARGE32-NEXT:    stw r0, 40(r1)151; LARGE32-NEXT:    mr r4, r3152; LARGE32-NEXT:    addis r3, L..C2@u(r2)153; LARGE32-NEXT:    lwz r5, L..C2@l(r3)154; LARGE32-NEXT:    bla .__get_tpointer[PR]155; LARGE32-NEXT:    stwx r4, r3, r5156; LARGE32-NEXT:    addi r1, r1, 32157; LARGE32-NEXT:    lwz r0, 8(r1)158; LARGE32-NEXT:    mtlr r0159; LARGE32-NEXT:    blr160entry:161  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @ThreadLocalVarUninit)162  store i32 %x, ptr %0, align 4163  ret void164}165 166define void @storeTLInit(i32 noundef signext %x) {167; SMALL64-LABEL: storeTLInit:168; SMALL64:       # %bb.0: # %entry169; SMALL64-NEXT:    ld r4, L..C3(r2) # target-flags(ppc-tprel) @ThreadLocalVarInit170; SMALL64-NEXT:    stwx r3, r13, r4171; SMALL64-NEXT:    blr172;173; LARGE64-LABEL: storeTLInit:174; LARGE64:       # %bb.0: # %entry175; LARGE64-NEXT:    addis r4, L..C3@u(r2)176; LARGE64-NEXT:    ld r4, L..C3@l(r4)177; LARGE64-NEXT:    stwx r3, r13, r4178; LARGE64-NEXT:    blr179;180; SMALL32-LABEL: storeTLInit:181; SMALL32:       # %bb.0: # %entry182; SMALL32-NEXT:    mflr r0183; SMALL32-NEXT:    stwu r1, -32(r1)184; SMALL32-NEXT:    lwz r5, L..C3(r2) # target-flags(ppc-tprel) @ThreadLocalVarInit185; SMALL32-NEXT:    mr r4, r3186; SMALL32-NEXT:    bla .__get_tpointer[PR]187; SMALL32-NEXT:    stw r0, 40(r1)188; SMALL32-NEXT:    stwx r4, r3, r5189; SMALL32-NEXT:    addi r1, r1, 32190; SMALL32-NEXT:    lwz r0, 8(r1)191; SMALL32-NEXT:    mtlr r0192; SMALL32-NEXT:    blr193;194; LARGE32-LABEL: storeTLInit:195; LARGE32:       # %bb.0: # %entry196; LARGE32-NEXT:    mflr r0197; LARGE32-NEXT:    stwu r1, -32(r1)198; LARGE32-NEXT:    stw r0, 40(r1)199; LARGE32-NEXT:    mr r4, r3200; LARGE32-NEXT:    addis r3, L..C3@u(r2)201; LARGE32-NEXT:    lwz r5, L..C3@l(r3)202; LARGE32-NEXT:    bla .__get_tpointer[PR]203; LARGE32-NEXT:    stwx r4, r3, r5204; LARGE32-NEXT:    addi r1, r1, 32205; LARGE32-NEXT:    lwz r0, 8(r1)206; LARGE32-NEXT:    mtlr r0207; LARGE32-NEXT:    blr208entry:209  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @ThreadLocalVarInit)210  store i32 %x, ptr %0, align 4211  ret void212}213 214define signext i32 @loadITLUninit() {215; SMALL64-LABEL: loadITLUninit:216; SMALL64:       # %bb.0: # %entry217; SMALL64-NEXT:    ld r3, L..C0(r2) # target-flags(ppc-tprel) @IThreadLocalVarUninit218; SMALL64-NEXT:    lwax r3, r13, r3219; SMALL64-NEXT:    blr220;221; LARGE64-LABEL: loadITLUninit:222; LARGE64:       # %bb.0: # %entry223; LARGE64-NEXT:    addis r3, L..C0@u(r2)224; LARGE64-NEXT:    ld r3, L..C0@l(r3)225; LARGE64-NEXT:    lwax r3, r13, r3226; LARGE64-NEXT:    blr227;228; SMALL32-LABEL: loadITLUninit:229; SMALL32:       # %bb.0: # %entry230; SMALL32-NEXT:    mflr r0231; SMALL32-NEXT:    stwu r1, -32(r1)232; SMALL32-NEXT:    lwz r4, L..C0(r2) # target-flags(ppc-tprel) @IThreadLocalVarUninit233; SMALL32-NEXT:    stw r0, 40(r1)234; SMALL32-NEXT:    bla .__get_tpointer[PR]235; SMALL32-NEXT:    lwzx r3, r3, r4236; SMALL32-NEXT:    addi r1, r1, 32237; SMALL32-NEXT:    lwz r0, 8(r1)238; SMALL32-NEXT:    mtlr r0239; SMALL32-NEXT:    blr240;241; LARGE32-LABEL: loadITLUninit:242; LARGE32:       # %bb.0: # %entry243; LARGE32-NEXT:    mflr r0244; LARGE32-NEXT:    stwu r1, -32(r1)245; LARGE32-NEXT:    stw r0, 40(r1)246; LARGE32-NEXT:    addis r3, L..C0@u(r2)247; LARGE32-NEXT:    lwz r4, L..C0@l(r3)248; LARGE32-NEXT:    bla .__get_tpointer[PR]249; LARGE32-NEXT:    lwzx r3, r3, r4250; LARGE32-NEXT:    addi r1, r1, 32251; LARGE32-NEXT:    lwz r0, 8(r1)252; LARGE32-NEXT:    mtlr r0253; LARGE32-NEXT:    blr254entry:255  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @IThreadLocalVarUninit)256  %1 = load i32, ptr %0, align 4257  ret i32 %1258}259 260define signext i32 @loadITLUninit2() {261; SMALL64-LABEL: loadITLUninit2:262; SMALL64:       # %bb.0: # %entry263; SMALL64-NEXT:    ld r3, L..C0(r2) # target-flags(ppc-tprel) @IThreadLocalVarUninit264; SMALL64-NEXT:    ld r4, L..C4(r2) # @VarInit265; SMALL64-NEXT:    lwzx r3, r13, r3266; SMALL64-NEXT:    lwz r4, 0(r4)267; SMALL64-NEXT:    add r3, r4, r3268; SMALL64-NEXT:    extsw r3, r3269; SMALL64-NEXT:    blr270;271; LARGE64-LABEL: loadITLUninit2:272; LARGE64:       # %bb.0: # %entry273; LARGE64-NEXT:    addis r3, L..C0@u(r2)274; LARGE64-NEXT:    addis r4, L..C4@u(r2)275; LARGE64-NEXT:    ld r3, L..C0@l(r3)276; LARGE64-NEXT:    ld r4, L..C4@l(r4)277; LARGE64-NEXT:    lwzx r3, r13, r3278; LARGE64-NEXT:    lwz r4, 0(r4)279; LARGE64-NEXT:    add r3, r4, r3280; LARGE64-NEXT:    extsw r3, r3281; LARGE64-NEXT:    blr282;283; SMALL32-LABEL: loadITLUninit2:284; SMALL32:       # %bb.0: # %entry285; SMALL32-NEXT:    mflr r0286; SMALL32-NEXT:    stwu r1, -32(r1)287; SMALL32-NEXT:    lwz r4, L..C0(r2) # target-flags(ppc-tprel) @IThreadLocalVarUninit288; SMALL32-NEXT:    stw r0, 40(r1)289; SMALL32-NEXT:    bla .__get_tpointer[PR]290; SMALL32-NEXT:    lwzx r3, r3, r4291; SMALL32-NEXT:    lwz r4, L..C4(r2) # @VarInit292; SMALL32-NEXT:    lwz r4, 0(r4)293; SMALL32-NEXT:    add r3, r4, r3294; SMALL32-NEXT:    addi r1, r1, 32295; SMALL32-NEXT:    lwz r0, 8(r1)296; SMALL32-NEXT:    mtlr r0297; SMALL32-NEXT:    blr298;299; LARGE32-LABEL: loadITLUninit2:300; LARGE32:       # %bb.0: # %entry301; LARGE32-NEXT:    mflr r0302; LARGE32-NEXT:    stwu r1, -32(r1)303; LARGE32-NEXT:    stw r0, 40(r1)304; LARGE32-NEXT:    addis r3, L..C0@u(r2)305; LARGE32-NEXT:    lwz r4, L..C0@l(r3)306; LARGE32-NEXT:    bla .__get_tpointer[PR]307; LARGE32-NEXT:    lwzx r3, r3, r4308; LARGE32-NEXT:    addis r4, L..C4@u(r2)309; LARGE32-NEXT:    lwz r4, L..C4@l(r4)310; LARGE32-NEXT:    lwz r4, 0(r4)311; LARGE32-NEXT:    add r3, r4, r3312; LARGE32-NEXT:    addi r1, r1, 32313; LARGE32-NEXT:    lwz r0, 8(r1)314; LARGE32-NEXT:    mtlr r0315; LARGE32-NEXT:    blr316entry:317  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @IThreadLocalVarUninit)318  %1 = load i32, ptr %0, align 4319  %2 = load i32, ptr @VarInit, align 4320  %add = add nsw i32 %2, %1321  ret i32 %add322}323 324define signext i32 @loadITLInit() {325; SMALL64-LABEL: loadITLInit:326; SMALL64:       # %bb.0: # %entry327; SMALL64-NEXT:    ld r3, L..C1(r2) # target-flags(ppc-tprel) @IThreadLocalVarInit328; SMALL64-NEXT:    lwax r3, r13, r3329; SMALL64-NEXT:    blr330;331; LARGE64-LABEL: loadITLInit:332; LARGE64:       # %bb.0: # %entry333; LARGE64-NEXT:    addis r3, L..C1@u(r2)334; LARGE64-NEXT:    ld r3, L..C1@l(r3)335; LARGE64-NEXT:    lwax r3, r13, r3336; LARGE64-NEXT:    blr337;338; SMALL32-LABEL: loadITLInit:339; SMALL32:       # %bb.0: # %entry340; SMALL32-NEXT:    mflr r0341; SMALL32-NEXT:    stwu r1, -32(r1)342; SMALL32-NEXT:    lwz r4, L..C1(r2) # target-flags(ppc-tprel) @IThreadLocalVarInit343; SMALL32-NEXT:    stw r0, 40(r1)344; SMALL32-NEXT:    bla .__get_tpointer[PR]345; SMALL32-NEXT:    lwzx r3, r3, r4346; SMALL32-NEXT:    addi r1, r1, 32347; SMALL32-NEXT:    lwz r0, 8(r1)348; SMALL32-NEXT:    mtlr r0349; SMALL32-NEXT:    blr350;351; LARGE32-LABEL: loadITLInit:352; LARGE32:       # %bb.0: # %entry353; LARGE32-NEXT:    mflr r0354; LARGE32-NEXT:    stwu r1, -32(r1)355; LARGE32-NEXT:    stw r0, 40(r1)356; LARGE32-NEXT:    addis r3, L..C1@u(r2)357; LARGE32-NEXT:    lwz r4, L..C1@l(r3)358; LARGE32-NEXT:    bla .__get_tpointer[PR]359; LARGE32-NEXT:    lwzx r3, r3, r4360; LARGE32-NEXT:    addi r1, r1, 32361; LARGE32-NEXT:    lwz r0, 8(r1)362; LARGE32-NEXT:    mtlr r0363; LARGE32-NEXT:    blr364entry:365  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @IThreadLocalVarInit)366  %1 = load i32, ptr %0, align 4367  ret i32 %1368}369 370define signext i32 @loadITLInit2() {371; SMALL64-LABEL: loadITLInit2:372; SMALL64:       # %bb.0: # %entry373; SMALL64-NEXT:    ld r3, L..C1(r2) # target-flags(ppc-tprel) @IThreadLocalVarInit374; SMALL64-NEXT:    ld r4, L..C4(r2) # @VarInit375; SMALL64-NEXT:    lwzx r3, r13, r3376; SMALL64-NEXT:    lwz r4, 0(r4)377; SMALL64-NEXT:    add r3, r4, r3378; SMALL64-NEXT:    extsw r3, r3379; SMALL64-NEXT:    blr380;381; LARGE64-LABEL: loadITLInit2:382; LARGE64:       # %bb.0: # %entry383; LARGE64-NEXT:    addis r3, L..C1@u(r2)384; LARGE64-NEXT:    addis r4, L..C4@u(r2)385; LARGE64-NEXT:    ld r3, L..C1@l(r3)386; LARGE64-NEXT:    ld r4, L..C4@l(r4)387; LARGE64-NEXT:    lwzx r3, r13, r3388; LARGE64-NEXT:    lwz r4, 0(r4)389; LARGE64-NEXT:    add r3, r4, r3390; LARGE64-NEXT:    extsw r3, r3391; LARGE64-NEXT:    blr392;393; SMALL32-LABEL: loadITLInit2:394; SMALL32:       # %bb.0: # %entry395; SMALL32-NEXT:    mflr r0396; SMALL32-NEXT:    stwu r1, -32(r1)397; SMALL32-NEXT:    lwz r4, L..C1(r2) # target-flags(ppc-tprel) @IThreadLocalVarInit398; SMALL32-NEXT:    stw r0, 40(r1)399; SMALL32-NEXT:    bla .__get_tpointer[PR]400; SMALL32-NEXT:    lwzx r3, r3, r4401; SMALL32-NEXT:    lwz r4, L..C4(r2) # @VarInit402; SMALL32-NEXT:    lwz r4, 0(r4)403; SMALL32-NEXT:    add r3, r4, r3404; SMALL32-NEXT:    addi r1, r1, 32405; SMALL32-NEXT:    lwz r0, 8(r1)406; SMALL32-NEXT:    mtlr r0407; SMALL32-NEXT:    blr408;409; LARGE32-LABEL: loadITLInit2:410; LARGE32:       # %bb.0: # %entry411; LARGE32-NEXT:    mflr r0412; LARGE32-NEXT:    stwu r1, -32(r1)413; LARGE32-NEXT:    stw r0, 40(r1)414; LARGE32-NEXT:    addis r3, L..C1@u(r2)415; LARGE32-NEXT:    lwz r4, L..C1@l(r3)416; LARGE32-NEXT:    bla .__get_tpointer[PR]417; LARGE32-NEXT:    lwzx r3, r3, r4418; LARGE32-NEXT:    addis r4, L..C4@u(r2)419; LARGE32-NEXT:    lwz r4, L..C4@l(r4)420; LARGE32-NEXT:    lwz r4, 0(r4)421; LARGE32-NEXT:    add r3, r4, r3422; LARGE32-NEXT:    addi r1, r1, 32423; LARGE32-NEXT:    lwz r0, 8(r1)424; LARGE32-NEXT:    mtlr r0425; LARGE32-NEXT:    blr426entry:427  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @IThreadLocalVarInit)428  %1 = load i32, ptr %0, align 4429  %2 = load i32, ptr @VarInit, align 4430  %add = add nsw i32 %2, %1431  ret i32 %add432}433 434define signext i32 @loadTLUninit() {435; SMALL64-LABEL: loadTLUninit:436; SMALL64:       # %bb.0: # %entry437; SMALL64-NEXT:    ld r3, L..C2(r2) # target-flags(ppc-tprel) @ThreadLocalVarUninit438; SMALL64-NEXT:    lwax r3, r13, r3439; SMALL64-NEXT:    blr440;441; LARGE64-LABEL: loadTLUninit:442; LARGE64:       # %bb.0: # %entry443; LARGE64-NEXT:    addis r3, L..C2@u(r2)444; LARGE64-NEXT:    ld r3, L..C2@l(r3)445; LARGE64-NEXT:    lwax r3, r13, r3446; LARGE64-NEXT:    blr447;448; SMALL32-LABEL: loadTLUninit:449; SMALL32:       # %bb.0: # %entry450; SMALL32-NEXT:    mflr r0451; SMALL32-NEXT:    stwu r1, -32(r1)452; SMALL32-NEXT:    lwz r4, L..C2(r2) # target-flags(ppc-tprel) @ThreadLocalVarUninit453; SMALL32-NEXT:    stw r0, 40(r1)454; SMALL32-NEXT:    bla .__get_tpointer[PR]455; SMALL32-NEXT:    lwzx r3, r3, r4456; SMALL32-NEXT:    addi r1, r1, 32457; SMALL32-NEXT:    lwz r0, 8(r1)458; SMALL32-NEXT:    mtlr r0459; SMALL32-NEXT:    blr460;461; LARGE32-LABEL: loadTLUninit:462; LARGE32:       # %bb.0: # %entry463; LARGE32-NEXT:    mflr r0464; LARGE32-NEXT:    stwu r1, -32(r1)465; LARGE32-NEXT:    stw r0, 40(r1)466; LARGE32-NEXT:    addis r3, L..C2@u(r2)467; LARGE32-NEXT:    lwz r4, L..C2@l(r3)468; LARGE32-NEXT:    bla .__get_tpointer[PR]469; LARGE32-NEXT:    lwzx r3, r3, r4470; LARGE32-NEXT:    addi r1, r1, 32471; LARGE32-NEXT:    lwz r0, 8(r1)472; LARGE32-NEXT:    mtlr r0473; LARGE32-NEXT:    blr474entry:475  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @ThreadLocalVarUninit)476  %1 = load i32, ptr %0, align 4477  ret i32 %1478}479 480define signext i32 @loadTLUninit2() {481; SMALL64-LABEL: loadTLUninit2:482; SMALL64:       # %bb.0: # %entry483; SMALL64-NEXT:    ld r3, L..C2(r2) # target-flags(ppc-tprel) @ThreadLocalVarUninit484; SMALL64-NEXT:    ld r4, L..C4(r2) # @VarInit485; SMALL64-NEXT:    lwzx r3, r13, r3486; SMALL64-NEXT:    lwz r4, 0(r4)487; SMALL64-NEXT:    add r3, r4, r3488; SMALL64-NEXT:    extsw r3, r3489; SMALL64-NEXT:    blr490;491; LARGE64-LABEL: loadTLUninit2:492; LARGE64:       # %bb.0: # %entry493; LARGE64-NEXT:    addis r3, L..C2@u(r2)494; LARGE64-NEXT:    addis r4, L..C4@u(r2)495; LARGE64-NEXT:    ld r3, L..C2@l(r3)496; LARGE64-NEXT:    ld r4, L..C4@l(r4)497; LARGE64-NEXT:    lwzx r3, r13, r3498; LARGE64-NEXT:    lwz r4, 0(r4)499; LARGE64-NEXT:    add r3, r4, r3500; LARGE64-NEXT:    extsw r3, r3501; LARGE64-NEXT:    blr502;503; SMALL32-LABEL: loadTLUninit2:504; SMALL32:       # %bb.0: # %entry505; SMALL32-NEXT:    mflr r0506; SMALL32-NEXT:    stwu r1, -32(r1)507; SMALL32-NEXT:    lwz r4, L..C2(r2) # target-flags(ppc-tprel) @ThreadLocalVarUninit508; SMALL32-NEXT:    stw r0, 40(r1)509; SMALL32-NEXT:    bla .__get_tpointer[PR]510; SMALL32-NEXT:    lwzx r3, r3, r4511; SMALL32-NEXT:    lwz r4, L..C4(r2) # @VarInit512; SMALL32-NEXT:    lwz r4, 0(r4)513; SMALL32-NEXT:    add r3, r4, r3514; SMALL32-NEXT:    addi r1, r1, 32515; SMALL32-NEXT:    lwz r0, 8(r1)516; SMALL32-NEXT:    mtlr r0517; SMALL32-NEXT:    blr518;519; LARGE32-LABEL: loadTLUninit2:520; LARGE32:       # %bb.0: # %entry521; LARGE32-NEXT:    mflr r0522; LARGE32-NEXT:    stwu r1, -32(r1)523; LARGE32-NEXT:    stw r0, 40(r1)524; LARGE32-NEXT:    addis r3, L..C2@u(r2)525; LARGE32-NEXT:    lwz r4, L..C2@l(r3)526; LARGE32-NEXT:    bla .__get_tpointer[PR]527; LARGE32-NEXT:    lwzx r3, r3, r4528; LARGE32-NEXT:    addis r4, L..C4@u(r2)529; LARGE32-NEXT:    lwz r4, L..C4@l(r4)530; LARGE32-NEXT:    lwz r4, 0(r4)531; LARGE32-NEXT:    add r3, r4, r3532; LARGE32-NEXT:    addi r1, r1, 32533; LARGE32-NEXT:    lwz r0, 8(r1)534; LARGE32-NEXT:    mtlr r0535; LARGE32-NEXT:    blr536entry:537  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @ThreadLocalVarUninit)538  %1 = load i32, ptr %0, align 4539  %2 = load i32, ptr @VarInit, align 4540  %add = add nsw i32 %2, %1541  ret i32 %add542}543 544define signext i32 @loadTLInit() {545; SMALL64-LABEL: loadTLInit:546; SMALL64:       # %bb.0: # %entry547; SMALL64-NEXT:    ld r3, L..C3(r2) # target-flags(ppc-tprel) @ThreadLocalVarInit548; SMALL64-NEXT:    lwax r3, r13, r3549; SMALL64-NEXT:    blr550;551; LARGE64-LABEL: loadTLInit:552; LARGE64:       # %bb.0: # %entry553; LARGE64-NEXT:    addis r3, L..C3@u(r2)554; LARGE64-NEXT:    ld r3, L..C3@l(r3)555; LARGE64-NEXT:    lwax r3, r13, r3556; LARGE64-NEXT:    blr557;558; SMALL32-LABEL: loadTLInit:559; SMALL32:       # %bb.0: # %entry560; SMALL32-NEXT:    mflr r0561; SMALL32-NEXT:    stwu r1, -32(r1)562; SMALL32-NEXT:    lwz r4, L..C3(r2) # target-flags(ppc-tprel) @ThreadLocalVarInit563; SMALL32-NEXT:    stw r0, 40(r1)564; SMALL32-NEXT:    bla .__get_tpointer[PR]565; SMALL32-NEXT:    lwzx r3, r3, r4566; SMALL32-NEXT:    addi r1, r1, 32567; SMALL32-NEXT:    lwz r0, 8(r1)568; SMALL32-NEXT:    mtlr r0569; SMALL32-NEXT:    blr570;571; LARGE32-LABEL: loadTLInit:572; LARGE32:       # %bb.0: # %entry573; LARGE32-NEXT:    mflr r0574; LARGE32-NEXT:    stwu r1, -32(r1)575; LARGE32-NEXT:    stw r0, 40(r1)576; LARGE32-NEXT:    addis r3, L..C3@u(r2)577; LARGE32-NEXT:    lwz r4, L..C3@l(r3)578; LARGE32-NEXT:    bla .__get_tpointer[PR]579; LARGE32-NEXT:    lwzx r3, r3, r4580; LARGE32-NEXT:    addi r1, r1, 32581; LARGE32-NEXT:    lwz r0, 8(r1)582; LARGE32-NEXT:    mtlr r0583; LARGE32-NEXT:    blr584entry:585  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @ThreadLocalVarInit)586  %1 = load i32, ptr %0, align 4587  ret i32 %1588}589 590define signext i32 @loadTLInit2() {591; SMALL64-LABEL: loadTLInit2:592; SMALL64:       # %bb.0: # %entry593; SMALL64-NEXT:    ld r3, L..C3(r2) # target-flags(ppc-tprel) @ThreadLocalVarInit594; SMALL64-NEXT:    ld r4, L..C4(r2) # @VarInit595; SMALL64-NEXT:    lwzx r3, r13, r3596; SMALL64-NEXT:    lwz r4, 0(r4)597; SMALL64-NEXT:    add r3, r4, r3598; SMALL64-NEXT:    extsw r3, r3599; SMALL64-NEXT:    blr600;601; LARGE64-LABEL: loadTLInit2:602; LARGE64:       # %bb.0: # %entry603; LARGE64-NEXT:    addis r3, L..C3@u(r2)604; LARGE64-NEXT:    addis r4, L..C4@u(r2)605; LARGE64-NEXT:    ld r3, L..C3@l(r3)606; LARGE64-NEXT:    ld r4, L..C4@l(r4)607; LARGE64-NEXT:    lwzx r3, r13, r3608; LARGE64-NEXT:    lwz r4, 0(r4)609; LARGE64-NEXT:    add r3, r4, r3610; LARGE64-NEXT:    extsw r3, r3611; LARGE64-NEXT:    blr612;613; SMALL32-LABEL: loadTLInit2:614; SMALL32:       # %bb.0: # %entry615; SMALL32-NEXT:    mflr r0616; SMALL32-NEXT:    stwu r1, -32(r1)617; SMALL32-NEXT:    lwz r4, L..C3(r2) # target-flags(ppc-tprel) @ThreadLocalVarInit618; SMALL32-NEXT:    stw r0, 40(r1)619; SMALL32-NEXT:    bla .__get_tpointer[PR]620; SMALL32-NEXT:    lwzx r3, r3, r4621; SMALL32-NEXT:    lwz r4, L..C4(r2) # @VarInit622; SMALL32-NEXT:    lwz r4, 0(r4)623; SMALL32-NEXT:    add r3, r4, r3624; SMALL32-NEXT:    addi r1, r1, 32625; SMALL32-NEXT:    lwz r0, 8(r1)626; SMALL32-NEXT:    mtlr r0627; SMALL32-NEXT:    blr628;629; LARGE32-LABEL: loadTLInit2:630; LARGE32:       # %bb.0: # %entry631; LARGE32-NEXT:    mflr r0632; LARGE32-NEXT:    stwu r1, -32(r1)633; LARGE32-NEXT:    stw r0, 40(r1)634; LARGE32-NEXT:    addis r3, L..C3@u(r2)635; LARGE32-NEXT:    lwz r4, L..C3@l(r3)636; LARGE32-NEXT:    bla .__get_tpointer[PR]637; LARGE32-NEXT:    lwzx r3, r3, r4638; LARGE32-NEXT:    addis r4, L..C4@u(r2)639; LARGE32-NEXT:    lwz r4, L..C4@l(r4)640; LARGE32-NEXT:    lwz r4, 0(r4)641; LARGE32-NEXT:    add r3, r4, r3642; LARGE32-NEXT:    addi r1, r1, 32643; LARGE32-NEXT:    lwz r0, 8(r1)644; LARGE32-NEXT:    mtlr r0645; LARGE32-NEXT:    blr646entry:647  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @ThreadLocalVarInit)648  %1 = load i32, ptr %0, align 4649  %2 = load i32, ptr @VarInit, align 4650  %add = add nsw i32 %2, %1651  ret i32 %add652}653 654; TOC Entry Checks.655 656; SMALL64-LABEL: .toc657; SMALL64-LABEL: L..C0:658; SMALL64-NEXT: .tc IThreadLocalVarUninit[TC],IThreadLocalVarUninit[UL]@le659; SMALL64-LABEL: L..C1:660; SMALL64-NEXT: .tc IThreadLocalVarInit[TC],IThreadLocalVarInit[TL]@le661; SMALL64-LABEL: L..C2:662; SMALL64-NEXT: .tc ThreadLocalVarUninit[TC],ThreadLocalVarUninit[TL]@le663; SMALL64-LABEL: L..C3:664; SMALL64-NEXT: .tc ThreadLocalVarInit[TC],ThreadLocalVarInit[TL]@le665; SMALL64-LABEL: L..C4:666; SMALL64-NEXT: .tc VarInit[TC],VarInit[RW]667 668; LARGE64-LABEL: .toc669; LARGE64-LABEL: L..C0:670; LARGE64-NEXT: .tc IThreadLocalVarUninit[TE],IThreadLocalVarUninit[UL]@le671; LARGE64-LABEL: L..C1:672; LARGE64-NEXT: .tc IThreadLocalVarInit[TE],IThreadLocalVarInit[TL]@le673; LARGE64-LABEL: L..C2:674; LARGE64-NEXT: .tc ThreadLocalVarUninit[TE],ThreadLocalVarUninit[TL]@le675; LARGE64-LABEL: L..C3:676; LARGE64-NEXT: .tc ThreadLocalVarInit[TE],ThreadLocalVarInit[TL]@le677; LARGE64-LABEL: L..C4:678; LARGE64-NEXT: .tc VarInit[TE],VarInit[RW]679 680; SMALL32-LABEL: .toc681; SMALL32-LABEL: L..C0:682; SMALL32-NEXT: .tc IThreadLocalVarUninit[TC],IThreadLocalVarUninit[UL]@le683; SMALL32-LABEL: L..C1:684; SMALL32-NEXT: .tc IThreadLocalVarInit[TC],IThreadLocalVarInit[TL]@le685; SMALL32-LABEL: L..C2:686; SMALL32-NEXT: .tc ThreadLocalVarUninit[TC],ThreadLocalVarUninit[TL]@le687; SMALL32-LABEL: L..C3:688; SMALL32-NEXT: .tc ThreadLocalVarInit[TC],ThreadLocalVarInit[TL]@le689; SMALL32-LABEL: L..C4:690; SMALL32-NEXT: .tc VarInit[TC],VarInit[RW]691 692; LARGE32-LABEL: .toc693; LARGE32-LABEL: L..C0:694; LARGE32-NEXT: .tc IThreadLocalVarUninit[TE],IThreadLocalVarUninit[UL]@le695; LARGE32-LABEL: L..C1:696; LARGE32-NEXT: .tc IThreadLocalVarInit[TE],IThreadLocalVarInit[TL]@le697; LARGE32-LABEL: L..C2:698; LARGE32-NEXT: .tc ThreadLocalVarUninit[TE],ThreadLocalVarUninit[TL]@le699; LARGE32-LABEL: L..C3:700; LARGE32-NEXT: .tc ThreadLocalVarInit[TE],ThreadLocalVarInit[TL]@le701; LARGE32-LABEL: L..C4:702; LARGE32-NEXT: .tc VarInit[TE],VarInit[RW]703