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 @setbc1(i8 %a) { 21; CHECK-LABEL: setbc1: 22; CHECK: # %bb.0: # %entry 23; CHECK-NEXT: extsb r3, r3 24; CHECK-NEXT: cmpwi r3, 1 25; CHECK-NEXT: setbc r3, lt 26; CHECK-NEXT: blr 27entry: 28 %cmp = icmp slt i8 %a, 1 29 %conv = zext i1 %cmp to i32 30 ret i32 %conv 31} 32 33define dso_local signext i32 @setbc2(i32 %a) { 34; CHECK-LABEL: setbc2: 35; CHECK: # %bb.0: # %entry 36; CHECK-NEXT: cmpwi r3, 1 37; CHECK-NEXT: setbc r3, lt 38; CHECK-NEXT: blr 39entry: 40 %cmp = icmp slt i32 %a, 1 41 %conv = zext i1 %cmp to i32 42 ret i32 %conv 43} 44 45define dso_local signext i32 @setbc3(i64 %a) { 46; CHECK-LABEL: setbc3: 47; CHECK: # %bb.0: # %entry 48; CHECK-NEXT: cmpdi r3, 1 49; CHECK-NEXT: setbc r3, lt 50; CHECK-NEXT: blr 51entry: 52 %cmp = icmp slt i64 %a, 1 53 %conv = zext i1 %cmp to i32 54 ret i32 %conv 55} 56 57define dso_local signext i32 @setbc4(i16 %a) { 58; CHECK-LABEL: setbc4: 59; CHECK: # %bb.0: # %entry 60; CHECK-NEXT: extsh r3, r3 61; CHECK-NEXT: cmpwi r3, 1 62; CHECK-NEXT: setbc r3, lt 63; CHECK-NEXT: blr 64entry: 65 %cmp = icmp slt i16 %a, 1 66 %conv = zext i1 %cmp to i32 67 ret i32 %conv 68} 69 70define signext i64 @setbc5(i8 %a) { 71; CHECK-LABEL: setbc5: 72; CHECK: # %bb.0: # %entry 73; CHECK-NEXT: extsb r3, r3 74; CHECK-NEXT: cmpwi r3, 1 75; CHECK-NEXT: setbc r3, lt 76; CHECK-NEXT: blr 77entry: 78 %cmp = icmp slt i8 %a, 1 79 %conv = zext i1 %cmp to i64 80 ret i64 %conv 81} 82 83define signext i64 @setbc6(i32 %a) { 84; CHECK-LABEL: setbc6: 85; CHECK: # %bb.0: # %entry 86; CHECK-NEXT: cmpwi r3, 1 87; CHECK-NEXT: setbc r3, lt 88; CHECK-NEXT: blr 89entry: 90 %cmp = icmp slt i32 %a, 1 91 %conv = zext i1 %cmp to i64 92 ret i64 %conv 93} 94 95define signext i64 @setbc7(i64 %a) { 96; CHECK-LABEL: setbc7: 97; CHECK: # %bb.0: # %entry 98; CHECK-NEXT: cmpdi r3, 1 99; CHECK-NEXT: setbc r3, lt 100; CHECK-NEXT: blr 101entry: 102 %cmp = icmp slt i64 %a, 1 103 %conv = zext i1 %cmp to i64 104 ret i64 %conv 105} 106 107define signext i64 @setbc8(i16 %a) { 108; CHECK-LABEL: setbc8: 109; CHECK: # %bb.0: # %entry 110; CHECK-NEXT: extsh r3, r3 111; CHECK-NEXT: cmpwi r3, 1 112; CHECK-NEXT: setbc r3, lt 113; CHECK-NEXT: blr 114entry: 115 %cmp = icmp slt i16 %a, 1 116 %conv = zext i1 %cmp to i64 117 ret i64 %conv 118} 119 120define dso_local void @setbc9(i8 %a) { 121; CHECK-LE-LABEL: setbc9: 122; CHECK-LE: # %bb.0: # %entry 123; CHECK-LE-NEXT: extsb r3, r3 124; CHECK-LE-NEXT: cmpwi r3, 1 125; CHECK-LE-NEXT: setbc r3, lt 126; CHECK-LE-NEXT: pstb r3, globalVal@PCREL(0), 1 127; CHECK-LE-NEXT: blr 128; 129; CHECK-BE-LABEL: setbc9: 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: setbc 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 = zext i1 %cmp to i8 140 store i8 %conv1, i8* @globalVal, align 1 141 ret void 142} 143 144define dso_local void @setbc10(i32 %a) { 145; CHECK-LE-LABEL: setbc10: 146; CHECK-LE: # %bb.0: # %entry 147; CHECK-LE-NEXT: cmpwi r3, 1 148; CHECK-LE-NEXT: setbc r3, lt 149; CHECK-LE-NEXT: pstw r3, globalVal2@PCREL(0), 1 150; CHECK-LE-NEXT: blr 151; 152; CHECK-BE-LABEL: setbc10: 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: setbc 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 = zext i1 %cmp to i32 162 store i32 %conv1, i32* @globalVal2, align 4 163 ret void 164} 165 166define dso_local void @setbc11(i64 %a) { 167; CHECK-LE-LABEL: setbc11: 168; CHECK-LE: # %bb.0: # %entry 169; CHECK-LE-NEXT: cmpdi r3, 1 170; CHECK-LE-NEXT: setbc r3, lt 171; CHECK-LE-NEXT: pstd r3, globalVal3@PCREL(0), 1 172; CHECK-LE-NEXT: blr 173; 174; CHECK-BE-LABEL: setbc11: 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: setbc 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 = zext i1 %cmp to i64 184 store i64 %conv1, i64* @globalVal3, align 8 185 ret void 186} 187 188define dso_local void @setbc12(i16 %a) { 189; CHECK-LE-LABEL: setbc12: 190; CHECK-LE: # %bb.0: # %entry 191; CHECK-LE-NEXT: extsh r3, r3 192; CHECK-LE-NEXT: cmpwi r3, 1 193; CHECK-LE-NEXT: setbc r3, lt 194; CHECK-LE-NEXT: psth r3, globalVal4@PCREL(0), 1 195; CHECK-LE-NEXT: blr 196; 197; CHECK-BE-LABEL: setbc12: 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: setbc 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 = zext i1 %cmp to i16 208 store i16 %conv1, i16* @globalVal4, align 2 209 ret void 210} 211 212define dso_local signext i32 @setbc13(i8 %a) { 213; CHECK-LABEL: setbc13: 214; CHECK: # %bb.0: # %entry 215; CHECK-NEXT: extsb r3, r3 216; CHECK-NEXT: cmpwi r3, 1 217; CHECK-NEXT: setbc r3, gt 218; CHECK-NEXT: blr 219entry: 220 %cmp = icmp sgt i8 %a, 1 221 %conv = zext i1 %cmp to i32 222 ret i32 %conv 223} 224 225define dso_local signext i32 @setbc14(i32 %a) { 226; CHECK-LABEL: setbc14: 227; CHECK: # %bb.0: # %entry 228; CHECK-NEXT: cmpwi r3, 1 229; CHECK-NEXT: setbc r3, gt 230; CHECK-NEXT: blr 231entry: 232 %cmp = icmp sgt i32 %a, 1 233 %conv = zext i1 %cmp to i32 234 ret i32 %conv 235} 236 237define dso_local signext i32 @setbc15(i64 %a) { 238; CHECK-LABEL: setbc15: 239; CHECK: # %bb.0: # %entry 240; CHECK-NEXT: cmpdi r3, 1 241; CHECK-NEXT: setbc r3, gt 242; CHECK-NEXT: blr 243entry: 244 %cmp = icmp sgt i64 %a, 1 245 %conv = zext i1 %cmp to i32 246 ret i32 %conv 247} 248 249define dso_local signext i32 @setbc16(i16 %a) { 250; CHECK-LABEL: setbc16: 251; CHECK: # %bb.0: # %entry 252; CHECK-NEXT: extsh r3, r3 253; CHECK-NEXT: cmpwi r3, 1 254; CHECK-NEXT: setbc r3, gt 255; CHECK-NEXT: blr 256entry: 257 %cmp = icmp sgt i16 %a, 1 258 %conv = zext i1 %cmp to i32 259 ret i32 %conv 260} 261 262define signext i64 @setbc17(i8 %a) { 263; CHECK-LABEL: setbc17: 264; CHECK: # %bb.0: # %entry 265; CHECK-NEXT: extsb r3, r3 266; CHECK-NEXT: cmpwi r3, 1 267; CHECK-NEXT: setbc r3, gt 268; CHECK-NEXT: blr 269entry: 270 %cmp = icmp sgt i8 %a, 1 271 %conv = zext i1 %cmp to i64 272 ret i64 %conv 273} 274 275define signext i64 @setbc18(i32 %a) { 276; CHECK-LABEL: setbc18: 277; CHECK: # %bb.0: # %entry 278; CHECK-NEXT: cmpwi r3, 1 279; CHECK-NEXT: setbc r3, gt 280; CHECK-NEXT: blr 281entry: 282 %cmp = icmp sgt i32 %a, 1 283 %conv = zext i1 %cmp to i64 284 ret i64 %conv 285} 286 287define signext i64 @setbc19(i64 %a) { 288; CHECK-LABEL: setbc19: 289; CHECK: # %bb.0: # %entry 290; CHECK-NEXT: cmpdi r3, 1 291; CHECK-NEXT: setbc r3, gt 292; CHECK-NEXT: blr 293entry: 294 %cmp = icmp sgt i64 %a, 1 295 %conv = zext i1 %cmp to i64 296 ret i64 %conv 297} 298 299define signext i64 @setbc20(i16 %a) { 300; CHECK-LABEL: setbc20: 301; CHECK: # %bb.0: # %entry 302; CHECK-NEXT: extsh r3, r3 303; CHECK-NEXT: cmpwi r3, 1 304; CHECK-NEXT: setbc r3, gt 305; CHECK-NEXT: blr 306entry: 307 %cmp = icmp sgt i16 %a, 1 308 %conv = zext i1 %cmp to i64 309 ret i64 %conv 310} 311 312define dso_local void @setbc21(i8 %a) { 313; CHECK-LE-LABEL: setbc21: 314; CHECK-LE: # %bb.0: # %entry 315; CHECK-LE-NEXT: extsb r3, r3 316; CHECK-LE-NEXT: cmpwi r3, 1 317; CHECK-LE-NEXT: setbc r3, gt 318; CHECK-LE-NEXT: pstb r3, globalVal@PCREL(0), 1 319; CHECK-LE-NEXT: blr 320; 321; CHECK-BE-LABEL: setbc21: 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: setbc 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 = zext i1 %cmp to i8 332 store i8 %conv1, i8* @globalVal, align 1 333 ret void 334} 335 336define dso_local void @setbc22(i32 %a) { 337; CHECK-LE-LABEL: setbc22: 338; CHECK-LE: # %bb.0: # %entry 339; CHECK-LE-NEXT: cmpwi r3, 1 340; CHECK-LE-NEXT: setbc r3, gt 341; CHECK-LE-NEXT: pstw r3, globalVal2@PCREL(0), 1 342; CHECK-LE-NEXT: blr 343; 344; CHECK-BE-LABEL: setbc22: 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: setbc 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 = zext i1 %cmp to i32 354 store i32 %conv1, i32* @globalVal2, align 4 355 ret void 356} 357 358define dso_local void @setbc23(i64 %a) { 359; CHECK-LE-LABEL: setbc23: 360; CHECK-LE: # %bb.0: # %entry 361; CHECK-LE-NEXT: cmpdi r3, 1 362; CHECK-LE-NEXT: setbc r3, gt 363; CHECK-LE-NEXT: pstd r3, globalVal3@PCREL(0), 1 364; CHECK-LE-NEXT: blr 365; 366; CHECK-BE-LABEL: setbc23: 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: setbc 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 = zext i1 %cmp to i64 376 store i64 %conv1, i64* @globalVal3, align 8 377 ret void 378} 379 380define dso_local void @setbc24(i16 %a) { 381; CHECK-LE-LABEL: setbc24: 382; CHECK-LE: # %bb.0: # %entry 383; CHECK-LE-NEXT: extsh r3, r3 384; CHECK-LE-NEXT: cmpwi r3, 1 385; CHECK-LE-NEXT: setbc r3, gt 386; CHECK-LE-NEXT: psth r3, globalVal4@PCREL(0), 1 387; CHECK-LE-NEXT: blr 388; 389; CHECK-BE-LABEL: setbc24: 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: setbc 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 = zext i1 %cmp to i16 400 store i16 %conv1, i16* @globalVal4, align 2 401 ret void 402} 403 404define dso_local signext i32 @setbc25(i8 %a) { 405; CHECK-LABEL: setbc25: 406; CHECK: # %bb.0: # %entry 407; CHECK-NEXT: clrlwi r3, r3, 24 408; CHECK-NEXT: cmpwi r3, 1 409; CHECK-NEXT: setbc r3, eq 410; CHECK-NEXT: blr 411entry: 412 %cmp = icmp eq i8 %a, 1 413 %conv = zext i1 %cmp to i32 414 ret i32 %conv 415} 416 417define dso_local signext i32 @setbc26(i32 %a) { 418; CHECK-LABEL: setbc26: 419; CHECK: # %bb.0: # %entry 420; CHECK-NEXT: cmpwi r3, 1 421; CHECK-NEXT: setbc r3, eq 422; CHECK-NEXT: blr 423entry: 424 %cmp = icmp eq i32 %a, 1 425 %conv = zext i1 %cmp to i32 426 ret i32 %conv 427} 428 429define dso_local signext i32 @setbc27(i64 %a) { 430; CHECK-LABEL: setbc27: 431; CHECK: # %bb.0: # %entry 432; CHECK-NEXT: cmpdi r3, 1 433; CHECK-NEXT: setbc r3, eq 434; CHECK-NEXT: blr 435entry: 436 %cmp = icmp eq i64 %a, 1 437 %conv = zext i1 %cmp to i32 438 ret i32 %conv 439} 440 441define dso_local signext i32 @setbc28(i16 %a) { 442; CHECK-LABEL: setbc28: 443; CHECK: # %bb.0: # %entry 444; CHECK-NEXT: clrlwi r3, r3, 16 445; CHECK-NEXT: cmpwi r3, 1 446; CHECK-NEXT: setbc r3, eq 447; CHECK-NEXT: blr 448entry: 449 %cmp = icmp eq i16 %a, 1 450 %conv = zext i1 %cmp to i32 451 ret i32 %conv 452} 453 454define signext i64 @setbc29(i8 %a) { 455; CHECK-LABEL: setbc29: 456; CHECK: # %bb.0: # %entry 457; CHECK-NEXT: clrlwi r3, r3, 24 458; CHECK-NEXT: cmpwi r3, 1 459; CHECK-NEXT: setbc r3, eq 460; CHECK-NEXT: blr 461entry: 462 %cmp = icmp eq i8 %a, 1 463 %conv = zext i1 %cmp to i64 464 ret i64 %conv 465} 466 467define signext i64 @setbc30(i32 %a) { 468; CHECK-LABEL: setbc30: 469; CHECK: # %bb.0: # %entry 470; CHECK-NEXT: cmpwi r3, 1 471; CHECK-NEXT: setbc r3, eq 472; CHECK-NEXT: blr 473entry: 474 %cmp = icmp eq i32 %a, 1 475 %conv = zext i1 %cmp to i64 476 ret i64 %conv 477} 478 479define signext i64 @setbc31(i64 %a) { 480; CHECK-LABEL: setbc31: 481; CHECK: # %bb.0: # %entry 482; CHECK-NEXT: cmpdi r3, 1 483; CHECK-NEXT: setbc r3, eq 484; CHECK-NEXT: blr 485entry: 486 %cmp = icmp eq i64 %a, 1 487 %conv = zext i1 %cmp to i64 488 ret i64 %conv 489} 490 491define signext i64 @setbc32(i16 %a) { 492; CHECK-LABEL: setbc32: 493; CHECK: # %bb.0: # %entry 494; CHECK-NEXT: clrlwi r3, r3, 16 495; CHECK-NEXT: cmpwi r3, 1 496; CHECK-NEXT: setbc r3, eq 497; CHECK-NEXT: blr 498entry: 499 %cmp = icmp eq i16 %a, 1 500 %conv = zext i1 %cmp to i64 501 ret i64 %conv 502} 503 504define dso_local void @setbc33(i8 %a) { 505; CHECK-LE-LABEL: setbc33: 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: setbc r3, eq 510; CHECK-LE-NEXT: pstb r3, globalVal@PCREL(0), 1 511; CHECK-LE-NEXT: blr 512; 513; CHECK-BE-LABEL: setbc33: 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: setbc 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 = zext i1 %cmp to i8 524 store i8 %conv1, i8* @globalVal, align 1 525 ret void 526} 527 528define dso_local void @setbc34(i32 %a) { 529; CHECK-LE-LABEL: setbc34: 530; CHECK-LE: # %bb.0: # %entry 531; CHECK-LE-NEXT: cmpwi r3, 1 532; CHECK-LE-NEXT: setbc r3, eq 533; CHECK-LE-NEXT: pstw r3, globalVal2@PCREL(0), 1 534; CHECK-LE-NEXT: blr 535; 536; CHECK-BE-LABEL: setbc34: 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: setbc 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 = zext i1 %cmp to i32 546 store i32 %conv1, i32* @globalVal2, align 4 547 ret void 548} 549 550define dso_local void @setbc35(i64 %a) { 551; CHECK-LE-LABEL: setbc35: 552; CHECK-LE: # %bb.0: # %entry 553; CHECK-LE-NEXT: cmpdi r3, 1 554; CHECK-LE-NEXT: setbc r3, eq 555; CHECK-LE-NEXT: pstd r3, globalVal3@PCREL(0), 1 556; CHECK-LE-NEXT: blr 557; 558; CHECK-BE-LABEL: setbc35: 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: setbc 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 = zext i1 %cmp to i64 568 store i64 %conv1, i64* @globalVal3, align 8 569 ret void 570} 571 572define dso_local void @setbc36(i16 %a) { 573; CHECK-LE-LABEL: setbc36: 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: setbc r3, eq 578; CHECK-LE-NEXT: psth r3, globalVal4@PCREL(0), 1 579; CHECK-LE-NEXT: blr 580; 581; CHECK-BE-LABEL: setbc36: 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: setbc 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 = zext i1 %cmp to i16 592 store i16 %conv1, i16* @globalVal4, align 2 593 ret void 594} 595 596define dso_local signext i32 @setbc37(i64 %a) { 597; CHECK-LABEL: setbc37: 598; CHECK: # %bb.0: # %entry 599; CHECK-NEXT: cmpldi r3, 1 600; CHECK-NEXT: setbc r3, gt 601; CHECK-NEXT: blr 602entry: 603 %cmp = icmp ugt i64 %a, 1 604 %conv = zext i1 %cmp to i32 605 ret i32 %conv 606} 607 608define signext i64 @setbc38(i64 %a) { 609; CHECK-LABEL: setbc38: 610; CHECK: # %bb.0: # %entry 611; CHECK-NEXT: cmpldi r3, 1 612; CHECK-NEXT: setbc r3, gt 613; CHECK-NEXT: blr 614entry: 615 %cmp = icmp ugt i64 %a, 1 616 %conv = zext i1 %cmp to i64 617 ret i64 %conv 618} 619 620define dso_local void @setbc39(i64 %a) { 621; CHECK-LE-LABEL: setbc39: 622; CHECK-LE: # %bb.0: # %entry 623; CHECK-LE-NEXT: cmpldi r3, 1 624; CHECK-LE-NEXT: setbc r3, gt 625; CHECK-LE-NEXT: pstd r3, globalVal3@PCREL(0), 1 626; CHECK-LE-NEXT: blr 627; 628; CHECK-BE-LABEL: setbc39: 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: setbc 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 = zext i1 %cmp to i64 638 store i64 %conv1, i64* @globalVal3, align 8 639 ret void 640} 641