1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; 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-LE 5; 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-BE 8 9; This file does not contain many test cases involving comparisons and logical 10; comparisons (cmplwi, cmpldi). This is because alternative code is generated 11; 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 should 13; be emitted on P10. 14 15@globalVal = common dso_local local_unnamed_addr global i8 0, align 1 16@globalVal2 = common dso_local local_unnamed_addr global i32 0, align 4 17@globalVal3 = common dso_local local_unnamed_addr global i64 0, align 8 18@globalVal4 = common dso_local local_unnamed_addr global i16 0, align 2 19 20define dso_local signext i32 @setnbc1(i8 %a) { 21; CHECK-LABEL: setnbc1: 22; CHECK: # %bb.0: # %entry 23; CHECK-NEXT: extsb r3, r3 24; CHECK-NEXT: cmpwi r3, 1 25; CHECK-NEXT: setnbc r3, lt 26; CHECK-NEXT: blr 27entry: 28 %cmp = icmp slt i8 %a, 1 29 %conv = sext i1 %cmp to i32 30 ret i32 %conv 31} 32 33define dso_local signext i32 @setnbc2(i32 %a) { 34; CHECK-LABEL: setnbc2: 35; CHECK: # %bb.0: # %entry 36; CHECK-NEXT: cmpwi r3, 1 37; CHECK-NEXT: setnbc r3, lt 38; CHECK-NEXT: blr 39entry: 40 %cmp = icmp slt i32 %a, 1 41 %conv = sext i1 %cmp to i32 42 ret i32 %conv 43} 44 45define dso_local signext i32 @setnbc3(i64 %a) { 46; CHECK-LABEL: setnbc3: 47; CHECK: # %bb.0: # %entry 48; CHECK-NEXT: cmpdi r3, 1 49; CHECK-NEXT: setnbc r3, lt 50; CHECK-NEXT: blr 51entry: 52 %cmp = icmp slt i64 %a, 1 53 %conv = sext i1 %cmp to i32 54 ret i32 %conv 55} 56 57define dso_local signext i32 @setnbc4(i16 %a) { 58; CHECK-LABEL: setnbc4: 59; CHECK: # %bb.0: # %entry 60; CHECK-NEXT: extsh r3, r3 61; CHECK-NEXT: cmpwi r3, 1 62; CHECK-NEXT: setnbc r3, lt 63; CHECK-NEXT: blr 64entry: 65 %cmp = icmp slt i16 %a, 1 66 %conv = sext i1 %cmp to i32 67 ret i32 %conv 68} 69 70define signext i64 @setnbc5(i8 %a) { 71; CHECK-LABEL: setnbc5: 72; CHECK: # %bb.0: # %entry 73; CHECK-NEXT: extsb r3, r3 74; CHECK-NEXT: cmpwi r3, 1 75; CHECK-NEXT: setnbc r3, lt 76; CHECK-NEXT: blr 77entry: 78 %cmp = icmp slt i8 %a, 1 79 %conv = sext i1 %cmp to i64 80 ret i64 %conv 81} 82 83define signext i64 @setnbc6(i32 %a) { 84; CHECK-LABEL: setnbc6: 85; CHECK: # %bb.0: # %entry 86; CHECK-NEXT: cmpwi r3, 1 87; CHECK-NEXT: setnbc r3, lt 88; CHECK-NEXT: blr 89entry: 90 %cmp = icmp slt i32 %a, 1 91 %conv = sext i1 %cmp to i64 92 ret i64 %conv 93} 94 95define signext i64 @setnbc7(i64 %a) { 96; CHECK-LABEL: setnbc7: 97; CHECK: # %bb.0: # %entry 98; CHECK-NEXT: cmpdi r3, 1 99; CHECK-NEXT: setnbc r3, lt 100; CHECK-NEXT: blr 101entry: 102 %cmp = icmp slt i64 %a, 1 103 %conv = sext i1 %cmp to i64 104 ret i64 %conv 105} 106 107define signext i64 @setnbc8(i16 %a) { 108; CHECK-LABEL: setnbc8: 109; CHECK: # %bb.0: # %entry 110; CHECK-NEXT: extsh r3, r3 111; CHECK-NEXT: cmpwi r3, 1 112; CHECK-NEXT: setnbc r3, lt 113; CHECK-NEXT: blr 114entry: 115 %cmp = icmp slt i16 %a, 1 116 %conv = sext i1 %cmp to i64 117 ret i64 %conv 118} 119 120define dso_local void @setnbc9(i8 %a) { 121; CHECK-LE-LABEL: setnbc9: 122; CHECK-LE: # %bb.0: # %entry 123; CHECK-LE-NEXT: extsb r3, r3 124; CHECK-LE-NEXT: cmpwi r3, 1 125; CHECK-LE-NEXT: setnbc r3, lt 126; CHECK-LE-NEXT: pstb r3, globalVal@PCREL(0), 1 127; CHECK-LE-NEXT: blr 128; 129; CHECK-BE-LABEL: setnbc9: 130; CHECK-BE: # %bb.0: # %entry 131; CHECK-BE-NEXT: extsb r3, r3 132; CHECK-BE-NEXT: addis r4, r2, globalVal@toc@ha 133; CHECK-BE-NEXT: cmpwi r3, 1 134; CHECK-BE-NEXT: setnbc r3, lt 135; CHECK-BE-NEXT: stb r3, globalVal@toc@l(r4) 136; CHECK-BE-NEXT: blr 137entry: 138 %cmp = icmp slt i8 %a, 1 139 %conv1 = sext i1 %cmp to i8 140 store i8 %conv1, ptr @globalVal, align 1 141 ret void 142} 143 144define dso_local void @setnbc10(i32 %a) { 145; CHECK-LE-LABEL: setnbc10: 146; CHECK-LE: # %bb.0: # %entry 147; CHECK-LE-NEXT: cmpwi r3, 1 148; CHECK-LE-NEXT: setnbc r3, lt 149; CHECK-LE-NEXT: pstw r3, globalVal2@PCREL(0), 1 150; CHECK-LE-NEXT: blr 151; 152; CHECK-BE-LABEL: setnbc10: 153; CHECK-BE: # %bb.0: # %entry 154; CHECK-BE-NEXT: cmpwi r3, 1 155; CHECK-BE-NEXT: addis r4, r2, globalVal2@toc@ha 156; CHECK-BE-NEXT: setnbc r3, lt 157; CHECK-BE-NEXT: stw r3, globalVal2@toc@l(r4) 158; CHECK-BE-NEXT: blr 159entry: 160 %cmp = icmp slt i32 %a, 1 161 %conv1 = sext i1 %cmp to i32 162 store i32 %conv1, ptr @globalVal2, align 4 163 ret void 164} 165 166define dso_local void @setnbc11(i64 %a) { 167; CHECK-LE-LABEL: setnbc11: 168; CHECK-LE: # %bb.0: # %entry 169; CHECK-LE-NEXT: cmpdi r3, 1 170; CHECK-LE-NEXT: setnbc r3, lt 171; CHECK-LE-NEXT: pstd r3, globalVal3@PCREL(0), 1 172; CHECK-LE-NEXT: blr 173; 174; CHECK-BE-LABEL: setnbc11: 175; CHECK-BE: # %bb.0: # %entry 176; CHECK-BE-NEXT: cmpdi r3, 1 177; CHECK-BE-NEXT: addis r4, r2, globalVal3@toc@ha 178; CHECK-BE-NEXT: setnbc r3, lt 179; CHECK-BE-NEXT: std r3, globalVal3@toc@l(r4) 180; CHECK-BE-NEXT: blr 181entry: 182 %cmp = icmp slt i64 %a, 1 183 %conv1 = sext i1 %cmp to i64 184 store i64 %conv1, ptr @globalVal3, align 8 185 ret void 186} 187 188define dso_local void @setnbc12(i16 %a) { 189; CHECK-LE-LABEL: setnbc12: 190; CHECK-LE: # %bb.0: # %entry 191; CHECK-LE-NEXT: extsh r3, r3 192; CHECK-LE-NEXT: cmpwi r3, 1 193; CHECK-LE-NEXT: setnbc r3, lt 194; CHECK-LE-NEXT: psth r3, globalVal4@PCREL(0), 1 195; CHECK-LE-NEXT: blr 196; 197; CHECK-BE-LABEL: setnbc12: 198; CHECK-BE: # %bb.0: # %entry 199; CHECK-BE-NEXT: extsh r3, r3 200; CHECK-BE-NEXT: addis r4, r2, globalVal4@toc@ha 201; CHECK-BE-NEXT: cmpwi r3, 1 202; CHECK-BE-NEXT: setnbc r3, lt 203; CHECK-BE-NEXT: sth r3, globalVal4@toc@l(r4) 204; CHECK-BE-NEXT: blr 205entry: 206 %cmp = icmp slt i16 %a, 1 207 %conv1 = sext i1 %cmp to i16 208 store i16 %conv1, ptr @globalVal4, align 2 209 ret void 210} 211 212define dso_local signext i32 @setnbc13(i8 %a) { 213; CHECK-LABEL: setnbc13: 214; CHECK: # %bb.0: # %entry 215; CHECK-NEXT: extsb r3, r3 216; CHECK-NEXT: cmpwi r3, 1 217; CHECK-NEXT: setnbc r3, gt 218; CHECK-NEXT: blr 219entry: 220 %cmp = icmp sgt i8 %a, 1 221 %conv = sext i1 %cmp to i32 222 ret i32 %conv 223} 224 225define dso_local signext i32 @setnbc14(i32 %a) { 226; CHECK-LABEL: setnbc14: 227; CHECK: # %bb.0: # %entry 228; CHECK-NEXT: cmpwi r3, 1 229; CHECK-NEXT: setnbc r3, gt 230; CHECK-NEXT: blr 231entry: 232 %cmp = icmp sgt i32 %a, 1 233 %conv = sext i1 %cmp to i32 234 ret i32 %conv 235} 236 237define dso_local signext i32 @setnbc15(i64 %a) { 238; CHECK-LABEL: setnbc15: 239; CHECK: # %bb.0: # %entry 240; CHECK-NEXT: cmpdi r3, 1 241; CHECK-NEXT: setnbc r3, gt 242; CHECK-NEXT: blr 243entry: 244 %cmp = icmp sgt i64 %a, 1 245 %conv = sext i1 %cmp to i32 246 ret i32 %conv 247} 248 249define dso_local signext i32 @setnbc16(i16 %a) { 250; CHECK-LABEL: setnbc16: 251; CHECK: # %bb.0: # %entry 252; CHECK-NEXT: extsh r3, r3 253; CHECK-NEXT: cmpwi r3, 1 254; CHECK-NEXT: setnbc r3, gt 255; CHECK-NEXT: blr 256entry: 257 %cmp = icmp sgt i16 %a, 1 258 %conv = sext i1 %cmp to i32 259 ret i32 %conv 260} 261 262define signext i64 @setnbc17(i8 %a) { 263; CHECK-LABEL: setnbc17: 264; CHECK: # %bb.0: # %entry 265; CHECK-NEXT: extsb r3, r3 266; CHECK-NEXT: cmpwi r3, 1 267; CHECK-NEXT: setnbc r3, gt 268; CHECK-NEXT: blr 269entry: 270 %cmp = icmp sgt i8 %a, 1 271 %conv = sext i1 %cmp to i64 272 ret i64 %conv 273} 274 275define signext i64 @setnbc18(i32 %a) { 276; CHECK-LABEL: setnbc18: 277; CHECK: # %bb.0: # %entry 278; CHECK-NEXT: cmpwi r3, 1 279; CHECK-NEXT: setnbc r3, gt 280; CHECK-NEXT: blr 281entry: 282 %cmp = icmp sgt i32 %a, 1 283 %conv = sext i1 %cmp to i64 284 ret i64 %conv 285} 286 287define signext i64 @setnbc19(i64 %a) { 288; CHECK-LABEL: setnbc19: 289; CHECK: # %bb.0: # %entry 290; CHECK-NEXT: cmpdi r3, 1 291; CHECK-NEXT: setnbc r3, gt 292; CHECK-NEXT: blr 293entry: 294 %cmp = icmp sgt i64 %a, 1 295 %conv = sext i1 %cmp to i64 296 ret i64 %conv 297} 298 299define signext i64 @setnbc20(i16 %a) { 300; CHECK-LABEL: setnbc20: 301; CHECK: # %bb.0: # %entry 302; CHECK-NEXT: extsh r3, r3 303; CHECK-NEXT: cmpwi r3, 1 304; CHECK-NEXT: setnbc r3, gt 305; CHECK-NEXT: blr 306entry: 307 %cmp = icmp sgt i16 %a, 1 308 %conv = sext i1 %cmp to i64 309 ret i64 %conv 310} 311 312define dso_local void @setnbc21(i8 %a) { 313; CHECK-LE-LABEL: setnbc21: 314; CHECK-LE: # %bb.0: # %entry 315; CHECK-LE-NEXT: extsb r3, r3 316; CHECK-LE-NEXT: cmpwi r3, 1 317; CHECK-LE-NEXT: setnbc r3, gt 318; CHECK-LE-NEXT: pstb r3, globalVal@PCREL(0), 1 319; CHECK-LE-NEXT: blr 320; 321; CHECK-BE-LABEL: setnbc21: 322; CHECK-BE: # %bb.0: # %entry 323; CHECK-BE-NEXT: extsb r3, r3 324; CHECK-BE-NEXT: addis r4, r2, globalVal@toc@ha 325; CHECK-BE-NEXT: cmpwi r3, 1 326; CHECK-BE-NEXT: setnbc r3, gt 327; CHECK-BE-NEXT: stb r3, globalVal@toc@l(r4) 328; CHECK-BE-NEXT: blr 329entry: 330 %cmp = icmp sgt i8 %a, 1 331 %conv1 = sext i1 %cmp to i8 332 store i8 %conv1, ptr @globalVal, align 1 333 ret void 334} 335 336define dso_local void @setnbc22(i32 %a) { 337; CHECK-LE-LABEL: setnbc22: 338; CHECK-LE: # %bb.0: # %entry 339; CHECK-LE-NEXT: cmpwi r3, 1 340; CHECK-LE-NEXT: setnbc r3, gt 341; CHECK-LE-NEXT: pstw r3, globalVal2@PCREL(0), 1 342; CHECK-LE-NEXT: blr 343; 344; CHECK-BE-LABEL: setnbc22: 345; CHECK-BE: # %bb.0: # %entry 346; CHECK-BE-NEXT: cmpwi r3, 1 347; CHECK-BE-NEXT: addis r4, r2, globalVal2@toc@ha 348; CHECK-BE-NEXT: setnbc r3, gt 349; CHECK-BE-NEXT: stw r3, globalVal2@toc@l(r4) 350; CHECK-BE-NEXT: blr 351entry: 352 %cmp = icmp sgt i32 %a, 1 353 %conv1 = sext i1 %cmp to i32 354 store i32 %conv1, ptr @globalVal2, align 4 355 ret void 356} 357 358define dso_local void @setnbc23(i64 %a) { 359; CHECK-LE-LABEL: setnbc23: 360; CHECK-LE: # %bb.0: # %entry 361; CHECK-LE-NEXT: cmpdi r3, 1 362; CHECK-LE-NEXT: setnbc r3, gt 363; CHECK-LE-NEXT: pstd r3, globalVal3@PCREL(0), 1 364; CHECK-LE-NEXT: blr 365; 366; CHECK-BE-LABEL: setnbc23: 367; CHECK-BE: # %bb.0: # %entry 368; CHECK-BE-NEXT: cmpdi r3, 1 369; CHECK-BE-NEXT: addis r4, r2, globalVal3@toc@ha 370; CHECK-BE-NEXT: setnbc r3, gt 371; CHECK-BE-NEXT: std r3, globalVal3@toc@l(r4) 372; CHECK-BE-NEXT: blr 373entry: 374 %cmp = icmp sgt i64 %a, 1 375 %conv1 = sext i1 %cmp to i64 376 store i64 %conv1, ptr @globalVal3, align 8 377 ret void 378} 379 380define dso_local void @setnbc24(i16 %a) { 381; CHECK-LE-LABEL: setnbc24: 382; CHECK-LE: # %bb.0: # %entry 383; CHECK-LE-NEXT: extsh r3, r3 384; CHECK-LE-NEXT: cmpwi r3, 1 385; CHECK-LE-NEXT: setnbc r3, gt 386; CHECK-LE-NEXT: psth r3, globalVal4@PCREL(0), 1 387; CHECK-LE-NEXT: blr 388; 389; CHECK-BE-LABEL: setnbc24: 390; CHECK-BE: # %bb.0: # %entry 391; CHECK-BE-NEXT: extsh r3, r3 392; CHECK-BE-NEXT: addis r4, r2, globalVal4@toc@ha 393; CHECK-BE-NEXT: cmpwi r3, 1 394; CHECK-BE-NEXT: setnbc r3, gt 395; CHECK-BE-NEXT: sth r3, globalVal4@toc@l(r4) 396; CHECK-BE-NEXT: blr 397entry: 398 %cmp = icmp sgt i16 %a, 1 399 %conv1 = sext i1 %cmp to i16 400 store i16 %conv1, ptr @globalVal4, align 2 401 ret void 402} 403 404define dso_local signext i32 @setnbc25(i8 %a) { 405; CHECK-LABEL: setnbc25: 406; CHECK: # %bb.0: # %entry 407; CHECK-NEXT: clrlwi r3, r3, 24 408; CHECK-NEXT: cmpwi r3, 1 409; CHECK-NEXT: setnbc r3, eq 410; CHECK-NEXT: blr 411entry: 412 %cmp = icmp eq i8 %a, 1 413 %conv = sext i1 %cmp to i32 414 ret i32 %conv 415} 416 417define dso_local signext i32 @setnbc26(i32 %a) { 418; CHECK-LABEL: setnbc26: 419; CHECK: # %bb.0: # %entry 420; CHECK-NEXT: cmpwi r3, 1 421; CHECK-NEXT: setnbc r3, eq 422; CHECK-NEXT: blr 423entry: 424 %cmp = icmp eq i32 %a, 1 425 %conv = sext i1 %cmp to i32 426 ret i32 %conv 427} 428 429define dso_local signext i32 @setnbc27(i64 %a) { 430; CHECK-LABEL: setnbc27: 431; CHECK: # %bb.0: # %entry 432; CHECK-NEXT: cmpdi r3, 1 433; CHECK-NEXT: setnbc r3, eq 434; CHECK-NEXT: blr 435entry: 436 %cmp = icmp eq i64 %a, 1 437 %conv = sext i1 %cmp to i32 438 ret i32 %conv 439} 440 441define dso_local signext i32 @setnbc28(i16 %a) { 442; CHECK-LABEL: setnbc28: 443; CHECK: # %bb.0: # %entry 444; CHECK-NEXT: clrlwi r3, r3, 16 445; CHECK-NEXT: cmpwi r3, 1 446; CHECK-NEXT: setnbc r3, eq 447; CHECK-NEXT: blr 448entry: 449 %cmp = icmp eq i16 %a, 1 450 %conv = sext i1 %cmp to i32 451 ret i32 %conv 452} 453 454define signext i64 @setnbc29(i8 %a) { 455; CHECK-LABEL: setnbc29: 456; CHECK: # %bb.0: # %entry 457; CHECK-NEXT: clrlwi r3, r3, 24 458; CHECK-NEXT: cmpwi r3, 1 459; CHECK-NEXT: setnbc r3, eq 460; CHECK-NEXT: blr 461entry: 462 %cmp = icmp eq i8 %a, 1 463 %conv = sext i1 %cmp to i64 464 ret i64 %conv 465} 466 467define signext i64 @setnbc30(i32 %a) { 468; CHECK-LABEL: setnbc30: 469; CHECK: # %bb.0: # %entry 470; CHECK-NEXT: cmpwi r3, 1 471; CHECK-NEXT: setnbc r3, eq 472; CHECK-NEXT: blr 473entry: 474 %cmp = icmp eq i32 %a, 1 475 %conv = sext i1 %cmp to i64 476 ret i64 %conv 477} 478 479define signext i64 @setnbc31(i64 %a) { 480; CHECK-LABEL: setnbc31: 481; CHECK: # %bb.0: # %entry 482; CHECK-NEXT: cmpdi r3, 1 483; CHECK-NEXT: setnbc r3, eq 484; CHECK-NEXT: blr 485entry: 486 %cmp = icmp eq i64 %a, 1 487 %conv = sext i1 %cmp to i64 488 ret i64 %conv 489} 490 491define signext i64 @setnbc32(i16 %a) { 492; CHECK-LABEL: setnbc32: 493; CHECK: # %bb.0: # %entry 494; CHECK-NEXT: clrlwi r3, r3, 16 495; CHECK-NEXT: cmpwi r3, 1 496; CHECK-NEXT: setnbc r3, eq 497; CHECK-NEXT: blr 498entry: 499 %cmp = icmp eq i16 %a, 1 500 %conv = sext i1 %cmp to i64 501 ret i64 %conv 502} 503 504define dso_local void @setnbc33(i8 %a) { 505; CHECK-LE-LABEL: setnbc33: 506; CHECK-LE: # %bb.0: # %entry 507; CHECK-LE-NEXT: clrlwi r3, r3, 24 508; CHECK-LE-NEXT: cmpwi r3, 1 509; CHECK-LE-NEXT: setnbc r3, eq 510; CHECK-LE-NEXT: pstb r3, globalVal@PCREL(0), 1 511; CHECK-LE-NEXT: blr 512; 513; CHECK-BE-LABEL: setnbc33: 514; CHECK-BE: # %bb.0: # %entry 515; CHECK-BE-NEXT: clrlwi r3, r3, 24 516; CHECK-BE-NEXT: addis r4, r2, globalVal@toc@ha 517; CHECK-BE-NEXT: cmpwi r3, 1 518; CHECK-BE-NEXT: setnbc r3, eq 519; CHECK-BE-NEXT: stb r3, globalVal@toc@l(r4) 520; CHECK-BE-NEXT: blr 521entry: 522 %cmp = icmp eq i8 %a, 1 523 %conv1 = sext i1 %cmp to i8 524 store i8 %conv1, ptr @globalVal, align 1 525 ret void 526} 527 528define dso_local void @setnbc34(i32 %a) { 529; CHECK-LE-LABEL: setnbc34: 530; CHECK-LE: # %bb.0: # %entry 531; CHECK-LE-NEXT: cmpwi r3, 1 532; CHECK-LE-NEXT: setnbc r3, eq 533; CHECK-LE-NEXT: pstw r3, globalVal2@PCREL(0), 1 534; CHECK-LE-NEXT: blr 535; 536; CHECK-BE-LABEL: setnbc34: 537; CHECK-BE: # %bb.0: # %entry 538; CHECK-BE-NEXT: cmpwi r3, 1 539; CHECK-BE-NEXT: addis r4, r2, globalVal2@toc@ha 540; CHECK-BE-NEXT: setnbc r3, eq 541; CHECK-BE-NEXT: stw r3, globalVal2@toc@l(r4) 542; CHECK-BE-NEXT: blr 543entry: 544 %cmp = icmp eq i32 %a, 1 545 %conv1 = sext i1 %cmp to i32 546 store i32 %conv1, ptr @globalVal2, align 4 547 ret void 548} 549 550define dso_local void @setnbc35(i64 %a) { 551; CHECK-LE-LABEL: setnbc35: 552; CHECK-LE: # %bb.0: # %entry 553; CHECK-LE-NEXT: cmpdi r3, 1 554; CHECK-LE-NEXT: setnbc r3, eq 555; CHECK-LE-NEXT: pstd r3, globalVal3@PCREL(0), 1 556; CHECK-LE-NEXT: blr 557; 558; CHECK-BE-LABEL: setnbc35: 559; CHECK-BE: # %bb.0: # %entry 560; CHECK-BE-NEXT: cmpdi r3, 1 561; CHECK-BE-NEXT: addis r4, r2, globalVal3@toc@ha 562; CHECK-BE-NEXT: setnbc r3, eq 563; CHECK-BE-NEXT: std r3, globalVal3@toc@l(r4) 564; CHECK-BE-NEXT: blr 565entry: 566 %cmp = icmp eq i64 %a, 1 567 %conv1 = sext i1 %cmp to i64 568 store i64 %conv1, ptr @globalVal3, align 8 569 ret void 570} 571 572define dso_local void @setnbc36(i16 %a) { 573; CHECK-LE-LABEL: setnbc36: 574; CHECK-LE: # %bb.0: # %entry 575; CHECK-LE-NEXT: clrlwi r3, r3, 16 576; CHECK-LE-NEXT: cmpwi r3, 1 577; CHECK-LE-NEXT: setnbc r3, eq 578; CHECK-LE-NEXT: psth r3, globalVal4@PCREL(0), 1 579; CHECK-LE-NEXT: blr 580; 581; CHECK-BE-LABEL: setnbc36: 582; CHECK-BE: # %bb.0: # %entry 583; CHECK-BE-NEXT: clrlwi r3, r3, 16 584; CHECK-BE-NEXT: addis r4, r2, globalVal4@toc@ha 585; CHECK-BE-NEXT: cmpwi r3, 1 586; CHECK-BE-NEXT: setnbc r3, eq 587; CHECK-BE-NEXT: sth r3, globalVal4@toc@l(r4) 588; CHECK-BE-NEXT: blr 589entry: 590 %cmp = icmp eq i16 %a, 1 591 %conv1 = sext i1 %cmp to i16 592 store i16 %conv1, ptr @globalVal4, align 2 593 ret void 594} 595 596define dso_local signext i32 @setnbc37(i64 %a) { 597; CHECK-LABEL: setnbc37: 598; CHECK: # %bb.0: # %entry 599; CHECK-NEXT: cmpldi r3, 1 600; CHECK-NEXT: setnbc r3, gt 601; CHECK-NEXT: blr 602entry: 603 %cmp = icmp ugt i64 %a, 1 604 %conv = sext i1 %cmp to i32 605 ret i32 %conv 606} 607 608define signext i64 @setnbc38(i64 %a) { 609; CHECK-LABEL: setnbc38: 610; CHECK: # %bb.0: # %entry 611; CHECK-NEXT: cmpldi r3, 1 612; CHECK-NEXT: setnbc r3, gt 613; CHECK-NEXT: blr 614entry: 615 %cmp = icmp ugt i64 %a, 1 616 %conv = sext i1 %cmp to i64 617 ret i64 %conv 618} 619 620define dso_local void @setnbc39(i64 %a) { 621; CHECK-LE-LABEL: setnbc39: 622; CHECK-LE: # %bb.0: # %entry 623; CHECK-LE-NEXT: cmpldi r3, 1 624; CHECK-LE-NEXT: setnbc r3, gt 625; CHECK-LE-NEXT: pstd r3, globalVal3@PCREL(0), 1 626; CHECK-LE-NEXT: blr 627; 628; CHECK-BE-LABEL: setnbc39: 629; CHECK-BE: # %bb.0: # %entry 630; CHECK-BE-NEXT: cmpldi r3, 1 631; CHECK-BE-NEXT: addis r4, r2, globalVal3@toc@ha 632; CHECK-BE-NEXT: setnbc r3, gt 633; CHECK-BE-NEXT: std r3, globalVal3@toc@l(r4) 634; CHECK-BE-NEXT: blr 635entry: 636 %cmp = icmp ugt i64 %a, 1 637 %conv1 = sext i1 %cmp to i64 638 store i64 %conv1, ptr @globalVal3, align 8 639 ret void 640} 641 642define dso_local signext i32 @setnbc40(i8 %a) { 643; CHECK-LABEL: setnbc40: 644; CHECK: # %bb.0: # %entry 645; CHECK-NEXT: extsb. r3, r3 646; CHECK-NEXT: setnbc r3, lt 647; CHECK-NEXT: blr 648entry: 649 %cmp = icmp slt i8 %a, 0 650 %conv = sext i1 %cmp to i32 651 ret i32 %conv 652} 653 654define dso_local signext i32 @setnbc41(i32 %a) { 655; CHECK-LABEL: setnbc41: 656; CHECK: # %bb.0: # %entry 657; CHECK-NEXT: cmpwi r3, 0 658; CHECK-NEXT: setnbc r3, lt 659; CHECK-NEXT: blr 660entry: 661 %cmp = icmp slt i32 %a, 0 662 %conv = sext i1 %cmp to i32 663 ret i32 %conv 664} 665 666define dso_local signext i32 @setnbc42(i16 %a) { 667; CHECK-LABEL: setnbc42: 668; CHECK: # %bb.0: # %entry 669; CHECK-NEXT: extsh. r3, r3 670; CHECK-NEXT: setnbc r3, lt 671; CHECK-NEXT: blr 672entry: 673 %cmp = icmp slt i16 %a, 0 674 %conv = sext i1 %cmp to i32 675 ret i32 %conv 676} 677 678define signext i64 @setnbc43(i8 %a) { 679; CHECK-LABEL: setnbc43: 680; CHECK: # %bb.0: # %entry 681; CHECK-NEXT: extsb. r3, r3 682; CHECK-NEXT: setnbc r3, lt 683; CHECK-NEXT: blr 684entry: 685 %cmp = icmp slt i8 %a, 0 686 %conv = sext i1 %cmp to i64 687 ret i64 %conv 688} 689 690define signext i64 @setnbc44(i32 %a) { 691; CHECK-LABEL: setnbc44: 692; CHECK: # %bb.0: # %entry 693; CHECK-NEXT: cmpwi r3, 0 694; CHECK-NEXT: setnbc r3, lt 695; CHECK-NEXT: blr 696entry: 697 %cmp = icmp slt i32 %a, 0 698 %conv = sext i1 %cmp to i64 699 ret i64 %conv 700} 701 702define signext i64 @setnbc45(i16 %a) { 703; CHECK-LABEL: setnbc45: 704; CHECK: # %bb.0: # %entry 705; CHECK-NEXT: extsh. r3, r3 706; CHECK-NEXT: setnbc r3, lt 707; CHECK-NEXT: blr 708entry: 709 %cmp = icmp slt i16 %a, 0 710 %conv = sext i1 %cmp to i64 711 ret i64 %conv 712} 713 714define dso_local signext i32 @setnbc46(i8 %a) { 715; CHECK-LABEL: setnbc46: 716; CHECK: # %bb.0: # %entry 717; CHECK-NEXT: extsb. r3, r3 718; CHECK-NEXT: setnbc r3, gt 719; CHECK-NEXT: blr 720entry: 721 %cmp = icmp sgt i8 %a, 0 722 %conv = sext i1 %cmp to i32 723 ret i32 %conv 724} 725 726define dso_local signext i32 @setnbc47(i32 %a) { 727; CHECK-LABEL: setnbc47: 728; CHECK: # %bb.0: # %entry 729; CHECK-NEXT: cmpwi r3, 0 730; CHECK-NEXT: setnbc r3, gt 731; CHECK-NEXT: blr 732entry: 733 %cmp = icmp sgt i32 %a, 0 734 %conv = sext i1 %cmp to i32 735 ret i32 %conv 736} 737 738define dso_local signext i32 @setnbc48(i64 %a) { 739; CHECK-LABEL: setnbc48: 740; CHECK: # %bb.0: # %entry 741; CHECK-NEXT: cmpdi r3, 0 742; CHECK-NEXT: setnbc r3, gt 743; CHECK-NEXT: blr 744entry: 745 %cmp = icmp sgt i64 %a, 0 746 %conv = sext i1 %cmp to i32 747 ret i32 %conv 748} 749 750define dso_local signext i32 @setnbc49(i16 %a) { 751; CHECK-LABEL: setnbc49: 752; CHECK: # %bb.0: # %entry 753; CHECK-NEXT: extsh. r3, r3 754; CHECK-NEXT: setnbc r3, gt 755; CHECK-NEXT: blr 756entry: 757 %cmp = icmp sgt i16 %a, 0 758 %conv = sext i1 %cmp to i32 759 ret i32 %conv 760} 761 762define signext i64 @setnbc50(i8 %a) { 763; CHECK-LABEL: setnbc50: 764; CHECK: # %bb.0: # %entry 765; CHECK-NEXT: extsb. r3, r3 766; CHECK-NEXT: setnbc r3, gt 767; CHECK-NEXT: blr 768entry: 769 %cmp = icmp sgt i8 %a, 0 770 %conv = sext i1 %cmp to i64 771 ret i64 %conv 772} 773 774define signext i64 @setnbc51(i32 %a) { 775; CHECK-LABEL: setnbc51: 776; CHECK: # %bb.0: # %entry 777; CHECK-NEXT: cmpwi r3, 0 778; CHECK-NEXT: setnbc r3, gt 779; CHECK-NEXT: blr 780entry: 781 %cmp = icmp sgt i32 %a, 0 782 %conv = sext i1 %cmp to i64 783 ret i64 %conv 784} 785 786define signext i64 @setnbc52(i64 %a) { 787; CHECK-LABEL: setnbc52: 788; CHECK: # %bb.0: # %entry 789; CHECK-NEXT: cmpdi r3, 0 790; CHECK-NEXT: setnbc r3, gt 791; CHECK-NEXT: blr 792entry: 793 %cmp = icmp sgt i64 %a, 0 794 %conv = sext i1 %cmp to i64 795 ret i64 %conv 796} 797 798define signext i64 @setnbc53(i16 %a) { 799; CHECK-LABEL: setnbc53: 800; CHECK: # %bb.0: # %entry 801; CHECK-NEXT: extsh. r3, r3 802; CHECK-NEXT: setnbc r3, gt 803; CHECK-NEXT: blr 804entry: 805 %cmp = icmp sgt i16 %a, 0 806 %conv = sext i1 %cmp to i64 807 ret i64 %conv 808} 809 810define dso_local void @setnbc54(i8 %a) { 811; CHECK-LE-LABEL: setnbc54: 812; CHECK-LE: # %bb.0: # %entry 813; CHECK-LE-NEXT: extsb. r3, r3 814; CHECK-LE-NEXT: setnbc r3, gt 815; CHECK-LE-NEXT: pstb r3, globalVal@PCREL(0), 1 816; CHECK-LE-NEXT: blr 817; 818; CHECK-BE-LABEL: setnbc54: 819; CHECK-BE: # %bb.0: # %entry 820; CHECK-BE-NEXT: extsb. r3, r3 821; CHECK-BE-NEXT: addis r4, r2, globalVal@toc@ha 822; CHECK-BE-NEXT: setnbc r3, gt 823; CHECK-BE-NEXT: stb r3, globalVal@toc@l(r4) 824; CHECK-BE-NEXT: blr 825entry: 826 %cmp = icmp sgt i8 %a, 0 827 %conv1 = sext i1 %cmp to i8 828 store i8 %conv1, ptr @globalVal, align 1 829 ret void 830} 831 832define dso_local void @setnbc55(i32 %a) { 833; CHECK-LE-LABEL: setnbc55: 834; CHECK-LE: # %bb.0: # %entry 835; CHECK-LE-NEXT: cmpwi r3, 0 836; CHECK-LE-NEXT: setnbc r3, gt 837; CHECK-LE-NEXT: pstw r3, globalVal2@PCREL(0), 1 838; CHECK-LE-NEXT: blr 839; 840; CHECK-BE-LABEL: setnbc55: 841; CHECK-BE: # %bb.0: # %entry 842; CHECK-BE-NEXT: cmpwi r3, 0 843; CHECK-BE-NEXT: addis r4, r2, globalVal2@toc@ha 844; CHECK-BE-NEXT: setnbc r3, gt 845; CHECK-BE-NEXT: stw r3, globalVal2@toc@l(r4) 846; CHECK-BE-NEXT: blr 847entry: 848 %cmp = icmp sgt i32 %a, 0 849 %conv1 = sext i1 %cmp to i32 850 store i32 %conv1, ptr @globalVal2, align 4 851 ret void 852} 853 854define dso_local void @setnbc56(i64 %a) { 855; CHECK-LE-LABEL: setnbc56: 856; CHECK-LE: # %bb.0: # %entry 857; CHECK-LE-NEXT: cmpdi r3, 0 858; CHECK-LE-NEXT: setnbc r3, gt 859; CHECK-LE-NEXT: pstd r3, globalVal3@PCREL(0), 1 860; CHECK-LE-NEXT: blr 861; 862; CHECK-BE-LABEL: setnbc56: 863; CHECK-BE: # %bb.0: # %entry 864; CHECK-BE-NEXT: cmpdi r3, 0 865; CHECK-BE-NEXT: addis r4, r2, globalVal3@toc@ha 866; CHECK-BE-NEXT: setnbc r3, gt 867; CHECK-BE-NEXT: std r3, globalVal3@toc@l(r4) 868; CHECK-BE-NEXT: blr 869entry: 870 %cmp = icmp sgt i64 %a, 0 871 %conv1 = sext i1 %cmp to i64 872 store i64 %conv1, ptr @globalVal3, align 8 873 ret void 874} 875 876define dso_local void @setnbc57(i16 %a) { 877; CHECK-LE-LABEL: setnbc57: 878; CHECK-LE: # %bb.0: # %entry 879; CHECK-LE-NEXT: extsh. r3, r3 880; CHECK-LE-NEXT: setnbc r3, gt 881; CHECK-LE-NEXT: psth r3, globalVal4@PCREL(0), 1 882; CHECK-LE-NEXT: blr 883; 884; CHECK-BE-LABEL: setnbc57: 885; CHECK-BE: # %bb.0: # %entry 886; CHECK-BE-NEXT: extsh. r3, r3 887; CHECK-BE-NEXT: addis r4, r2, globalVal4@toc@ha 888; CHECK-BE-NEXT: setnbc r3, gt 889; CHECK-BE-NEXT: sth r3, globalVal4@toc@l(r4) 890; CHECK-BE-NEXT: blr 891entry: 892 %cmp = icmp sgt i16 %a, 0 893 %conv1 = sext i1 %cmp to i16 894 store i16 %conv1, ptr @globalVal4, align 2 895 ret void 896} 897 898define dso_local signext i32 @setnbc58(i8 %a) { 899; CHECK-LABEL: setnbc58: 900; CHECK: # %bb.0: # %entry 901; CHECK-NEXT: andi. r3, r3, 255 902; CHECK-NEXT: setnbc r3, eq 903; CHECK-NEXT: blr 904entry: 905 %cmp = icmp eq i8 %a, 0 906 %conv = sext i1 %cmp to i32 907 ret i32 %conv 908} 909 910define dso_local signext i32 @setnbc59(i32 %a) { 911; CHECK-LABEL: setnbc59: 912; CHECK: # %bb.0: # %entry 913; CHECK-NEXT: cmpwi r3, 0 914; CHECK-NEXT: setnbc r3, eq 915; CHECK-NEXT: blr 916entry: 917 %cmp = icmp eq i32 %a, 0 918 %conv = sext i1 %cmp to i32 919 ret i32 %conv 920} 921 922define dso_local signext i32 @setnbc60(i64 %a) { 923; CHECK-LABEL: setnbc60: 924; CHECK: # %bb.0: # %entry 925; CHECK-NEXT: cmpdi r3, 0 926; CHECK-NEXT: setnbc r3, eq 927; CHECK-NEXT: blr 928entry: 929 %cmp = icmp eq i64 %a, 0 930 %conv = sext i1 %cmp to i32 931 ret i32 %conv 932} 933 934define dso_local signext i32 @setnbc61(i16 %a) { 935; CHECK-LABEL: setnbc61: 936; CHECK: # %bb.0: # %entry 937; CHECK-NEXT: andi. r3, r3, 65535 938; CHECK-NEXT: setnbc r3, eq 939; CHECK-NEXT: blr 940entry: 941 %cmp = icmp eq i16 %a, 0 942 %conv = sext i1 %cmp to i32 943 ret i32 %conv 944} 945 946define signext i64 @setnbc62(i8 %a) { 947; CHECK-LABEL: setnbc62: 948; CHECK: # %bb.0: # %entry 949; CHECK-NEXT: andi. r3, r3, 255 950; CHECK-NEXT: setnbc r3, eq 951; CHECK-NEXT: blr 952entry: 953 %cmp = icmp eq i8 %a, 0 954 %conv = sext i1 %cmp to i64 955 ret i64 %conv 956} 957 958define signext i64 @setnbc63(i32 %a) { 959; CHECK-LABEL: setnbc63: 960; CHECK: # %bb.0: # %entry 961; CHECK-NEXT: cmpwi r3, 0 962; CHECK-NEXT: setnbc r3, eq 963; CHECK-NEXT: blr 964entry: 965 %cmp = icmp eq i32 %a, 0 966 %conv = sext i1 %cmp to i64 967 ret i64 %conv 968} 969 970define signext i64 @setnbc64(i64 %a) { 971; CHECK-LABEL: setnbc64: 972; CHECK: # %bb.0: # %entry 973; CHECK-NEXT: cmpdi r3, 0 974; CHECK-NEXT: setnbc r3, eq 975; CHECK-NEXT: blr 976entry: 977 %cmp = icmp eq i64 %a, 0 978 %conv = sext i1 %cmp to i64 979 ret i64 %conv 980} 981 982define signext i64 @setnbc65(i16 %a) { 983; CHECK-LABEL: setnbc65: 984; CHECK: # %bb.0: # %entry 985; CHECK-NEXT: andi. r3, r3, 65535 986; CHECK-NEXT: setnbc r3, eq 987; CHECK-NEXT: blr 988entry: 989 %cmp = icmp eq i16 %a, 0 990 %conv = sext i1 %cmp to i64 991 ret i64 %conv 992} 993 994define dso_local void @setnbc66(i8 %a) { 995; CHECK-LE-LABEL: setnbc66: 996; CHECK-LE: # %bb.0: # %entry 997; CHECK-LE-NEXT: andi. r3, r3, 255 998; CHECK-LE-NEXT: setnbc r3, eq 999; CHECK-LE-NEXT: pstb r3, globalVal@PCREL(0), 1 1000; CHECK-LE-NEXT: blr 1001; 1002; CHECK-BE-LABEL: setnbc66: 1003; CHECK-BE: # %bb.0: # %entry 1004; CHECK-BE-NEXT: andi. r3, r3, 255 1005; CHECK-BE-NEXT: addis r4, r2, globalVal@toc@ha 1006; CHECK-BE-NEXT: setnbc r3, eq 1007; CHECK-BE-NEXT: stb r3, globalVal@toc@l(r4) 1008; CHECK-BE-NEXT: blr 1009entry: 1010 %cmp = icmp eq i8 %a, 0 1011 %conv1 = sext i1 %cmp to i8 1012 store i8 %conv1, ptr @globalVal, align 1 1013 ret void 1014} 1015 1016define dso_local void @setnbc67(i32 %a) { 1017; CHECK-LE-LABEL: setnbc67: 1018; CHECK-LE: # %bb.0: # %entry 1019; CHECK-LE-NEXT: cmpwi r3, 0 1020; CHECK-LE-NEXT: setnbc r3, eq 1021; CHECK-LE-NEXT: pstw r3, globalVal2@PCREL(0), 1 1022; CHECK-LE-NEXT: blr 1023; 1024; CHECK-BE-LABEL: setnbc67: 1025; CHECK-BE: # %bb.0: # %entry 1026; CHECK-BE-NEXT: cmpwi r3, 0 1027; CHECK-BE-NEXT: addis r4, r2, globalVal2@toc@ha 1028; CHECK-BE-NEXT: setnbc r3, eq 1029; CHECK-BE-NEXT: stw r3, globalVal2@toc@l(r4) 1030; CHECK-BE-NEXT: blr 1031entry: 1032 %cmp = icmp eq i32 %a, 0 1033 %conv1 = sext i1 %cmp to i32 1034 store i32 %conv1, ptr @globalVal2, align 4 1035 ret void 1036} 1037 1038define dso_local void @setnbc68(i64 %a) { 1039; CHECK-LE-LABEL: setnbc68: 1040; CHECK-LE: # %bb.0: # %entry 1041; CHECK-LE-NEXT: cmpdi r3, 0 1042; CHECK-LE-NEXT: setnbc r3, eq 1043; CHECK-LE-NEXT: pstd r3, globalVal3@PCREL(0), 1 1044; CHECK-LE-NEXT: blr 1045; 1046; CHECK-BE-LABEL: setnbc68: 1047; CHECK-BE: # %bb.0: # %entry 1048; CHECK-BE-NEXT: cmpdi r3, 0 1049; CHECK-BE-NEXT: addis r4, r2, globalVal3@toc@ha 1050; CHECK-BE-NEXT: setnbc r3, eq 1051; CHECK-BE-NEXT: std r3, globalVal3@toc@l(r4) 1052; CHECK-BE-NEXT: blr 1053entry: 1054 %cmp = icmp eq i64 %a, 0 1055 %conv1 = sext i1 %cmp to i64 1056 store i64 %conv1, ptr @globalVal3, align 8 1057 ret void 1058} 1059 1060define dso_local void @setnbc69(i16 %a) { 1061; CHECK-LE-LABEL: setnbc69: 1062; CHECK-LE: # %bb.0: # %entry 1063; CHECK-LE-NEXT: andi. r3, r3, 65535 1064; CHECK-LE-NEXT: setnbc r3, eq 1065; CHECK-LE-NEXT: psth r3, globalVal4@PCREL(0), 1 1066; CHECK-LE-NEXT: blr 1067; 1068; CHECK-BE-LABEL: setnbc69: 1069; CHECK-BE: # %bb.0: # %entry 1070; CHECK-BE-NEXT: andi. r3, r3, 65535 1071; CHECK-BE-NEXT: addis r4, r2, globalVal4@toc@ha 1072; CHECK-BE-NEXT: setnbc r3, eq 1073; CHECK-BE-NEXT: sth r3, globalVal4@toc@l(r4) 1074; CHECK-BE-NEXT: blr 1075entry: 1076 %cmp = icmp eq i16 %a, 0 1077 %conv1 = sext i1 %cmp to i16 1078 store i16 %conv1, ptr @globalVal4, align 2 1079 ret void 1080} 1081 1082