1058 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 20 21define dso_local signext i32 @setbcr1(i32 signext %a, i32 signext %b) {22; CHECK-LABEL: setbcr1:23; CHECK: # %bb.0: # %entry24; CHECK-NEXT: cmpw r3, r425; CHECK-NEXT: setbcr r3, lt26; CHECK-NEXT: blr27entry:28 %cmp = icmp sge i32 %a, %b29 %lnot.ext = zext i1 %cmp to i3230 ret i32 %lnot.ext31}32 33 34define dso_local signext i32 @setbcr2(i32 signext %a, i32 signext %b) {35; CHECK-LABEL: setbcr2:36; CHECK: # %bb.0: # %entry37; CHECK-NEXT: cmpw r3, r438; CHECK-NEXT: setbcr r3, gt39; CHECK-NEXT: blr40entry:41 %cmp = icmp sle i32 %a, %b42 %lnot.ext = zext i1 %cmp to i3243 ret i32 %lnot.ext44}45 46 47define dso_local signext i32 @setbcr3(i32 signext %a, i32 signext %b) {48; CHECK-LABEL: setbcr3:49; CHECK: # %bb.0: # %entry50; CHECK-NEXT: cmpw r3, r451; CHECK-NEXT: setbcr r3, eq52; CHECK-NEXT: blr53entry:54 %cmp = icmp ne i32 %a, %b55 %lnot.ext = zext i1 %cmp to i3256 ret i32 %lnot.ext57}58 59 60define dso_local signext i32 @setbcr4(i8 signext %a, i8 signext %b) {61; CHECK-LABEL: setbcr4:62; CHECK: # %bb.0: # %entry63; CHECK-NEXT: cmpw r3, r464; CHECK-NEXT: setbcr r3, lt65; CHECK-NEXT: blr66entry:67 %cmp = icmp sge i8 %a, %b68 %conv2 = zext i1 %cmp to i3269 ret i32 %conv270}71 72 73define dso_local void @setbcr5(i8 signext %a, i8 signext %b) {74; CHECK-LE-LABEL: setbcr5:75; CHECK-LE: # %bb.0: # %entry76; CHECK-LE-NEXT: cmpw r3, r477; CHECK-LE-NEXT: setbcr r3, lt78; CHECK-LE-NEXT: pstb r3, globalVal@PCREL(0), 179; CHECK-LE-NEXT: blr80;81; CHECK-BE-LABEL: setbcr5:82; CHECK-BE: # %bb.0: # %entry83; CHECK-BE-NEXT: cmpw r3, r484; CHECK-BE-NEXT: addis r4, r2, globalVal@toc@ha85; CHECK-BE-NEXT: setbcr r3, lt86; CHECK-BE-NEXT: stb r3, globalVal@toc@l(r4)87; CHECK-BE-NEXT: blr88entry:89 %cmp = icmp sge i8 %a, %b90 %conv3 = zext i1 %cmp to i891 store i8 %conv3, ptr @globalVal, align 192 ret void93}94 95 96define dso_local void @setbcr6(i32 signext %a, i32 signext %b) {97; CHECK-LE-LABEL: setbcr6:98; CHECK-LE: # %bb.0: # %entry99; CHECK-LE-NEXT: cmpw r3, r4100; CHECK-LE-NEXT: setbcr r3, lt101; CHECK-LE-NEXT: pstw r3, globalVal2@PCREL(0), 1102; CHECK-LE-NEXT: blr103;104; CHECK-BE-LABEL: setbcr6:105; CHECK-BE: # %bb.0: # %entry106; CHECK-BE-NEXT: cmpw r3, r4107; CHECK-BE-NEXT: addis r4, r2, globalVal2@toc@ha108; CHECK-BE-NEXT: setbcr r3, lt109; CHECK-BE-NEXT: stw r3, globalVal2@toc@l(r4)110; CHECK-BE-NEXT: blr111entry:112 %cmp = icmp sge i32 %a, %b113 %conv = zext i1 %cmp to i32114 store i32 %conv, ptr @globalVal2, align 4115 ret void116}117 118 119define dso_local signext i32 @setbcr7(i64 %a, i64 %b) {120; CHECK-LABEL: setbcr7:121; CHECK: # %bb.0: # %entry122; CHECK-NEXT: cmpd r3, r4123; CHECK-NEXT: setbcr r3, lt124; CHECK-NEXT: blr125entry:126 %cmp = icmp sge i64 %a, %b127 %conv = zext i1 %cmp to i32128 ret i32 %conv129}130 131 132define signext i64 @setbcr8(i64 %a, i64 %b) {133; CHECK-LABEL: setbcr8:134; CHECK: # %bb.0: # %entry135; CHECK-NEXT: cmpd r3, r4136; CHECK-NEXT: setbcr r3, lt137; CHECK-NEXT: blr138entry:139 %cmp = icmp sge i64 %a, %b140 %conv = zext i1 %cmp to i64141 ret i64 %conv142}143 144 145define dso_local void @setbcr9(i64 %a, i64 %b) {146; CHECK-LE-LABEL: setbcr9:147; CHECK-LE: # %bb.0: # %entry148; CHECK-LE-NEXT: cmpd r3, r4149; CHECK-LE-NEXT: setbcr r3, lt150; CHECK-LE-NEXT: pstd r3, globalVal3@PCREL(0), 1151; CHECK-LE-NEXT: blr152;153; CHECK-BE-LABEL: setbcr9:154; CHECK-BE: # %bb.0: # %entry155; CHECK-BE-NEXT: cmpd r3, r4156; CHECK-BE-NEXT: addis r4, r2, globalVal3@toc@ha157; CHECK-BE-NEXT: setbcr r3, lt158; CHECK-BE-NEXT: std r3, globalVal3@toc@l(r4)159; CHECK-BE-NEXT: blr160entry:161 %cmp = icmp sge i64 %a, %b162 %conv1 = zext i1 %cmp to i64163 store i64 %conv1, ptr @globalVal3, align 8164 ret void165}166 167 168define dso_local signext i32 @setbcr10(i16 signext %a, i16 signext %b) {169; CHECK-LABEL: setbcr10:170; CHECK: # %bb.0: # %entry171; CHECK-NEXT: cmpw r3, r4172; CHECK-NEXT: setbcr r3, lt173; CHECK-NEXT: blr174entry:175 %cmp = icmp sge i16 %a, %b176 %conv2 = zext i1 %cmp to i32177 ret i32 %conv2178}179 180 181define dso_local void @setbcr11(i16 signext %a, i16 signext %b) {182; CHECK-LE-LABEL: setbcr11:183; CHECK-LE: # %bb.0: # %entry184; CHECK-LE-NEXT: cmpw r3, r4185; CHECK-LE-NEXT: setbcr r3, lt186; CHECK-LE-NEXT: psth r3, globalVal4@PCREL(0), 1187; CHECK-LE-NEXT: blr188;189; CHECK-BE-LABEL: setbcr11:190; CHECK-BE: # %bb.0: # %entry191; CHECK-BE-NEXT: cmpw r3, r4192; CHECK-BE-NEXT: addis r4, r2, globalVal4@toc@ha193; CHECK-BE-NEXT: setbcr r3, lt194; CHECK-BE-NEXT: sth r3, globalVal4@toc@l(r4)195; CHECK-BE-NEXT: blr196entry:197 %cmp = icmp sge i16 %a, %b198 %conv3 = zext i1 %cmp to i16199 store i16 %conv3, ptr @globalVal4, align 2200 ret void201}202 203 204define dso_local signext i32 @setbcr12(i64 %a, i64 %b) {205; CHECK-LABEL: setbcr12:206; CHECK: # %bb.0: # %entry207; CHECK-NEXT: cmpld r3, r4208; CHECK-NEXT: setbcr r3, lt209; CHECK-NEXT: blr210entry:211 %cmp = icmp uge i64 %a, %b212 %conv = zext i1 %cmp to i32213 ret i32 %conv214}215 216 217define dso_local void @setbcr13(i64 %a, i64 %b) {218; CHECK-LE-LABEL: setbcr13:219; CHECK-LE: # %bb.0: # %entry220; CHECK-LE-NEXT: cmpld r3, r4221; CHECK-LE-NEXT: setbcr r3, lt222; CHECK-LE-NEXT: pstd r3, globalVal3@PCREL(0), 1223; CHECK-LE-NEXT: blr224;225; CHECK-BE-LABEL: setbcr13:226; CHECK-BE: # %bb.0: # %entry227; CHECK-BE-NEXT: cmpld r3, r4228; CHECK-BE-NEXT: addis r4, r2, globalVal3@toc@ha229; CHECK-BE-NEXT: setbcr r3, lt230; CHECK-BE-NEXT: std r3, globalVal3@toc@l(r4)231; CHECK-BE-NEXT: blr232entry:233 %cmp = icmp uge i64 %a, %b234 %conv1 = zext i1 %cmp to i64235 store i64 %conv1, ptr @globalVal3236 ret void237}238 239 240define dso_local signext i32 @setbcr14(i8 signext %a, i8 signext %b) {241; CHECK-LABEL: setbcr14:242; CHECK: # %bb.0: # %entry243; CHECK-NEXT: cmpw r3, r4244; CHECK-NEXT: setbcr r3, gt245; CHECK-NEXT: blr246entry:247 %cmp = icmp sle i8 %a, %b248 %conv2 = zext i1 %cmp to i32249 ret i32 %conv2250}251 252 253define dso_local void @setbcr15(i8 signext %a, i8 signext %b) {254; CHECK-LE-LABEL: setbcr15:255; CHECK-LE: # %bb.0: # %entry256; CHECK-LE-NEXT: cmpw r3, r4257; CHECK-LE-NEXT: setbcr r3, gt258; CHECK-LE-NEXT: pstb r3, globalVal@PCREL(0), 1259; CHECK-LE-NEXT: blr260;261; CHECK-BE-LABEL: setbcr15:262; CHECK-BE: # %bb.0: # %entry263; CHECK-BE-NEXT: cmpw r3, r4264; CHECK-BE-NEXT: addis r4, r2, globalVal@toc@ha265; CHECK-BE-NEXT: setbcr r3, gt266; CHECK-BE-NEXT: stb r3, globalVal@toc@l(r4)267; CHECK-BE-NEXT: blr268entry:269 %cmp = icmp sle i8 %a, %b270 %conv3 = zext i1 %cmp to i8271 store i8 %conv3, ptr @globalVal, align 1272 ret void273}274 275 276define dso_local signext i32 @setbcr16(i32 signext %a, i32 signext %b) {277; CHECK-LABEL: setbcr16:278; CHECK: # %bb.0: # %entry279; CHECK-NEXT: cmpw r3, r4280; CHECK-NEXT: setbcr r3, gt281; CHECK-NEXT: blr282entry:283 %cmp = icmp sle i32 %a, %b284 %conv = zext i1 %cmp to i32285 ret i32 %conv286}287 288 289define dso_local void @setbcr17(i32 signext %a, i32 signext %b) {290; CHECK-LE-LABEL: setbcr17:291; CHECK-LE: # %bb.0: # %entry292; CHECK-LE-NEXT: cmpw r3, r4293; CHECK-LE-NEXT: setbcr r3, gt294; CHECK-LE-NEXT: pstw r3, globalVal2@PCREL(0), 1295; CHECK-LE-NEXT: blr296;297; CHECK-BE-LABEL: setbcr17:298; CHECK-BE: # %bb.0: # %entry299; CHECK-BE-NEXT: cmpw r3, r4300; CHECK-BE-NEXT: addis r4, r2, globalVal2@toc@ha301; CHECK-BE-NEXT: setbcr r3, gt302; CHECK-BE-NEXT: stw r3, globalVal2@toc@l(r4)303; CHECK-BE-NEXT: blr304entry:305 %cmp = icmp sle i32 %a, %b306 %conv = zext i1 %cmp to i32307 store i32 %conv, ptr @globalVal2, align 4308 ret void309}310 311 312define dso_local signext i32 @setbcr18(i64 %a, i64 %b) {313; CHECK-LABEL: setbcr18:314; CHECK: # %bb.0: # %entry315; CHECK-NEXT: cmpd r3, r4316; CHECK-NEXT: setbcr r3, gt317; CHECK-NEXT: blr318entry:319 %cmp = icmp sle i64 %a, %b320 %conv = zext i1 %cmp to i32321 ret i32 %conv322}323 324 325define dso_local void @setbcr19(i64 %a, i64 %b) {326; CHECK-LE-LABEL: setbcr19:327; CHECK-LE: # %bb.0: # %entry328; CHECK-LE-NEXT: cmpd r3, r4329; CHECK-LE-NEXT: setbcr r3, gt330; CHECK-LE-NEXT: pstd r3, globalVal3@PCREL(0), 1331; CHECK-LE-NEXT: blr332;333; CHECK-BE-LABEL: setbcr19:334; CHECK-BE: # %bb.0: # %entry335; CHECK-BE-NEXT: cmpd r3, r4336; CHECK-BE-NEXT: addis r4, r2, globalVal3@toc@ha337; CHECK-BE-NEXT: setbcr r3, gt338; CHECK-BE-NEXT: std r3, globalVal3@toc@l(r4)339; CHECK-BE-NEXT: blr340entry:341 %cmp = icmp sle i64 %a, %b342 %conv1 = zext i1 %cmp to i64343 store i64 %conv1, ptr @globalVal3, align 8344 ret void345}346 347 348define dso_local signext i32 @setbcr20(i16 signext %a, i16 signext %b) {349; CHECK-LABEL: setbcr20:350; CHECK: # %bb.0: # %entry351; CHECK-NEXT: cmpw r3, r4352; CHECK-NEXT: setbcr r3, gt353; CHECK-NEXT: blr354entry:355 %cmp = icmp sle i16 %a, %b356 %conv2 = zext i1 %cmp to i32357 ret i32 %conv2358}359 360 361define dso_local void @setbcr21(i16 signext %a, i16 signext %b) {362; CHECK-LE-LABEL: setbcr21:363; CHECK-LE: # %bb.0: # %entry364; CHECK-LE-NEXT: cmpw r3, r4365; CHECK-LE-NEXT: setbcr r3, gt366; CHECK-LE-NEXT: psth r3, globalVal4@PCREL(0), 1367; CHECK-LE-NEXT: blr368;369; CHECK-BE-LABEL: setbcr21:370; CHECK-BE: # %bb.0: # %entry371; CHECK-BE-NEXT: cmpw r3, r4372; CHECK-BE-NEXT: addis r4, r2, globalVal4@toc@ha373; CHECK-BE-NEXT: setbcr r3, gt374; CHECK-BE-NEXT: sth r3, globalVal4@toc@l(r4)375; CHECK-BE-NEXT: blr376entry:377 %cmp = icmp sle i16 %a, %b378 %conv3 = zext i1 %cmp to i16379 store i16 %conv3, ptr @globalVal4, align 2380 ret void381}382 383 384define dso_local signext i32 @setbcr22(i64 %a, i64 %b) {385; CHECK-LABEL: setbcr22:386; CHECK: # %bb.0: # %entry387; CHECK-NEXT: cmpld r3, r4388; CHECK-NEXT: setbcr r3, gt389; CHECK-NEXT: blr390entry:391 %cmp = icmp ule i64 %a, %b392 %conv = zext i1 %cmp to i32393 ret i32 %conv394}395 396 397define dso_local void @setbcr23(i64 %a, i64 %b) {398; CHECK-LE-LABEL: setbcr23:399; CHECK-LE: # %bb.0: # %entry400; CHECK-LE-NEXT: cmpld r3, r4401; CHECK-LE-NEXT: setbcr r3, gt402; CHECK-LE-NEXT: pstd r3, globalVal3@PCREL(0), 1403; CHECK-LE-NEXT: blr404;405; CHECK-BE-LABEL: setbcr23:406; CHECK-BE: # %bb.0: # %entry407; CHECK-BE-NEXT: cmpld r3, r4408; CHECK-BE-NEXT: addis r4, r2, globalVal3@toc@ha409; CHECK-BE-NEXT: setbcr r3, gt410; CHECK-BE-NEXT: std r3, globalVal3@toc@l(r4)411; CHECK-BE-NEXT: blr412entry:413 %cmp = icmp ule i64 %a, %b414 %conv1 = zext i1 %cmp to i64415 store i64 %conv1, ptr @globalVal3416 ret void417}418 419define dso_local signext i32 @setbcr24(i8 signext %a, i8 signext %b) {420; CHECK-LABEL: setbcr24:421; CHECK: # %bb.0: # %entry422; CHECK-NEXT: cmpw r3, r4423; CHECK-NEXT: setbcr r3, eq424; CHECK-NEXT: blr425entry:426 %cmp = icmp ne i8 %a, %b427 %conv2 = zext i1 %cmp to i32428 ret i32 %conv2429}430 431define dso_local void @setbcr25(i8 signext %a, i8 signext %b) {432; CHECK-LE-LABEL: setbcr25:433; CHECK-LE: # %bb.0: # %entry434; CHECK-LE-NEXT: cmpw r3, r4435; CHECK-LE-NEXT: setbcr r3, eq436; CHECK-LE-NEXT: pstb r3, globalVal@PCREL(0), 1437; CHECK-LE-NEXT: blr438;439; CHECK-BE-LABEL: setbcr25:440; CHECK-BE: # %bb.0: # %entry441; CHECK-BE-NEXT: cmpw r3, r4442; CHECK-BE-NEXT: addis r4, r2, globalVal@toc@ha443; CHECK-BE-NEXT: setbcr r3, eq444; CHECK-BE-NEXT: stb r3, globalVal@toc@l(r4)445; CHECK-BE-NEXT: blr446entry:447 %cmp = icmp ne i8 %a, %b448 %conv3 = zext i1 %cmp to i8449 store i8 %conv3, ptr @globalVal, align 1450 ret void451}452 453define dso_local void @setbcr26(i32 signext %a, i32 signext %b) {454; CHECK-LE-LABEL: setbcr26:455; CHECK-LE: # %bb.0: # %entry456; CHECK-LE-NEXT: cmpw r3, r4457; CHECK-LE-NEXT: setbcr r3, eq458; CHECK-LE-NEXT: pstw r3, globalVal2@PCREL(0), 1459; CHECK-LE-NEXT: blr460;461; CHECK-BE-LABEL: setbcr26:462; CHECK-BE: # %bb.0: # %entry463; CHECK-BE-NEXT: cmpw r3, r4464; CHECK-BE-NEXT: addis r4, r2, globalVal2@toc@ha465; CHECK-BE-NEXT: setbcr r3, eq466; CHECK-BE-NEXT: stw r3, globalVal2@toc@l(r4)467; CHECK-BE-NEXT: blr468entry:469 %cmp = icmp ne i32 %a, %b470 %conv = zext i1 %cmp to i32471 store i32 %conv, ptr @globalVal2, align 4472 ret void473}474 475define dso_local signext i32 @setbcr27(i64 %a, i64 %b) {476; CHECK-LABEL: setbcr27:477; CHECK: # %bb.0: # %entry478; CHECK-NEXT: cmpd r3, r4479; CHECK-NEXT: setbcr r3, eq480; CHECK-NEXT: blr481entry:482 %cmp = icmp ne i64 %a, %b483 %conv = zext i1 %cmp to i32484 ret i32 %conv485}486 487define dso_local void @setbcr28(i64 %a, i64 %b) {488; CHECK-LE-LABEL: setbcr28:489; CHECK-LE: # %bb.0: # %entry490; CHECK-LE-NEXT: cmpd r3, r4491; CHECK-LE-NEXT: setbcr r3, eq492; CHECK-LE-NEXT: pstd r3, globalVal3@PCREL(0), 1493; CHECK-LE-NEXT: blr494;495; CHECK-BE-LABEL: setbcr28:496; CHECK-BE: # %bb.0: # %entry497; CHECK-BE-NEXT: cmpd r3, r4498; CHECK-BE-NEXT: addis r4, r2, globalVal3@toc@ha499; CHECK-BE-NEXT: setbcr r3, eq500; CHECK-BE-NEXT: std r3, globalVal3@toc@l(r4)501; CHECK-BE-NEXT: blr502entry:503 %cmp = icmp ne i64 %a, %b504 %conv1 = zext i1 %cmp to i64505 store i64 %conv1, ptr @globalVal3, align 8506 ret void507}508 509define dso_local signext i32 @setbcr29(i16 signext %a, i16 signext %b) {510; CHECK-LABEL: setbcr29:511; CHECK: # %bb.0: # %entry512; CHECK-NEXT: cmpw r3, r4513; CHECK-NEXT: setbcr r3, eq514; CHECK-NEXT: blr515entry:516 %cmp = icmp ne i16 %a, %b517 %conv2 = zext i1 %cmp to i32518 ret i32 %conv2519}520 521define dso_local void @setbcr30(i16 signext %a, i16 signext %b) {522; CHECK-LE-LABEL: setbcr30:523; CHECK-LE: # %bb.0: # %entry524; CHECK-LE-NEXT: cmpw r3, r4525; CHECK-LE-NEXT: setbcr r3, eq526; CHECK-LE-NEXT: psth r3, globalVal4@PCREL(0), 1527; CHECK-LE-NEXT: blr528;529; CHECK-BE-LABEL: setbcr30:530; CHECK-BE: # %bb.0: # %entry531; CHECK-BE-NEXT: cmpw r3, r4532; CHECK-BE-NEXT: addis r4, r2, globalVal4@toc@ha533; CHECK-BE-NEXT: setbcr r3, eq534; CHECK-BE-NEXT: sth r3, globalVal4@toc@l(r4)535; CHECK-BE-NEXT: blr536entry:537 %cmp = icmp ne i16 %a, %b538 %conv3 = zext i1 %cmp to i16539 store i16 %conv3, ptr @globalVal4, align 2540 ret void541}542 543define dso_local signext i32 @setbcr31(i8 zeroext %a, i8 zeroext %b) {544; CHECK-LABEL: setbcr31:545; CHECK: # %bb.0: # %entry546; CHECK-NEXT: cmpw r3, r4547; CHECK-NEXT: setbcr r3, eq548; CHECK-NEXT: blr549entry:550 %cmp = icmp ne i8 %a, %b551 %conv2 = zext i1 %cmp to i32552 ret i32 %conv2553}554 555define dso_local void @setbcr32(i8 zeroext %a, i8 zeroext %b) {556; CHECK-LE-LABEL: setbcr32:557; CHECK-LE: # %bb.0: # %entry558; CHECK-LE-NEXT: cmpw r3, r4559; CHECK-LE-NEXT: setbcr r3, eq560; CHECK-LE-NEXT: pstb r3, globalVal@PCREL(0), 1561; CHECK-LE-NEXT: blr562;563; CHECK-BE-LABEL: setbcr32:564; CHECK-BE: # %bb.0: # %entry565; CHECK-BE-NEXT: cmpw r3, r4566; CHECK-BE-NEXT: addis r4, r2, globalVal@toc@ha567; CHECK-BE-NEXT: setbcr r3, eq568; CHECK-BE-NEXT: stb r3, globalVal@toc@l(r4)569; CHECK-BE-NEXT: blr570entry:571 %cmp = icmp ne i8 %a, %b572 %conv3 = zext i1 %cmp to i8573 store i8 %conv3, ptr @globalVal, align 1574 ret void575}576 577define dso_local signext i32 @setbcr33(i32 zeroext %a, i32 zeroext %b) {578; CHECK-LABEL: setbcr33:579; CHECK: # %bb.0: # %entry580; CHECK-NEXT: cmpw r3, r4581; CHECK-NEXT: setbcr r3, eq582; CHECK-NEXT: blr583entry:584 %cmp = icmp ne i32 %a, %b585 %conv = zext i1 %cmp to i32586 ret i32 %conv587}588 589define dso_local void @setbcr34(i32 zeroext %a, i32 zeroext %b) {590; CHECK-LE-LABEL: setbcr34:591; CHECK-LE: # %bb.0: # %entry592; CHECK-LE-NEXT: cmpw r3, r4593; CHECK-LE-NEXT: setbcr r3, eq594; CHECK-LE-NEXT: pstw r3, globalVal2@PCREL(0), 1595; CHECK-LE-NEXT: blr596;597; CHECK-BE-LABEL: setbcr34:598; CHECK-BE: # %bb.0: # %entry599; CHECK-BE-NEXT: cmpw r3, r4600; CHECK-BE-NEXT: addis r4, r2, globalVal2@toc@ha601; CHECK-BE-NEXT: setbcr r3, eq602; CHECK-BE-NEXT: stw r3, globalVal2@toc@l(r4)603; CHECK-BE-NEXT: blr604entry:605 %cmp = icmp ne i32 %a, %b606 %conv = zext i1 %cmp to i32607 store i32 %conv, ptr @globalVal2, align 4608 ret void609}610 611define dso_local signext i32 @setbcr35(i16 zeroext %a, i16 zeroext %b) {612; CHECK-LABEL: setbcr35:613; CHECK: # %bb.0: # %entry614; CHECK-NEXT: cmpw r3, r4615; CHECK-NEXT: setbcr r3, eq616; CHECK-NEXT: blr617entry:618 %cmp = icmp ne i16 %a, %b619 %conv2 = zext i1 %cmp to i32620 ret i32 %conv2621}622 623define dso_local void @setbcr36(i16 zeroext %a, i16 zeroext %b) {624; CHECK-LE-LABEL: setbcr36:625; CHECK-LE: # %bb.0: # %entry626; CHECK-LE-NEXT: cmpw r3, r4627; CHECK-LE-NEXT: setbcr r3, eq628; CHECK-LE-NEXT: psth r3, globalVal4@PCREL(0), 1629; CHECK-LE-NEXT: blr630;631; CHECK-BE-LABEL: setbcr36:632; CHECK-BE: # %bb.0: # %entry633; CHECK-BE-NEXT: cmpw r3, r4634; CHECK-BE-NEXT: addis r4, r2, globalVal4@toc@ha635; CHECK-BE-NEXT: setbcr r3, eq636; CHECK-BE-NEXT: sth r3, globalVal4@toc@l(r4)637; CHECK-BE-NEXT: blr638entry:639 %cmp = icmp ne i16 %a, %b640 %conv3 = zext i1 %cmp to i16641 store i16 %conv3, ptr @globalVal4, align 2642 ret void643}644 645define i64 @setbcr37(i8 signext %a, i8 signext %b) {646; CHECK-LABEL: setbcr37:647; CHECK: # %bb.0: # %entry648; CHECK-NEXT: cmpw r3, r4649; CHECK-NEXT: setbcr r3, lt650; CHECK-NEXT: blr651entry:652 %cmp = icmp sge i8 %a, %b653 %conv3 = zext i1 %cmp to i64654 ret i64 %conv3655}656 657define dso_local void @setbcr38(i8 signext %a, i8 signext %b) {658; CHECK-LE-LABEL: setbcr38:659; CHECK-LE: # %bb.0: # %entry660; CHECK-LE-NEXT: cmpw r3, r4661; CHECK-LE-NEXT: setbcr r3, lt662; CHECK-LE-NEXT: pstb r3, globalVal@PCREL(0), 1663; CHECK-LE-NEXT: blr664;665; CHECK-BE-LABEL: setbcr38:666; CHECK-BE: # %bb.0: # %entry667; CHECK-BE-NEXT: cmpw r3, r4668; CHECK-BE-NEXT: addis r4, r2, globalVal@toc@ha669; CHECK-BE-NEXT: setbcr r3, lt670; CHECK-BE-NEXT: stb r3, globalVal@toc@l(r4)671; CHECK-BE-NEXT: blr672entry:673 %cmp = icmp sge i8 %a, %b674 %conv3 = zext i1 %cmp to i8675 store i8 %conv3, ptr @globalVal, align 1676 ret void677}678 679define i64 @setbcr39(i32 signext %a, i32 signext %b) {680; CHECK-LABEL: setbcr39:681; CHECK: # %bb.0: # %entry682; CHECK-NEXT: cmpw r3, r4683; CHECK-NEXT: setbcr r3, lt684; CHECK-NEXT: blr685entry:686 %cmp = icmp sge i32 %a, %b687 %conv1 = zext i1 %cmp to i64688 ret i64 %conv1689}690 691define dso_local void @setbcr40(i32 signext %a, i32 signext %b) {692; CHECK-LE-LABEL: setbcr40:693; CHECK-LE: # %bb.0: # %entry694; CHECK-LE-NEXT: cmpw r3, r4695; CHECK-LE-NEXT: setbcr r3, lt696; CHECK-LE-NEXT: pstw r3, globalVal2@PCREL(0), 1697; CHECK-LE-NEXT: blr698;699; CHECK-BE-LABEL: setbcr40:700; CHECK-BE: # %bb.0: # %entry701; CHECK-BE-NEXT: cmpw r3, r4702; CHECK-BE-NEXT: addis r4, r2, globalVal2@toc@ha703; CHECK-BE-NEXT: setbcr r3, lt704; CHECK-BE-NEXT: stw r3, globalVal2@toc@l(r4)705; CHECK-BE-NEXT: blr706entry:707 %cmp = icmp sge i32 %a, %b708 %conv = zext i1 %cmp to i32709 store i32 %conv, ptr @globalVal2, align 4710 ret void711}712 713define i64 @setbcr41(i64 %a, i64 %b) {714; CHECK-LABEL: setbcr41:715; CHECK: # %bb.0: # %entry716; CHECK-NEXT: cmpd r3, r4717; CHECK-NEXT: setbcr r3, lt718; CHECK-NEXT: blr719entry:720 %cmp = icmp sge i64 %a, %b721 %conv1 = zext i1 %cmp to i64722 ret i64 %conv1723}724 725define dso_local void @setbcr42(i64 %a, i64 %b) {726; CHECK-LE-LABEL: setbcr42:727; CHECK-LE: # %bb.0: # %entry728; CHECK-LE-NEXT: cmpd r3, r4729; CHECK-LE-NEXT: setbcr r3, lt730; CHECK-LE-NEXT: pstd r3, globalVal3@PCREL(0), 1731; CHECK-LE-NEXT: blr732;733; CHECK-BE-LABEL: setbcr42:734; CHECK-BE: # %bb.0: # %entry735; CHECK-BE-NEXT: cmpd r3, r4736; CHECK-BE-NEXT: addis r4, r2, globalVal3@toc@ha737; CHECK-BE-NEXT: setbcr r3, lt738; CHECK-BE-NEXT: std r3, globalVal3@toc@l(r4)739; CHECK-BE-NEXT: blr740entry:741 %cmp = icmp sge i64 %a, %b742 %conv1 = zext i1 %cmp to i64743 store i64 %conv1, ptr @globalVal3, align 8744 ret void745}746 747define i64 @setbcr43(i16 signext %a, i16 signext %b) {748; CHECK-LABEL: setbcr43:749; CHECK: # %bb.0: # %entry750; CHECK-NEXT: cmpw r3, r4751; CHECK-NEXT: setbcr r3, lt752; CHECK-NEXT: blr753entry:754 %cmp = icmp sge i16 %a, %b755 %conv3 = zext i1 %cmp to i64756 ret i64 %conv3757}758 759define dso_local void @setbcr44(i16 signext %a, i16 signext %b) {760; CHECK-LE-LABEL: setbcr44:761; CHECK-LE: # %bb.0: # %entry762; CHECK-LE-NEXT: cmpw r3, r4763; CHECK-LE-NEXT: setbcr r3, lt764; CHECK-LE-NEXT: psth r3, globalVal4@PCREL(0), 1765; CHECK-LE-NEXT: blr766;767; CHECK-BE-LABEL: setbcr44:768; CHECK-BE: # %bb.0: # %entry769; CHECK-BE-NEXT: cmpw r3, r4770; CHECK-BE-NEXT: addis r4, r2, globalVal4@toc@ha771; CHECK-BE-NEXT: setbcr r3, lt772; CHECK-BE-NEXT: sth r3, globalVal4@toc@l(r4)773; CHECK-BE-NEXT: blr774entry:775 %cmp = icmp sge i16 %a, %b776 %conv3 = zext i1 %cmp to i16777 store i16 %conv3, ptr @globalVal4, align 2778 ret void779}780 781 782define i64 @setbcr45(i64 %a, i64 %b) {783; CHECK-LABEL: setbcr45:784; CHECK: # %bb.0: # %entry785; CHECK-NEXT: cmpld r3, r4786; CHECK-NEXT: setbcr r3, lt787; CHECK-NEXT: blr788entry:789 %cmp = icmp uge i64 %a, %b790 %conv1 = zext i1 %cmp to i64791 ret i64 %conv1792}793 794 795define dso_local void @setbcr46(i64 %a, i64 %b) {796; CHECK-LE-LABEL: setbcr46:797; CHECK-LE: # %bb.0: # %entry798; CHECK-LE-NEXT: cmpld r3, r4799; CHECK-LE-NEXT: setbcr r3, lt800; CHECK-LE-NEXT: pstd r3, globalVal3@PCREL(0), 1801; CHECK-LE-NEXT: blr802;803; CHECK-BE-LABEL: setbcr46:804; CHECK-BE: # %bb.0: # %entry805; CHECK-BE-NEXT: cmpld r3, r4806; CHECK-BE-NEXT: addis r4, r2, globalVal3@toc@ha807; CHECK-BE-NEXT: setbcr r3, lt808; CHECK-BE-NEXT: std r3, globalVal3@toc@l(r4)809; CHECK-BE-NEXT: blr810entry:811 %cmp = icmp uge i64 %a, %b812 %conv1 = zext i1 %cmp to i64813 store i64 %conv1, ptr @globalVal3814 ret void815}816 817define i64 @setbcr47(i8 signext %a, i8 signext %b) {818; CHECK-LABEL: setbcr47:819; CHECK: # %bb.0: # %entry820; CHECK-NEXT: cmpw r3, r4821; CHECK-NEXT: setbcr r3, gt822; CHECK-NEXT: blr823entry:824 %cmp = icmp sle i8 %a, %b825 %conv3 = zext i1 %cmp to i64826 ret i64 %conv3827}828 829define dso_local void @setbcr48(i8 signext %a, i8 signext %b) {830; CHECK-LE-LABEL: setbcr48:831; CHECK-LE: # %bb.0: # %entry832; CHECK-LE-NEXT: cmpw r3, r4833; CHECK-LE-NEXT: setbcr r3, gt834; CHECK-LE-NEXT: pstb r3, globalVal@PCREL(0), 1835; CHECK-LE-NEXT: blr836;837; CHECK-BE-LABEL: setbcr48:838; CHECK-BE: # %bb.0: # %entry839; CHECK-BE-NEXT: cmpw r3, r4840; CHECK-BE-NEXT: addis r4, r2, globalVal@toc@ha841; CHECK-BE-NEXT: setbcr r3, gt842; CHECK-BE-NEXT: stb r3, globalVal@toc@l(r4)843; CHECK-BE-NEXT: blr844entry:845 %cmp = icmp sle i8 %a, %b846 %conv3 = zext i1 %cmp to i8847 store i8 %conv3, ptr @globalVal, align 1848 ret void849}850 851define i64 @setbcr49(i32 signext %a, i32 signext %b) {852; CHECK-LABEL: setbcr49:853; CHECK: # %bb.0: # %entry854; CHECK-NEXT: cmpw r3, r4855; CHECK-NEXT: setbcr r3, gt856; CHECK-NEXT: blr857entry:858 %cmp = icmp sle i32 %a, %b859 %conv1 = zext i1 %cmp to i64860 ret i64 %conv1861}862 863define dso_local void @setbcr50(i32 signext %a, i32 signext %b) {864; CHECK-LE-LABEL: setbcr50:865; CHECK-LE: # %bb.0: # %entry866; CHECK-LE-NEXT: cmpw r3, r4867; CHECK-LE-NEXT: setbcr r3, gt868; CHECK-LE-NEXT: pstw r3, globalVal2@PCREL(0), 1869; CHECK-LE-NEXT: blr870;871; CHECK-BE-LABEL: setbcr50:872; CHECK-BE: # %bb.0: # %entry873; CHECK-BE-NEXT: cmpw r3, r4874; CHECK-BE-NEXT: addis r4, r2, globalVal2@toc@ha875; CHECK-BE-NEXT: setbcr r3, gt876; CHECK-BE-NEXT: stw r3, globalVal2@toc@l(r4)877; CHECK-BE-NEXT: blr878entry:879 %cmp = icmp sle i32 %a, %b880 %conv = zext i1 %cmp to i32881 store i32 %conv, ptr @globalVal2, align 4882 ret void883}884 885 886define i64 @setbcr51(i64 %a, i64 %b) {887; CHECK-LABEL: setbcr51:888; CHECK: # %bb.0: # %entry889; CHECK-NEXT: cmpd r3, r4890; CHECK-NEXT: setbcr r3, gt891; CHECK-NEXT: blr892entry:893 %cmp = icmp sle i64 %a, %b894 %conv1 = zext i1 %cmp to i64895 ret i64 %conv1896}897 898 899define dso_local void @setbcr52(i64 %a, i64 %b) {900; CHECK-LE-LABEL: setbcr52:901; CHECK-LE: # %bb.0: # %entry902; CHECK-LE-NEXT: cmpd r3, r4903; CHECK-LE-NEXT: setbcr r3, gt904; CHECK-LE-NEXT: pstd r3, globalVal3@PCREL(0), 1905; CHECK-LE-NEXT: blr906;907; CHECK-BE-LABEL: setbcr52:908; CHECK-BE: # %bb.0: # %entry909; CHECK-BE-NEXT: cmpd r3, r4910; CHECK-BE-NEXT: addis r4, r2, globalVal3@toc@ha911; CHECK-BE-NEXT: setbcr r3, gt912; CHECK-BE-NEXT: std r3, globalVal3@toc@l(r4)913; CHECK-BE-NEXT: blr914entry:915 %cmp = icmp sle i64 %a, %b916 %conv1 = zext i1 %cmp to i64917 store i64 %conv1, ptr @globalVal3, align 8918 ret void919}920 921define i64 @setbcr53(i16 signext %a, i16 signext %b) {922; CHECK-LABEL: setbcr53:923; CHECK: # %bb.0: # %entry924; CHECK-NEXT: cmpw r3, r4925; CHECK-NEXT: setbcr r3, gt926; CHECK-NEXT: blr927entry:928 %cmp = icmp sle i16 %a, %b929 %conv3 = zext i1 %cmp to i64930 ret i64 %conv3931}932 933define dso_local void @setbcr54(i16 signext %a, i16 signext %b) {934; CHECK-LE-LABEL: setbcr54:935; CHECK-LE: # %bb.0: # %entry936; CHECK-LE-NEXT: cmpw r3, r4937; CHECK-LE-NEXT: setbcr r3, gt938; CHECK-LE-NEXT: psth r3, globalVal4@PCREL(0), 1939; CHECK-LE-NEXT: blr940;941; CHECK-BE-LABEL: setbcr54:942; CHECK-BE: # %bb.0: # %entry943; CHECK-BE-NEXT: cmpw r3, r4944; CHECK-BE-NEXT: addis r4, r2, globalVal4@toc@ha945; CHECK-BE-NEXT: setbcr r3, gt946; CHECK-BE-NEXT: sth r3, globalVal4@toc@l(r4)947; CHECK-BE-NEXT: blr948entry:949 %cmp = icmp sle i16 %a, %b950 %conv3 = zext i1 %cmp to i16951 store i16 %conv3, ptr @globalVal4, align 2952 ret void953}954 955 956define i64 @setbcr55(i64 %a, i64 %b) {957; CHECK-LABEL: setbcr55:958; CHECK: # %bb.0: # %entry959; CHECK-NEXT: cmpld r3, r4960; CHECK-NEXT: setbcr r3, gt961; CHECK-NEXT: blr962entry:963 %cmp = icmp ule i64 %a, %b964 %conv1 = zext i1 %cmp to i64965 ret i64 %conv1966}967 968 969define dso_local void @setbcr56(i64 %a, i64 %b) {970; CHECK-LE-LABEL: setbcr56:971; CHECK-LE: # %bb.0: # %entry972; CHECK-LE-NEXT: cmpld r3, r4973; CHECK-LE-NEXT: setbcr r3, gt974; CHECK-LE-NEXT: pstd r3, globalVal3@PCREL(0), 1975; CHECK-LE-NEXT: blr976;977; CHECK-BE-LABEL: setbcr56:978; CHECK-BE: # %bb.0: # %entry979; CHECK-BE-NEXT: cmpld r3, r4980; CHECK-BE-NEXT: addis r4, r2, globalVal3@toc@ha981; CHECK-BE-NEXT: setbcr r3, gt982; CHECK-BE-NEXT: std r3, globalVal3@toc@l(r4)983; CHECK-BE-NEXT: blr984entry:985 %cmp = icmp ule i64 %a, %b986 %conv1 = zext i1 %cmp to i64987 store i64 %conv1, ptr @globalVal3988 ret void989}990 991define i64 @setbcr57(i64 %a, i64 %b) {992; CHECK-LABEL: setbcr57:993; CHECK: # %bb.0: # %entry994; CHECK-NEXT: cmpd r3, r4995; CHECK-NEXT: setbcr r3, eq996; CHECK-NEXT: blr997entry:998 %cmp = icmp ne i64 %a, %b999 %conv1 = zext i1 %cmp to i641000 ret i64 %conv11001}1002 1003define dso_local void @setbcr58(i64 %a, i64 %b) {1004; CHECK-LE-LABEL: setbcr58:1005; CHECK-LE: # %bb.0: # %entry1006; CHECK-LE-NEXT: cmpd r3, r41007; CHECK-LE-NEXT: setbcr r3, eq1008; CHECK-LE-NEXT: pstd r3, globalVal3@PCREL(0), 11009; CHECK-LE-NEXT: blr1010;1011; CHECK-BE-LABEL: setbcr58:1012; CHECK-BE: # %bb.0: # %entry1013; CHECK-BE-NEXT: cmpd r3, r41014; CHECK-BE-NEXT: addis r4, r2, globalVal3@toc@ha1015; CHECK-BE-NEXT: setbcr r3, eq1016; CHECK-BE-NEXT: std r3, globalVal3@toc@l(r4)1017; CHECK-BE-NEXT: blr1018entry:1019 %cmp = icmp ne i64 %a, %b1020 %conv1 = zext i1 %cmp to i641021 store i64 %conv1, ptr @globalVal3, align 81022 ret void1023}1024 1025define i64 @setbcr59(i64 %a, i64 %b) {1026; CHECK-LABEL: setbcr59:1027; CHECK: # %bb.0: # %entry1028; CHECK-NEXT: cmpd r3, r41029; CHECK-NEXT: setbcr r3, eq1030; CHECK-NEXT: blr1031entry:1032 %cmp = icmp ne i64 %a, %b1033 %conv1 = zext i1 %cmp to i641034 ret i64 %conv11035}1036 1037define dso_local void @setbcr60(i64 %a, i64 %b) {1038; CHECK-LE-LABEL: setbcr60:1039; CHECK-LE: # %bb.0: # %entry1040; CHECK-LE-NEXT: cmpd r3, r41041; CHECK-LE-NEXT: setbcr r3, eq1042; CHECK-LE-NEXT: pstd r3, globalVal3@PCREL(0), 11043; CHECK-LE-NEXT: blr1044;1045; CHECK-BE-LABEL: setbcr60:1046; CHECK-BE: # %bb.0: # %entry1047; CHECK-BE-NEXT: cmpd r3, r41048; CHECK-BE-NEXT: addis r4, r2, globalVal3@toc@ha1049; CHECK-BE-NEXT: setbcr r3, eq1050; CHECK-BE-NEXT: std r3, globalVal3@toc@l(r4)1051; CHECK-BE-NEXT: blr1052entry:1053 %cmp = icmp ne i64 %a, %b1054 %conv1 = zext i1 %cmp to i641055 store i64 %conv1, ptr @globalVal3, align 81056 ret void1057}1058