brintos

brintos / llvm-project-archived public Read only

0
0
Text · 11.8 KiB · fe89b19 Raw
415 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \3; RUN:   -mcpu=pwr10 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr < %s \4; RUN:   | FileCheck %s --check-prefix=LE5; RUN: llc -verify-machineinstrs -target-abi=elfv2 -mtriple=powerpc64-- \6; RUN:   -mcpu=pwr10 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr < %s \7; RUN:   | FileCheck %s --check-prefix=BE8 9 10%struct.Struct = type { i8, i16, i32 }11 12@valChar = external local_unnamed_addr global i8, align 113@valShort = external local_unnamed_addr global i16, align 214@valInt = external global i32, align 415@valUnsigned = external local_unnamed_addr global i32, align 416@valLong = external local_unnamed_addr global i64, align 817@ptr = external local_unnamed_addr global ptr, align 818@array = external local_unnamed_addr global [10 x i32], align 419@structure = external local_unnamed_addr global %struct.Struct, align 420@ptrfunc = external local_unnamed_addr global ptr, align 821 22define dso_local signext i32 @ReadGlobalVarChar() local_unnamed_addr  {23; LE-LABEL: ReadGlobalVarChar:24; LE:       # %bb.0: # %entry25; LE-NEXT:    pld r3, valChar@got@pcrel(0), 126; LE-NEXT:  .Lpcrel0:27; LE-NEXT:    .reloc .Lpcrel0-8,R_PPC64_PCREL_OPT,.-(.Lpcrel0-8)28; LE-NEXT:    lbz r3, 0(r3)29; LE-NEXT:    blr30;31; BE-LABEL: ReadGlobalVarChar:32; BE:       # %bb.0: # %entry33; BE-NEXT:    pld r3, valChar@got@pcrel(0), 134; BE-NEXT:  .Lpcrel0:35; BE-NEXT:    .reloc .Lpcrel0-8,R_PPC64_PCREL_OPT,.-(.Lpcrel0-8)36; BE-NEXT:    lbz r3, 0(r3)37; BE-NEXT:    blr38entry:39  %0 = load i8, ptr @valChar, align 140  %conv = zext i8 %0 to i3241  ret i32 %conv42}43 44define dso_local void @WriteGlobalVarChar() local_unnamed_addr  {45; LE-LABEL: WriteGlobalVarChar:46; LE:       # %bb.0: # %entry47; LE-NEXT:    pld r3, valChar@got@pcrel(0), 148; LE-NEXT:    li r4, 349; LE-NEXT:    stb r4, 0(r3)50; LE-NEXT:    blr51;52; BE-LABEL: WriteGlobalVarChar:53; BE:       # %bb.0: # %entry54; BE-NEXT:    pld r3, valChar@got@pcrel(0), 155; BE-NEXT:    li r4, 356; BE-NEXT:    stb r4, 0(r3)57; BE-NEXT:    blr58entry:59  store i8 3, ptr @valChar, align 160  ret void61}62 63define dso_local signext i32 @ReadGlobalVarShort() local_unnamed_addr  {64; LE-LABEL: ReadGlobalVarShort:65; LE:       # %bb.0: # %entry66; LE-NEXT:    pld r3, valShort@got@pcrel(0), 167; LE-NEXT:  .Lpcrel1:68; LE-NEXT:    .reloc .Lpcrel1-8,R_PPC64_PCREL_OPT,.-(.Lpcrel1-8)69; LE-NEXT:    lha r3, 0(r3)70; LE-NEXT:    blr71;72; BE-LABEL: ReadGlobalVarShort:73; BE:       # %bb.0: # %entry74; BE-NEXT:    pld r3, valShort@got@pcrel(0), 175; BE-NEXT:  .Lpcrel1:76; BE-NEXT:    .reloc .Lpcrel1-8,R_PPC64_PCREL_OPT,.-(.Lpcrel1-8)77; BE-NEXT:    lha r3, 0(r3)78; BE-NEXT:    blr79entry:80  %0 = load i16, ptr @valShort, align 281  %conv = sext i16 %0 to i3282  ret i32 %conv83}84 85define dso_local void @WriteGlobalVarShort() local_unnamed_addr  {86; LE-LABEL: WriteGlobalVarShort:87; LE:       # %bb.0: # %entry88; LE-NEXT:    pld r3, valShort@got@pcrel(0), 189; LE-NEXT:    li r4, 390; LE-NEXT:    sth r4, 0(r3)91; LE-NEXT:    blr92;93; BE-LABEL: WriteGlobalVarShort:94; BE:       # %bb.0: # %entry95; BE-NEXT:    pld r3, valShort@got@pcrel(0), 196; BE-NEXT:    li r4, 397; BE-NEXT:    sth r4, 0(r3)98; BE-NEXT:    blr99entry:100  store i16 3, ptr @valShort, align 2101  ret void102}103 104define dso_local signext i32 @ReadGlobalVarInt() local_unnamed_addr  {105; LE-LABEL: ReadGlobalVarInt:106; LE:       # %bb.0: # %entry107; LE-NEXT:    pld r3, valInt@got@pcrel(0), 1108; LE-NEXT:  .Lpcrel2:109; LE-NEXT:    .reloc .Lpcrel2-8,R_PPC64_PCREL_OPT,.-(.Lpcrel2-8)110; LE-NEXT:    lwa r3, 0(r3)111; LE-NEXT:    blr112;113; BE-LABEL: ReadGlobalVarInt:114; BE:       # %bb.0: # %entry115; BE-NEXT:    pld r3, valInt@got@pcrel(0), 1116; BE-NEXT:  .Lpcrel2:117; BE-NEXT:    .reloc .Lpcrel2-8,R_PPC64_PCREL_OPT,.-(.Lpcrel2-8)118; BE-NEXT:    lwa r3, 0(r3)119; BE-NEXT:    blr120entry:121  %0 = load i32, ptr @valInt, align 4122  ret i32 %0123}124 125define dso_local void @WriteGlobalVarInt() local_unnamed_addr  {126; LE-LABEL: WriteGlobalVarInt:127; LE:       # %bb.0: # %entry128; LE-NEXT:    pld r3, valInt@got@pcrel(0), 1129; LE-NEXT:    li r4, 33130; LE-NEXT:    stw r4, 0(r3)131; LE-NEXT:    blr132;133; BE-LABEL: WriteGlobalVarInt:134; BE:       # %bb.0: # %entry135; BE-NEXT:    pld r3, valInt@got@pcrel(0), 1136; BE-NEXT:    li r4, 33137; BE-NEXT:    stw r4, 0(r3)138; BE-NEXT:    blr139entry:140  store i32 33, ptr @valInt, align 4141  ret void142}143 144define dso_local signext i32 @ReadGlobalVarUnsigned() local_unnamed_addr  {145; LE-LABEL: ReadGlobalVarUnsigned:146; LE:       # %bb.0: # %entry147; LE-NEXT:    pld r3, valUnsigned@got@pcrel(0), 1148; LE-NEXT:  .Lpcrel3:149; LE-NEXT:    .reloc .Lpcrel3-8,R_PPC64_PCREL_OPT,.-(.Lpcrel3-8)150; LE-NEXT:    lwa r3, 0(r3)151; LE-NEXT:    blr152;153; BE-LABEL: ReadGlobalVarUnsigned:154; BE:       # %bb.0: # %entry155; BE-NEXT:    pld r3, valUnsigned@got@pcrel(0), 1156; BE-NEXT:  .Lpcrel3:157; BE-NEXT:    .reloc .Lpcrel3-8,R_PPC64_PCREL_OPT,.-(.Lpcrel3-8)158; BE-NEXT:    lwa r3, 0(r3)159; BE-NEXT:    blr160entry:161  %0 = load i32, ptr @valUnsigned, align 4162  ret i32 %0163}164 165define dso_local void @WriteGlobalVarUnsigned() local_unnamed_addr  {166; LE-LABEL: WriteGlobalVarUnsigned:167; LE:       # %bb.0: # %entry168; LE-NEXT:    pld r3, valUnsigned@got@pcrel(0), 1169; LE-NEXT:    li r4, 33170; LE-NEXT:    stw r4, 0(r3)171; LE-NEXT:    blr172;173; BE-LABEL: WriteGlobalVarUnsigned:174; BE:       # %bb.0: # %entry175; BE-NEXT:    pld r3, valUnsigned@got@pcrel(0), 1176; BE-NEXT:    li r4, 33177; BE-NEXT:    stw r4, 0(r3)178; BE-NEXT:    blr179entry:180  store i32 33, ptr @valUnsigned, align 4181  ret void182}183 184define dso_local signext i32 @ReadGlobalVarLong() local_unnamed_addr  {185; LE-LABEL: ReadGlobalVarLong:186; LE:       # %bb.0: # %entry187; LE-NEXT:    pld r3, valLong@got@pcrel(0), 1188; LE-NEXT:  .Lpcrel4:189; LE-NEXT:    .reloc .Lpcrel4-8,R_PPC64_PCREL_OPT,.-(.Lpcrel4-8)190; LE-NEXT:    lwa r3, 0(r3)191; LE-NEXT:    blr192;193; BE-LABEL: ReadGlobalVarLong:194; BE:       # %bb.0: # %entry195; BE-NEXT:    pld r3, valLong@got@pcrel(0), 1196; BE-NEXT:  .Lpcrel4:197; BE-NEXT:    .reloc .Lpcrel4-8,R_PPC64_PCREL_OPT,.-(.Lpcrel4-8)198; BE-NEXT:    lwa r3, 4(r3)199; BE-NEXT:    blr200entry:201  %0 = load i64, ptr @valLong, align 8202  %conv = trunc i64 %0 to i32203  ret i32 %conv204}205 206define dso_local void @WriteGlobalVarLong() local_unnamed_addr  {207; LE-LABEL: WriteGlobalVarLong:208; LE:       # %bb.0: # %entry209; LE-NEXT:    pld r3, valLong@got@pcrel(0), 1210; LE-NEXT:    li r4, 3333211; LE-NEXT:    std r4, 0(r3)212; LE-NEXT:    blr213;214; BE-LABEL: WriteGlobalVarLong:215; BE:       # %bb.0: # %entry216; BE-NEXT:    pld r3, valLong@got@pcrel(0), 1217; BE-NEXT:    li r4, 3333218; BE-NEXT:    std r4, 0(r3)219; BE-NEXT:    blr220entry:221  store i64 3333, ptr @valLong, align 8222  ret void223}224 225define dso_local ptr @ReadGlobalPtr() local_unnamed_addr  {226; LE-LABEL: ReadGlobalPtr:227; LE:       # %bb.0: # %entry228; LE-NEXT:    pld r3, ptr@got@pcrel(0), 1229; LE-NEXT:  .Lpcrel5:230; LE-NEXT:    .reloc .Lpcrel5-8,R_PPC64_PCREL_OPT,.-(.Lpcrel5-8)231; LE-NEXT:    ld r3, 0(r3)232; LE-NEXT:    blr233;234; BE-LABEL: ReadGlobalPtr:235; BE:       # %bb.0: # %entry236; BE-NEXT:    pld r3, ptr@got@pcrel(0), 1237; BE-NEXT:  .Lpcrel5:238; BE-NEXT:    .reloc .Lpcrel5-8,R_PPC64_PCREL_OPT,.-(.Lpcrel5-8)239; BE-NEXT:    ld r3, 0(r3)240; BE-NEXT:    blr241entry:242  %0 = load ptr, ptr @ptr, align 8243  ret ptr %0244}245 246define dso_local void @WriteGlobalPtr() local_unnamed_addr  {247; LE-LABEL: WriteGlobalPtr:248; LE:       # %bb.0: # %entry249; LE-NEXT:    pld r3, ptr@got@pcrel(0), 1250; LE-NEXT:  .Lpcrel6:251; LE-NEXT:    li r4, 3252; LE-NEXT:    .reloc .Lpcrel6-8,R_PPC64_PCREL_OPT,.-(.Lpcrel6-8)253; LE-NEXT:    ld r3, 0(r3)254; LE-NEXT:    stw r4, 0(r3)255; LE-NEXT:    blr256;257; BE-LABEL: WriteGlobalPtr:258; BE:       # %bb.0: # %entry259; BE-NEXT:    pld r3, ptr@got@pcrel(0), 1260; BE-NEXT:  .Lpcrel6:261; BE-NEXT:    li r4, 3262; BE-NEXT:    .reloc .Lpcrel6-8,R_PPC64_PCREL_OPT,.-(.Lpcrel6-8)263; BE-NEXT:    ld r3, 0(r3)264; BE-NEXT:    stw r4, 0(r3)265; BE-NEXT:    blr266entry:267  %0 = load ptr, ptr @ptr, align 8268  store i32 3, ptr %0, align 4269  ret void270}271 272define dso_local nonnull ptr @GlobalVarAddr() local_unnamed_addr  {273; LE-LABEL: GlobalVarAddr:274; LE:       # %bb.0: # %entry275; LE-NEXT:    pld r3, valInt@got@pcrel(0), 1276; LE-NEXT:    blr277;278; BE-LABEL: GlobalVarAddr:279; BE:       # %bb.0: # %entry280; BE-NEXT:    pld r3, valInt@got@pcrel(0), 1281; BE-NEXT:    blr282entry:283  ret ptr @valInt284}285 286define dso_local signext i32 @ReadGlobalArray() local_unnamed_addr  {287; LE-LABEL: ReadGlobalArray:288; LE:       # %bb.0: # %entry289; LE-NEXT:    pld r3, array@got@pcrel(0), 1290; LE-NEXT:  .Lpcrel7:291; LE-NEXT:    .reloc .Lpcrel7-8,R_PPC64_PCREL_OPT,.-(.Lpcrel7-8)292; LE-NEXT:    lwa r3, 12(r3)293; LE-NEXT:    blr294;295; BE-LABEL: ReadGlobalArray:296; BE:       # %bb.0: # %entry297; BE-NEXT:    pld r3, array@got@pcrel(0), 1298; BE-NEXT:  .Lpcrel7:299; BE-NEXT:    .reloc .Lpcrel7-8,R_PPC64_PCREL_OPT,.-(.Lpcrel7-8)300; BE-NEXT:    lwa r3, 12(r3)301; BE-NEXT:    blr302entry:303  %0 = load i32, ptr getelementptr inbounds ([10 x i32], ptr @array, i64 0, i64 3), align 4304  ret i32 %0305}306 307define dso_local void @WriteGlobalArray() local_unnamed_addr  {308; LE-LABEL: WriteGlobalArray:309; LE:       # %bb.0: # %entry310; LE-NEXT:    pld r3, array@got@pcrel(0), 1311; LE-NEXT:    li r4, 5312; LE-NEXT:    stw r4, 12(r3)313; LE-NEXT:    blr314;315; BE-LABEL: WriteGlobalArray:316; BE:       # %bb.0: # %entry317; BE-NEXT:    pld r3, array@got@pcrel(0), 1318; BE-NEXT:    li r4, 5319; BE-NEXT:    stw r4, 12(r3)320; BE-NEXT:    blr321entry:322  store i32 5, ptr getelementptr inbounds ([10 x i32], ptr @array, i64 0, i64 3), align 4323  ret void324}325 326define dso_local signext i32 @ReadGlobalStruct() local_unnamed_addr  {327; LE-LABEL: ReadGlobalStruct:328; LE:       # %bb.0: # %entry329; LE-NEXT:    pld r3, structure@got@pcrel(0), 1330; LE-NEXT:  .Lpcrel8:331; LE-NEXT:    .reloc .Lpcrel8-8,R_PPC64_PCREL_OPT,.-(.Lpcrel8-8)332; LE-NEXT:    lwa r3, 4(r3)333; LE-NEXT:    blr334;335; BE-LABEL: ReadGlobalStruct:336; BE:       # %bb.0: # %entry337; BE-NEXT:    pld r3, structure@got@pcrel(0), 1338; BE-NEXT:  .Lpcrel8:339; BE-NEXT:    .reloc .Lpcrel8-8,R_PPC64_PCREL_OPT,.-(.Lpcrel8-8)340; BE-NEXT:    lwa r3, 4(r3)341; BE-NEXT:    blr342entry:343  %0 = load i32, ptr getelementptr inbounds (%struct.Struct, ptr @structure, i64 0, i32 2), align 4344  ret i32 %0345}346 347define dso_local void @WriteGlobalStruct() local_unnamed_addr  {348; LE-LABEL: WriteGlobalStruct:349; LE:       # %bb.0: # %entry350; LE-NEXT:    pld r3, structure@got@pcrel(0), 1351; LE-NEXT:    li r4, 3352; LE-NEXT:    stw r4, 4(r3)353; LE-NEXT:    blr354;355; BE-LABEL: WriteGlobalStruct:356; BE:       # %bb.0: # %entry357; BE-NEXT:    pld r3, structure@got@pcrel(0), 1358; BE-NEXT:    li r4, 3359; BE-NEXT:    stw r4, 4(r3)360; BE-NEXT:    blr361entry:362  store i32 3, ptr getelementptr inbounds (%struct.Struct, ptr @structure, i64 0, i32 2), align 4363  ret void364}365 366define dso_local void @ReadFuncPtr() local_unnamed_addr  {367; LE-LABEL: ReadFuncPtr:368; LE:         .localentry ReadFuncPtr, 1369; LE-NEXT:  # %bb.0: # %entry370; LE-NEXT:    pld r3, ptrfunc@got@pcrel(0), 1371; LE-NEXT:  .Lpcrel9:372; LE-NEXT:    .reloc .Lpcrel9-8,R_PPC64_PCREL_OPT,.-(.Lpcrel9-8)373; LE-NEXT:    ld r12, 0(r3)374; LE-NEXT:    mtctr r12375; LE-NEXT:    bctr376; LE-NEXT:    #TC_RETURNr8 ctr 0377;378; BE-LABEL: ReadFuncPtr:379; BE:         .localentry ReadFuncPtr, 1380; BE-NEXT:  # %bb.0: # %entry381; BE-NEXT:    pld r3, ptrfunc@got@pcrel(0), 1382; BE-NEXT:  .Lpcrel9:383; BE-NEXT:    .reloc .Lpcrel9-8,R_PPC64_PCREL_OPT,.-(.Lpcrel9-8)384; BE-NEXT:    ld r12, 0(r3)385; BE-NEXT:    mtctr r12386; BE-NEXT:    bctr387; BE-NEXT:    #TC_RETURNr8 ctr 0388entry:389  %0 = load ptr, ptr @ptrfunc, align 8390  tail call void %0()391  ret void392}393 394define dso_local void @WriteFuncPtr() local_unnamed_addr  {395; LE-LABEL: WriteFuncPtr:396; LE:       # %bb.0: # %entry397; LE-NEXT:    pld r3, ptrfunc@got@pcrel(0), 1398; LE-NEXT:    pld r4, function@got@pcrel(0), 1399; LE-NEXT:    std r4, 0(r3)400; LE-NEXT:    blr401;402; BE-LABEL: WriteFuncPtr:403; BE:       # %bb.0: # %entry404; BE-NEXT:    pld r3, ptrfunc@got@pcrel(0), 1405; BE-NEXT:    pld r4, function@got@pcrel(0), 1406; BE-NEXT:    std r4, 0(r3)407; BE-NEXT:    blr408entry:409  store ptr @function, ptr @ptrfunc, align 8410  ret void411}412 413declare void @function(...)414 415