brintos

brintos / llvm-project-archived public Read only

0
0
Text · 10.5 KiB · 8c058cb Raw
396 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu -O2 \3; RUN:     -ppc-asm-full-reg-names -mcpu=pwr10 < %s | FileCheck %s \4; RUN:     --check-prefixes=CHECK,CHECK-LE5; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -O2 \6; RUN:     -ppc-asm-full-reg-names -mcpu=pwr10 < %s | FileCheck %s \7; RUN:     --check-prefixes=CHECK,CHECK-BE8 9; This file does not contain many test cases involving comparisons and logical10; comparisons (cmplwi, cmpldi). This is because alternative code is generated11; when there is a compare (logical or not), followed by a sign or zero extend.12; This codegen will be re-evaluated at a later time on whether or not it should13; be emitted on P10.14 15@globalVal = common dso_local local_unnamed_addr global i8 0, align 116@globalVal2 = common dso_local local_unnamed_addr global i32 0, align 417@globalVal3 = common dso_local local_unnamed_addr global i64 0, align 818@globalVal4 = common dso_local local_unnamed_addr global i16 0, align 219 20define dso_local signext i32 @setnbcr1(i8 %a) {21; CHECK-LABEL: setnbcr1:22; CHECK:       # %bb.0: # %entry23; CHECK-NEXT:    andi. r3, r3, 25524; CHECK-NEXT:    setnbcr r3, eq25; CHECK-NEXT:    blr26entry:27  %cmp = icmp uge i8 %a, 128  %conv = sext i1 %cmp to i3229  ret i32 %conv30}31 32define dso_local signext i32 @setnbcr2(i32 %a) {33; CHECK-LABEL: setnbcr2:34; CHECK:       # %bb.0: # %entry35; CHECK-NEXT:    cmpwi r3, 036; CHECK-NEXT:    setnbcr r3, eq37; CHECK-NEXT:    blr38entry:39  %cmp = icmp uge i32 %a, 140  %conv = sext i1 %cmp to i3241  ret i32 %conv42}43 44define dso_local signext i32 @setnbcr3(i64 %a) {45; CHECK-LABEL: setnbcr3:46; CHECK:       # %bb.0: # %entry47; CHECK-NEXT:    cmpdi r3, 048; CHECK-NEXT:    setnbcr r3, eq49; CHECK-NEXT:    blr50entry:51  %cmp = icmp uge i64 %a, 152  %conv = sext i1 %cmp to i3253  ret i32 %conv54}55 56define dso_local signext i32 @setnbcr4(i16 %a) {57; CHECK-LABEL: setnbcr4:58; CHECK:       # %bb.0: # %entry59; CHECK-NEXT:    andi. r3, r3, 6553560; CHECK-NEXT:    setnbcr r3, eq61; CHECK-NEXT:    blr62entry:63  %cmp = icmp uge i16 %a, 164  %conv = sext i1 %cmp to i3265  ret i32 %conv66}67 68define signext i64 @setnbcr5(i8 %a) {69; CHECK-LABEL: setnbcr5:70; CHECK:       # %bb.0: # %entry71; CHECK-NEXT:    andi. r3, r3, 25572; CHECK-NEXT:    setnbcr r3, eq73; CHECK-NEXT:    blr74entry:75  %cmp = icmp uge i8 %a, 176  %conv = sext i1 %cmp to i6477  ret i64 %conv78}79 80define signext i64 @setnbcr6(i32 %a) {81; CHECK-LABEL: setnbcr6:82; CHECK:       # %bb.0: # %entry83; CHECK-NEXT:    cmpwi r3, 084; CHECK-NEXT:    setnbcr r3, eq85; CHECK-NEXT:    blr86entry:87  %cmp = icmp uge i32 %a, 188  %conv = sext i1 %cmp to i6489  ret i64 %conv90}91 92define signext i64 @setnbcr7(i64 %a) {93; CHECK-LABEL: setnbcr7:94; CHECK:       # %bb.0: # %entry95; CHECK-NEXT:    cmpdi r3, 096; CHECK-NEXT:    setnbcr r3, eq97; CHECK-NEXT:    blr98entry:99  %cmp = icmp uge i64 %a, 1100  %conv = sext i1 %cmp to i64101  ret i64 %conv102}103 104define signext i64 @setnbcr8(i16 %a) {105; CHECK-LABEL: setnbcr8:106; CHECK:       # %bb.0: # %entry107; CHECK-NEXT:    andi. r3, r3, 65535108; CHECK-NEXT:    setnbcr r3, eq109; CHECK-NEXT:    blr110entry:111  %cmp = icmp uge i16 %a, 1112  %conv = sext i1 %cmp to i64113  ret i64 %conv114}115 116define dso_local void @setnbcr9(i8 %a) {117; CHECK-LE-LABEL: setnbcr9:118; CHECK-LE:       # %bb.0: # %entry119; CHECK-LE-NEXT:    andi. r3, r3, 255120; CHECK-LE-NEXT:    setnbcr r3, eq121; CHECK-LE-NEXT:    pstb r3, globalVal@PCREL(0), 1122; CHECK-LE-NEXT:    blr123;124; CHECK-BE-LABEL: setnbcr9:125; CHECK-BE:       # %bb.0: # %entry126; CHECK-BE-NEXT:    andi. r3, r3, 255127; CHECK-BE-NEXT:    addis r4, r2, globalVal@toc@ha128; CHECK-BE-NEXT:    setnbcr r3, eq129; CHECK-BE-NEXT:    stb r3, globalVal@toc@l(r4)130; CHECK-BE-NEXT:    blr131entry:132  %cmp = icmp uge i8 %a, 1133  %conv1 = sext i1 %cmp to i8134  store i8 %conv1, ptr @globalVal, align 1135  ret void136}137 138define dso_local void @setnbcr10(i32 %a) {139; CHECK-LE-LABEL: setnbcr10:140; CHECK-LE:       # %bb.0: # %entry141; CHECK-LE-NEXT:    cmpwi r3, 0142; CHECK-LE-NEXT:    setnbcr r3, eq143; CHECK-LE-NEXT:    pstw r3, globalVal2@PCREL(0), 1144; CHECK-LE-NEXT:    blr145;146; CHECK-BE-LABEL: setnbcr10:147; CHECK-BE:       # %bb.0: # %entry148; CHECK-BE-NEXT:    cmpwi r3, 0149; CHECK-BE-NEXT:    addis r4, r2, globalVal2@toc@ha150; CHECK-BE-NEXT:    setnbcr r3, eq151; CHECK-BE-NEXT:    stw r3, globalVal2@toc@l(r4)152; CHECK-BE-NEXT:    blr153entry:154  %cmp = icmp uge i32 %a, 1155  %conv1 = sext i1 %cmp to i32156  store i32 %conv1, ptr @globalVal2, align 4157  ret void158}159 160define dso_local void @setnbcr11(i64 %a) {161; CHECK-LE-LABEL: setnbcr11:162; CHECK-LE:       # %bb.0: # %entry163; CHECK-LE-NEXT:    cmpdi r3, 0164; CHECK-LE-NEXT:    setnbcr r3, eq165; CHECK-LE-NEXT:    pstd r3, globalVal3@PCREL(0), 1166; CHECK-LE-NEXT:    blr167;168; CHECK-BE-LABEL: setnbcr11:169; CHECK-BE:       # %bb.0: # %entry170; CHECK-BE-NEXT:    cmpdi r3, 0171; CHECK-BE-NEXT:    addis r4, r2, globalVal3@toc@ha172; CHECK-BE-NEXT:    setnbcr r3, eq173; CHECK-BE-NEXT:    std r3, globalVal3@toc@l(r4)174; CHECK-BE-NEXT:    blr175entry:176  %cmp = icmp uge i64 %a, 1177  %conv1 = sext i1 %cmp to i64178  store i64 %conv1, ptr @globalVal3, align 8179  ret void180}181 182define dso_local void @setnbcr12(i16 %a) {183; CHECK-LE-LABEL: setnbcr12:184; CHECK-LE:       # %bb.0: # %entry185; CHECK-LE-NEXT:    andi. r3, r3, 65535186; CHECK-LE-NEXT:    setnbcr r3, eq187; CHECK-LE-NEXT:    psth r3, globalVal4@PCREL(0), 1188; CHECK-LE-NEXT:    blr189;190; CHECK-BE-LABEL: setnbcr12:191; CHECK-BE:       # %bb.0: # %entry192; CHECK-BE-NEXT:    andi. r3, r3, 65535193; CHECK-BE-NEXT:    addis r4, r2, globalVal4@toc@ha194; CHECK-BE-NEXT:    setnbcr r3, eq195; CHECK-BE-NEXT:    sth r3, globalVal4@toc@l(r4)196; CHECK-BE-NEXT:    blr197entry:198  %cmp = icmp uge i16 %a, 1199  %conv1 = sext i1 %cmp to i16200  store i16 %conv1, ptr @globalVal4, align 2201  ret void202}203 204define dso_local signext i32 @setnbcr13(i8 %a) {205; CHECK-LABEL: setnbcr13:206; CHECK:       # %bb.0: # %entry207; CHECK-NEXT:    clrlwi r3, r3, 24208; CHECK-NEXT:    cmpwi r3, 1209; CHECK-NEXT:    setnbcr r3, eq210; CHECK-NEXT:    blr211entry:212  %cmp = icmp ne i8 %a, 1213  %conv = sext i1 %cmp to i32214  ret i32 %conv215}216 217define dso_local signext i32 @setnbcr14(i32 %a) {218; CHECK-LABEL: setnbcr14:219; CHECK:       # %bb.0: # %entry220; CHECK-NEXT:    cmpwi r3, 1221; CHECK-NEXT:    setnbcr r3, eq222; CHECK-NEXT:    blr223entry:224  %cmp = icmp ne i32 %a, 1225  %conv = sext i1 %cmp to i32226  ret i32 %conv227}228 229define dso_local signext i32 @setnbcr15(i64 %a) {230; CHECK-LABEL: setnbcr15:231; CHECK:       # %bb.0: # %entry232; CHECK-NEXT:    cmpdi r3, 1233; CHECK-NEXT:    setnbcr r3, eq234; CHECK-NEXT:    blr235entry:236  %cmp = icmp ne i64 %a, 1237  %conv = sext i1 %cmp to i32238  ret i32 %conv239}240 241define dso_local signext i32 @setnbcr16(i16 %a) {242; CHECK-LABEL: setnbcr16:243; CHECK:       # %bb.0: # %entry244; CHECK-NEXT:    clrlwi r3, r3, 16245; CHECK-NEXT:    cmpwi r3, 1246; CHECK-NEXT:    setnbcr r3, eq247; CHECK-NEXT:    blr248entry:249  %cmp = icmp ne i16 %a, 1250  %conv = sext i1 %cmp to i32251  ret i32 %conv252}253 254define signext i64 @setnbcr17(i8 %a) {255; CHECK-LABEL: setnbcr17:256; CHECK:       # %bb.0: # %entry257; CHECK-NEXT:    clrlwi r3, r3, 24258; CHECK-NEXT:    cmpwi r3, 1259; CHECK-NEXT:    setnbcr r3, eq260; CHECK-NEXT:    blr261entry:262  %cmp = icmp ne i8 %a, 1263  %conv = sext i1 %cmp to i64264  ret i64 %conv265}266 267define signext i64 @setnbcr18(i32 %a) {268; CHECK-LABEL: setnbcr18:269; CHECK:       # %bb.0: # %entry270; CHECK-NEXT:    cmpwi r3, 1271; CHECK-NEXT:    setnbcr r3, eq272; CHECK-NEXT:    blr273entry:274  %cmp = icmp ne i32 %a, 1275  %conv = sext i1 %cmp to i64276  ret i64 %conv277}278 279define signext i64 @setnbcr19(i64 %a) {280; CHECK-LABEL: setnbcr19:281; CHECK:       # %bb.0: # %entry282; CHECK-NEXT:    cmpdi r3, 1283; CHECK-NEXT:    setnbcr r3, eq284; CHECK-NEXT:    blr285entry:286  %cmp = icmp ne i64 %a, 1287  %conv = sext i1 %cmp to i64288  ret i64 %conv289}290 291define signext i64 @setnbcr20(i16 %a) {292; CHECK-LABEL: setnbcr20:293; CHECK:       # %bb.0: # %entry294; CHECK-NEXT:    clrlwi r3, r3, 16295; CHECK-NEXT:    cmpwi r3, 1296; CHECK-NEXT:    setnbcr r3, eq297; CHECK-NEXT:    blr298entry:299  %cmp = icmp ne i16 %a, 1300  %conv = sext i1 %cmp to i64301  ret i64 %conv302}303 304define dso_local void @setnbcr21(i8 %a) {305; CHECK-LE-LABEL: setnbcr21:306; CHECK-LE:       # %bb.0: # %entry307; CHECK-LE-NEXT:    clrlwi r3, r3, 24308; CHECK-LE-NEXT:    cmpwi r3, 1309; CHECK-LE-NEXT:    setnbcr r3, eq310; CHECK-LE-NEXT:    pstb r3, globalVal@PCREL(0), 1311; CHECK-LE-NEXT:    blr312;313; CHECK-BE-LABEL: setnbcr21:314; CHECK-BE:       # %bb.0: # %entry315; CHECK-BE-NEXT:    clrlwi r3, r3, 24316; CHECK-BE-NEXT:    addis r4, r2, globalVal@toc@ha317; CHECK-BE-NEXT:    cmpwi r3, 1318; CHECK-BE-NEXT:    setnbcr r3, eq319; CHECK-BE-NEXT:    stb r3, globalVal@toc@l(r4)320; CHECK-BE-NEXT:    blr321entry:322  %cmp = icmp ne i8 %a, 1323  %conv1 = sext i1 %cmp to i8324  store i8 %conv1, ptr @globalVal, align 1325  ret void326}327 328define dso_local void @setnbcr22(i32 %a) {329; CHECK-LE-LABEL: setnbcr22:330; CHECK-LE:       # %bb.0: # %entry331; CHECK-LE-NEXT:    cmpwi r3, 1332; CHECK-LE-NEXT:    setnbcr r3, eq333; CHECK-LE-NEXT:    pstw r3, globalVal2@PCREL(0), 1334; CHECK-LE-NEXT:    blr335;336; CHECK-BE-LABEL: setnbcr22:337; CHECK-BE:       # %bb.0: # %entry338; CHECK-BE-NEXT:    cmpwi r3, 1339; CHECK-BE-NEXT:    addis r4, r2, globalVal2@toc@ha340; CHECK-BE-NEXT:    setnbcr r3, eq341; CHECK-BE-NEXT:    stw r3, globalVal2@toc@l(r4)342; CHECK-BE-NEXT:    blr343entry:344  %cmp = icmp ne i32 %a, 1345  %conv1 = sext i1 %cmp to i32346  store i32 %conv1, ptr @globalVal2, align 4347  ret void348}349 350define dso_local void @setnbcr23(i64 %a) {351; CHECK-LE-LABEL: setnbcr23:352; CHECK-LE:       # %bb.0: # %entry353; CHECK-LE-NEXT:    cmpdi r3, 1354; CHECK-LE-NEXT:    setnbcr r3, eq355; CHECK-LE-NEXT:    pstd r3, globalVal3@PCREL(0), 1356; CHECK-LE-NEXT:    blr357;358; CHECK-BE-LABEL: setnbcr23:359; CHECK-BE:       # %bb.0: # %entry360; CHECK-BE-NEXT:    cmpdi r3, 1361; CHECK-BE-NEXT:    addis r4, r2, globalVal3@toc@ha362; CHECK-BE-NEXT:    setnbcr r3, eq363; CHECK-BE-NEXT:    std r3, globalVal3@toc@l(r4)364; CHECK-BE-NEXT:    blr365entry:366  %cmp = icmp ne i64 %a, 1367  %conv1 = sext i1 %cmp to i64368  store i64 %conv1, ptr @globalVal3, align 8369  ret void370}371 372define dso_local void @setnbcr24(i16 %a) {373; CHECK-LE-LABEL: setnbcr24:374; CHECK-LE:       # %bb.0: # %entry375; CHECK-LE-NEXT:    clrlwi r3, r3, 16376; CHECK-LE-NEXT:    cmpwi r3, 1377; CHECK-LE-NEXT:    setnbcr r3, eq378; CHECK-LE-NEXT:    psth r3, globalVal4@PCREL(0), 1379; CHECK-LE-NEXT:    blr380;381; CHECK-BE-LABEL: setnbcr24:382; CHECK-BE:       # %bb.0: # %entry383; CHECK-BE-NEXT:    clrlwi r3, r3, 16384; CHECK-BE-NEXT:    addis r4, r2, globalVal4@toc@ha385; CHECK-BE-NEXT:    cmpwi r3, 1386; CHECK-BE-NEXT:    setnbcr r3, eq387; CHECK-BE-NEXT:    sth r3, globalVal4@toc@l(r4)388; CHECK-BE-NEXT:    blr389entry:390  %cmp = icmp ne i16 %a, 1391  %conv1 = sext i1 %cmp to i16392  store i16 %conv1, ptr @globalVal4, align 2393  ret void394}395 396