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(i32 signext %a, i32 signext %b) { 21; CHECK-LABEL: setbc1: 22; CHECK: # %bb.0: # %entry 23; CHECK-NEXT: cmpw r3, r4 24; CHECK-NEXT: setbc r3, lt 25; CHECK-NEXT: blr 26entry: 27 %cmp = icmp slt i32 %a, %b 28 %conv = zext i1 %cmp to i32 29 ret i32 %conv 30} 31 32define dso_local signext i32 @setbc2(i32 signext %a, i32 signext %b) { 33; CHECK-LABEL: setbc2: 34; CHECK: # %bb.0: # %entry 35; CHECK-NEXT: cmpw r3, r4 36; CHECK-NEXT: setbc r3, eq 37; CHECK-NEXT: blr 38entry: 39 %cmp = icmp eq i32 %a, %b 40 %conv = zext i1 %cmp to i32 41 ret i32 %conv 42} 43 44define dso_local signext i32 @setbc3(i32 signext %a, i32 signext %b) { 45; CHECK-LABEL: setbc3: 46; CHECK: # %bb.0: # %entry 47; CHECK-NEXT: cmpw r3, r4 48; CHECK-NEXT: setbc r3, gt 49; CHECK-NEXT: blr 50entry: 51 %cmp = icmp sgt i32 %a, %b 52 %conv = zext i1 %cmp to i32 53 ret i32 %conv 54} 55 56define dso_local signext i32 @setbc4(i8 signext %a, i8 signext %b) { 57; CHECK-LABEL: setbc4: 58; CHECK: # %bb.0: # %entry 59; CHECK-NEXT: cmpw r3, r4 60; CHECK-NEXT: setbc r3, eq 61; CHECK-NEXT: blr 62entry: 63 %cmp = icmp eq i8 %a, %b 64 %conv2 = zext i1 %cmp to i32 65 ret i32 %conv2 66} 67 68define dso_local void @setbc5(i8 signext %a, i8 signext %b) { 69; CHECK-LE-LABEL: setbc5: 70; CHECK-LE: # %bb.0: # %entry 71; CHECK-LE-NEXT: cmpw r3, r4 72; CHECK-LE-NEXT: setbc r3, eq 73; CHECK-LE-NEXT: pstb r3, globalVal@PCREL(0), 1 74; CHECK-LE-NEXT: blr 75; 76; CHECK-BE-LABEL: setbc5: 77; CHECK-BE: # %bb.0: # %entry 78; CHECK-BE-NEXT: cmpw r3, r4 79; CHECK-BE-NEXT: addis r4, r2, globalVal@toc@ha 80; CHECK-BE-NEXT: setbc r3, eq 81; CHECK-BE-NEXT: stb r3, globalVal@toc@l(r4) 82; CHECK-BE-NEXT: blr 83entry: 84 %cmp = icmp eq i8 %a, %b 85 %conv3 = zext i1 %cmp to i8 86 store i8 %conv3, ptr @globalVal, align 1 87 ret void 88} 89 90define dso_local void @setbc6(i32 signext %a, i32 signext %b) { 91; CHECK-LE-LABEL: setbc6: 92; CHECK-LE: # %bb.0: # %entry 93; CHECK-LE-NEXT: cmpw r3, r4 94; CHECK-LE-NEXT: setbc r3, eq 95; CHECK-LE-NEXT: pstw r3, globalVal2@PCREL(0), 1 96; CHECK-LE-NEXT: blr 97; 98; CHECK-BE-LABEL: setbc6: 99; CHECK-BE: # %bb.0: # %entry 100; CHECK-BE-NEXT: cmpw r3, r4 101; CHECK-BE-NEXT: addis r4, r2, globalVal2@toc@ha 102; CHECK-BE-NEXT: setbc r3, eq 103; CHECK-BE-NEXT: stw r3, globalVal2@toc@l(r4) 104; CHECK-BE-NEXT: blr 105entry: 106 %cmp = icmp eq i32 %a, %b 107 %conv = zext i1 %cmp to i32 108 store i32 %conv, ptr @globalVal2, align 4 109 ret void 110} 111 112define dso_local signext i32 @setbc7(i64 %a, i64 %b) { 113; CHECK-LABEL: setbc7: 114; CHECK: # %bb.0: # %entry 115; CHECK-NEXT: cmpd r3, r4 116; CHECK-NEXT: setbc r3, eq 117; CHECK-NEXT: blr 118entry: 119 %cmp = icmp eq i64 %a, %b 120 %conv = zext i1 %cmp to i32 121 ret i32 %conv 122} 123 124define signext i64 @setbc8(i64 %a, i64 %b) { 125; CHECK-LABEL: setbc8: 126; CHECK: # %bb.0: # %entry 127; CHECK-NEXT: cmpd r3, r4 128; CHECK-NEXT: setbc r3, eq 129; CHECK-NEXT: blr 130entry: 131 %cmp = icmp eq i64 %a, %b 132 %conv = zext i1 %cmp to i64 133 ret i64 %conv 134} 135 136 137define dso_local void @setbc9(i64 %a, i64 %b) { 138; CHECK-LE-LABEL: setbc9: 139; CHECK-LE: # %bb.0: # %entry 140; CHECK-LE-NEXT: cmpd r3, r4 141; CHECK-LE-NEXT: setbc r3, eq 142; CHECK-LE-NEXT: pstd r3, globalVal3@PCREL(0), 1 143; CHECK-LE-NEXT: blr 144; 145; CHECK-BE-LABEL: setbc9: 146; CHECK-BE: # %bb.0: # %entry 147; CHECK-BE-NEXT: cmpd r3, r4 148; CHECK-BE-NEXT: addis r4, r2, globalVal3@toc@ha 149; CHECK-BE-NEXT: setbc r3, eq 150; CHECK-BE-NEXT: std r3, globalVal3@toc@l(r4) 151; CHECK-BE-NEXT: blr 152entry: 153 %cmp = icmp eq i64 %a, %b 154 %conv1 = zext i1 %cmp to i64 155 store i64 %conv1, ptr @globalVal3, align 8 156 ret void 157} 158 159 160define dso_local signext i32 @setbc10(i16 signext %a, i16 signext %b) { 161; CHECK-LABEL: setbc10: 162; CHECK: # %bb.0: # %entry 163; CHECK-NEXT: cmpw r3, r4 164; CHECK-NEXT: setbc r3, eq 165; CHECK-NEXT: blr 166entry: 167 %cmp = icmp eq i16 %a, %b 168 %conv2 = zext i1 %cmp to i32 169 ret i32 %conv2 170} 171 172 173define dso_local void @setbc11(i16 signext %a, i16 signext %b) { 174; CHECK-LE-LABEL: setbc11: 175; CHECK-LE: # %bb.0: # %entry 176; CHECK-LE-NEXT: cmpw r3, r4 177; CHECK-LE-NEXT: setbc r3, eq 178; CHECK-LE-NEXT: psth r3, globalVal4@PCREL(0), 1 179; CHECK-LE-NEXT: blr 180; 181; CHECK-BE-LABEL: setbc11: 182; CHECK-BE: # %bb.0: # %entry 183; CHECK-BE-NEXT: cmpw r3, r4 184; CHECK-BE-NEXT: addis r4, r2, globalVal4@toc@ha 185; CHECK-BE-NEXT: setbc r3, eq 186; CHECK-BE-NEXT: sth r3, globalVal4@toc@l(r4) 187; CHECK-BE-NEXT: blr 188entry: 189 %cmp = icmp eq i16 %a, %b 190 %conv3 = zext i1 %cmp to i16 191 store i16 %conv3, ptr @globalVal4, align 2 192 ret void 193} 194 195 196define dso_local signext i32 @setbc12(i8 zeroext %a, i8 zeroext %b) { 197; CHECK-LABEL: setbc12: 198; CHECK: # %bb.0: # %entry 199; CHECK-NEXT: cmpw r3, r4 200; CHECK-NEXT: setbc r3, eq 201; CHECK-NEXT: blr 202entry: 203 %cmp = icmp eq i8 %a, %b 204 %conv2 = zext i1 %cmp to i32 205 ret i32 %conv2 206} 207 208 209define dso_local void @setbc13(i8 zeroext %a, i8 zeroext %b) { 210; CHECK-LE-LABEL: setbc13: 211; CHECK-LE: # %bb.0: # %entry 212; CHECK-LE-NEXT: cmpw r3, r4 213; CHECK-LE-NEXT: setbc r3, eq 214; CHECK-LE-NEXT: pstb r3, globalVal@PCREL(0), 1 215; CHECK-LE-NEXT: blr 216; 217; CHECK-BE-LABEL: setbc13: 218; CHECK-BE: # %bb.0: # %entry 219; CHECK-BE-NEXT: cmpw r3, r4 220; CHECK-BE-NEXT: addis r4, r2, globalVal@toc@ha 221; CHECK-BE-NEXT: setbc r3, eq 222; CHECK-BE-NEXT: stb r3, globalVal@toc@l(r4) 223; CHECK-BE-NEXT: blr 224entry: 225 %cmp = icmp eq i8 %a, %b 226 %conv3 = zext i1 %cmp to i8 227 store i8 %conv3, ptr @globalVal, align 1 228 ret void 229} 230 231 232define dso_local signext i32 @setbc14(i32 zeroext %a, i32 zeroext %b) { 233; CHECK-LABEL: setbc14: 234; CHECK: # %bb.0: # %entry 235; CHECK-NEXT: cmpw r3, r4 236; CHECK-NEXT: setbc r3, eq 237; CHECK-NEXT: blr 238entry: 239 %cmp = icmp eq i32 %a, %b 240 %conv = zext i1 %cmp to i32 241 ret i32 %conv 242} 243 244 245define dso_local void @setbc15(i32 zeroext %a, i32 zeroext %b) { 246; CHECK-LE-LABEL: setbc15: 247; CHECK-LE: # %bb.0: # %entry 248; CHECK-LE-NEXT: cmpw r3, r4 249; CHECK-LE-NEXT: setbc r3, eq 250; CHECK-LE-NEXT: pstw r3, globalVal2@PCREL(0), 1 251; CHECK-LE-NEXT: blr 252; 253; CHECK-BE-LABEL: setbc15: 254; CHECK-BE: # %bb.0: # %entry 255; CHECK-BE-NEXT: cmpw r3, r4 256; CHECK-BE-NEXT: addis r4, r2, globalVal2@toc@ha 257; CHECK-BE-NEXT: setbc r3, eq 258; CHECK-BE-NEXT: stw r3, globalVal2@toc@l(r4) 259; CHECK-BE-NEXT: blr 260entry: 261 %cmp = icmp eq i32 %a, %b 262 %conv = zext i1 %cmp to i32 263 store i32 %conv, ptr @globalVal2, align 4 264 ret void 265} 266 267 268define dso_local signext i32 @setbc16(i16 zeroext %a, i16 zeroext %b) { 269; CHECK-LABEL: setbc16: 270; CHECK: # %bb.0: # %entry 271; CHECK-NEXT: cmpw r3, r4 272; CHECK-NEXT: setbc r3, eq 273; CHECK-NEXT: blr 274entry: 275 %cmp = icmp eq i16 %a, %b 276 %conv2 = zext i1 %cmp to i32 277 ret i32 %conv2 278} 279 280 281define dso_local void @setbc17(i16 zeroext %a, i16 zeroext %b) { 282; CHECK-LE-LABEL: setbc17: 283; CHECK-LE: # %bb.0: # %entry 284; CHECK-LE-NEXT: cmpw r3, r4 285; CHECK-LE-NEXT: setbc r3, eq 286; CHECK-LE-NEXT: psth r3, globalVal4@PCREL(0), 1 287; CHECK-LE-NEXT: blr 288; 289; CHECK-BE-LABEL: setbc17: 290; CHECK-BE: # %bb.0: # %entry 291; CHECK-BE-NEXT: cmpw r3, r4 292; CHECK-BE-NEXT: addis r4, r2, globalVal4@toc@ha 293; CHECK-BE-NEXT: setbc r3, eq 294; CHECK-BE-NEXT: sth r3, globalVal4@toc@l(r4) 295; CHECK-BE-NEXT: blr 296entry: 297 %cmp = icmp eq i16 %a, %b 298 %conv3 = zext i1 %cmp to i16 299 store i16 %conv3, ptr @globalVal4, align 2 300 ret void 301} 302 303 304define dso_local signext i32 @setbc18(i8 signext %a, i8 signext %b) { 305; CHECK-LABEL: setbc18: 306; CHECK: # %bb.0: # %entry 307; CHECK-NEXT: cmpw r3, r4 308; CHECK-NEXT: setbc r3, gt 309; CHECK-NEXT: blr 310entry: 311 %cmp = icmp sgt i8 %a, %b 312 %conv2 = zext i1 %cmp to i32 313 ret i32 %conv2 314} 315 316 317define dso_local void @setbc19(i8 signext %a, i8 signext %b) { 318; CHECK-LE-LABEL: setbc19: 319; CHECK-LE: # %bb.0: # %entry 320; CHECK-LE-NEXT: cmpw r3, r4 321; CHECK-LE-NEXT: setbc r3, gt 322; CHECK-LE-NEXT: pstb r3, globalVal@PCREL(0), 1 323; CHECK-LE-NEXT: blr 324; 325; CHECK-BE-LABEL: setbc19: 326; CHECK-BE: # %bb.0: # %entry 327; CHECK-BE-NEXT: cmpw r3, r4 328; CHECK-BE-NEXT: addis r4, r2, globalVal@toc@ha 329; CHECK-BE-NEXT: setbc r3, gt 330; CHECK-BE-NEXT: stb r3, globalVal@toc@l(r4) 331; CHECK-BE-NEXT: blr 332entry: 333 %cmp = icmp sgt i8 %a, %b 334 %conv3 = zext i1 %cmp to i8 335 store i8 %conv3, ptr @globalVal, align 1 336 ret void 337} 338 339 340define dso_local void @setbc20(i32 signext %a, i32 signext %b) { 341; CHECK-LE-LABEL: setbc20: 342; CHECK-LE: # %bb.0: # %entry 343; CHECK-LE-NEXT: cmpw r3, r4 344; CHECK-LE-NEXT: setbc r3, gt 345; CHECK-LE-NEXT: pstw r3, globalVal2@PCREL(0), 1 346; CHECK-LE-NEXT: blr 347; 348; CHECK-BE-LABEL: setbc20: 349; CHECK-BE: # %bb.0: # %entry 350; CHECK-BE-NEXT: cmpw r3, r4 351; CHECK-BE-NEXT: addis r4, r2, globalVal2@toc@ha 352; CHECK-BE-NEXT: setbc r3, gt 353; CHECK-BE-NEXT: stw r3, globalVal2@toc@l(r4) 354; CHECK-BE-NEXT: blr 355entry: 356 %cmp = icmp sgt i32 %a, %b 357 %conv = zext i1 %cmp to i32 358 store i32 %conv, ptr @globalVal2, align 4 359 ret void 360} 361 362 363define dso_local signext i32 @setbc21(i64 %a, i64 %b) { 364; CHECK-LABEL: setbc21: 365; CHECK: # %bb.0: # %entry 366; CHECK-NEXT: cmpd r3, r4 367; CHECK-NEXT: setbc r3, gt 368; CHECK-NEXT: blr 369entry: 370 %cmp = icmp sgt i64 %a, %b 371 %conv = zext i1 %cmp to i32 372 ret i32 %conv 373} 374 375 376define dso_local void @setbc22(i64 %a, i64 %b) { 377; CHECK-LE-LABEL: setbc22: 378; CHECK-LE: # %bb.0: # %entry 379; CHECK-LE-NEXT: cmpd r3, r4 380; CHECK-LE-NEXT: setbc r3, gt 381; CHECK-LE-NEXT: pstd r3, globalVal3@PCREL(0), 1 382; CHECK-LE-NEXT: blr 383; 384; CHECK-BE-LABEL: setbc22: 385; CHECK-BE: # %bb.0: # %entry 386; CHECK-BE-NEXT: cmpd r3, r4 387; CHECK-BE-NEXT: addis r4, r2, globalVal3@toc@ha 388; CHECK-BE-NEXT: setbc r3, gt 389; CHECK-BE-NEXT: std r3, globalVal3@toc@l(r4) 390; CHECK-BE-NEXT: blr 391entry: 392 %cmp = icmp sgt i64 %a, %b 393 %conv1 = zext i1 %cmp to i64 394 store i64 %conv1, ptr @globalVal3, align 8 395 ret void 396} 397 398 399define dso_local signext i32 @setbc23(i16 signext %a, i16 signext %b) { 400; CHECK-LABEL: setbc23: 401; CHECK: # %bb.0: # %entry 402; CHECK-NEXT: cmpw r3, r4 403; CHECK-NEXT: setbc r3, gt 404; CHECK-NEXT: blr 405entry: 406 %cmp = icmp sgt i16 %a, %b 407 %conv2 = zext i1 %cmp to i32 408 ret i32 %conv2 409} 410 411 412define dso_local void @setbc24(i16 signext %a, i16 signext %b) { 413; CHECK-LE-LABEL: setbc24: 414; CHECK-LE: # %bb.0: # %entry 415; CHECK-LE-NEXT: cmpw r3, r4 416; CHECK-LE-NEXT: setbc r3, gt 417; CHECK-LE-NEXT: psth r3, globalVal4@PCREL(0), 1 418; CHECK-LE-NEXT: blr 419; 420; CHECK-BE-LABEL: setbc24: 421; CHECK-BE: # %bb.0: # %entry 422; CHECK-BE-NEXT: cmpw r3, r4 423; CHECK-BE-NEXT: addis r4, r2, globalVal4@toc@ha 424; CHECK-BE-NEXT: setbc r3, gt 425; CHECK-BE-NEXT: sth r3, globalVal4@toc@l(r4) 426; CHECK-BE-NEXT: blr 427entry: 428 %cmp = icmp sgt i16 %a, %b 429 %conv3 = zext i1 %cmp to i16 430 store i16 %conv3, ptr @globalVal4, align 2 431 ret void 432} 433 434 435define dso_local signext i32 @setbc25(i8 signext %a, i8 signext %b) { 436; CHECK-LABEL: setbc25: 437; CHECK: # %bb.0: # %entry 438; CHECK-NEXT: cmpw r3, r4 439; CHECK-NEXT: setbc r3, lt 440; CHECK-NEXT: blr 441entry: 442 %cmp = icmp slt i8 %a, %b 443 %conv2 = zext i1 %cmp to i32 444 ret i32 %conv2 445} 446 447 448define dso_local void @setbc26(i8 signext %a, i8 signext %b) { 449; CHECK-LE-LABEL: setbc26: 450; CHECK-LE: # %bb.0: # %entry 451; CHECK-LE-NEXT: cmpw r3, r4 452; CHECK-LE-NEXT: setbc r3, lt 453; CHECK-LE-NEXT: pstb r3, globalVal@PCREL(0), 1 454; CHECK-LE-NEXT: blr 455; 456; CHECK-BE-LABEL: setbc26: 457; CHECK-BE: # %bb.0: # %entry 458; CHECK-BE-NEXT: cmpw r3, r4 459; CHECK-BE-NEXT: addis r4, r2, globalVal@toc@ha 460; CHECK-BE-NEXT: setbc r3, lt 461; CHECK-BE-NEXT: stb r3, globalVal@toc@l(r4) 462; CHECK-BE-NEXT: blr 463entry: 464 %cmp = icmp slt i8 %a, %b 465 %conv3 = zext i1 %cmp to i8 466 store i8 %conv3, ptr @globalVal, align 1 467 ret void 468} 469 470 471define dso_local void @setbc27(i32 signext %a, i32 signext %b) { 472; CHECK-LE-LABEL: setbc27: 473; CHECK-LE: # %bb.0: # %entry 474; CHECK-LE-NEXT: cmpw r3, r4 475; CHECK-LE-NEXT: setbc r3, lt 476; CHECK-LE-NEXT: pstw r3, globalVal2@PCREL(0), 1 477; CHECK-LE-NEXT: blr 478; 479; CHECK-BE-LABEL: setbc27: 480; CHECK-BE: # %bb.0: # %entry 481; CHECK-BE-NEXT: cmpw r3, r4 482; CHECK-BE-NEXT: addis r4, r2, globalVal2@toc@ha 483; CHECK-BE-NEXT: setbc r3, lt 484; CHECK-BE-NEXT: stw r3, globalVal2@toc@l(r4) 485; CHECK-BE-NEXT: blr 486entry: 487 %cmp = icmp slt i32 %a, %b 488 %conv = zext i1 %cmp to i32 489 store i32 %conv, ptr @globalVal2, align 4 490 ret void 491} 492 493 494define dso_local signext i32 @setbc28(i64 %a, i64 %b) { 495; CHECK-LABEL: setbc28: 496; CHECK: # %bb.0: # %entry 497; CHECK-NEXT: cmpd r3, r4 498; CHECK-NEXT: setbc r3, lt 499; CHECK-NEXT: blr 500entry: 501 %cmp = icmp slt i64 %a, %b 502 %conv = zext i1 %cmp to i32 503 ret i32 %conv 504} 505 506 507define signext i64 @setbc29(i64 %a, i64 %b) { 508; CHECK-LABEL: setbc29: 509; CHECK: # %bb.0: # %entry 510; CHECK-NEXT: cmpd r3, r4 511; CHECK-NEXT: setbc r3, lt 512; CHECK-NEXT: blr 513entry: 514 %cmp = icmp slt i64 %a, %b 515 %conv = zext i1 %cmp to i64 516 ret i64 %conv 517} 518 519 520define dso_local void @setbc30(i64 %a, i64 %b) { 521; CHECK-LE-LABEL: setbc30: 522; CHECK-LE: # %bb.0: # %entry 523; CHECK-LE-NEXT: cmpd r3, r4 524; CHECK-LE-NEXT: setbc r3, lt 525; CHECK-LE-NEXT: pstd r3, globalVal3@PCREL(0), 1 526; CHECK-LE-NEXT: blr 527; 528; CHECK-BE-LABEL: setbc30: 529; CHECK-BE: # %bb.0: # %entry 530; CHECK-BE-NEXT: cmpd r3, r4 531; CHECK-BE-NEXT: addis r4, r2, globalVal3@toc@ha 532; CHECK-BE-NEXT: setbc r3, lt 533; CHECK-BE-NEXT: std r3, globalVal3@toc@l(r4) 534; CHECK-BE-NEXT: blr 535entry: 536 %cmp = icmp slt i64 %a, %b 537 %conv1 = zext i1 %cmp to i64 538 store i64 %conv1, ptr @globalVal3, align 8 539 ret void 540} 541 542 543define dso_local signext i32 @setbc31(i16 signext %a, i16 signext %b) { 544; CHECK-LABEL: setbc31: 545; CHECK: # %bb.0: # %entry 546; CHECK-NEXT: cmpw r3, r4 547; CHECK-NEXT: setbc r3, lt 548; CHECK-NEXT: blr 549entry: 550 %cmp = icmp slt i16 %a, %b 551 %conv2 = zext i1 %cmp to i32 552 ret i32 %conv2 553} 554 555 556define dso_local void @setbc32(i16 signext %a, i16 signext %b) { 557; CHECK-LE-LABEL: setbc32: 558; CHECK-LE: # %bb.0: # %entry 559; CHECK-LE-NEXT: cmpw r3, r4 560; CHECK-LE-NEXT: setbc r3, lt 561; CHECK-LE-NEXT: psth r3, globalVal4@PCREL(0), 1 562; CHECK-LE-NEXT: blr 563; 564; CHECK-BE-LABEL: setbc32: 565; CHECK-BE: # %bb.0: # %entry 566; CHECK-BE-NEXT: cmpw r3, r4 567; CHECK-BE-NEXT: addis r4, r2, globalVal4@toc@ha 568; CHECK-BE-NEXT: setbc r3, lt 569; CHECK-BE-NEXT: sth r3, globalVal4@toc@l(r4) 570; CHECK-BE-NEXT: blr 571entry: 572 %cmp = icmp slt i16 %a, %b 573 %conv3 = zext i1 %cmp to i16 574 store i16 %conv3, ptr @globalVal4, align 2 575 ret void 576} 577 578 579define i64 @setbc33(i8 signext %a, i8 signext %b) { 580; CHECK-LABEL: setbc33: 581; CHECK: # %bb.0: # %entry 582; CHECK-NEXT: cmpw r3, r4 583; CHECK-NEXT: setbc r3, eq 584; CHECK-NEXT: blr 585entry: 586 %cmp = icmp eq i8 %a, %b 587 %conv3 = zext i1 %cmp to i64 588 ret i64 %conv3 589} 590 591 592define dso_local void @setbc34(i8 signext %a, i8 signext %b) { 593; CHECK-LE-LABEL: setbc34: 594; CHECK-LE: # %bb.0: # %entry 595; CHECK-LE-NEXT: cmpw r3, r4 596; CHECK-LE-NEXT: setbc r3, eq 597; CHECK-LE-NEXT: pstb r3, globalVal@PCREL(0), 1 598; CHECK-LE-NEXT: blr 599; 600; CHECK-BE-LABEL: setbc34: 601; CHECK-BE: # %bb.0: # %entry 602; CHECK-BE-NEXT: cmpw r3, r4 603; CHECK-BE-NEXT: addis r4, r2, globalVal@toc@ha 604; CHECK-BE-NEXT: setbc r3, eq 605; CHECK-BE-NEXT: stb r3, globalVal@toc@l(r4) 606; CHECK-BE-NEXT: blr 607entry: 608 %cmp = icmp eq i8 %a, %b 609 %conv3 = zext i1 %cmp to i8 610 store i8 %conv3, ptr @globalVal, align 1 611 ret void 612} 613 614 615define i64 @setbc35(i32 signext %a, i32 signext %b) { 616; CHECK-LABEL: setbc35: 617; CHECK: # %bb.0: # %entry 618; CHECK-NEXT: cmpw r3, r4 619; CHECK-NEXT: setbc r3, eq 620; CHECK-NEXT: blr 621entry: 622 %cmp = icmp eq i32 %a, %b 623 %conv1 = zext i1 %cmp to i64 624 ret i64 %conv1 625} 626 627 628define dso_local void @setbc36(i32 signext %a, i32 signext %b) { 629; CHECK-LE-LABEL: setbc36: 630; CHECK-LE: # %bb.0: # %entry 631; CHECK-LE-NEXT: cmpw r3, r4 632; CHECK-LE-NEXT: setbc r3, eq 633; CHECK-LE-NEXT: pstw r3, globalVal2@PCREL(0), 1 634; CHECK-LE-NEXT: blr 635; 636; CHECK-BE-LABEL: setbc36: 637; CHECK-BE: # %bb.0: # %entry 638; CHECK-BE-NEXT: cmpw r3, r4 639; CHECK-BE-NEXT: addis r4, r2, globalVal2@toc@ha 640; CHECK-BE-NEXT: setbc r3, eq 641; CHECK-BE-NEXT: stw r3, globalVal2@toc@l(r4) 642; CHECK-BE-NEXT: blr 643entry: 644 %cmp = icmp eq i32 %a, %b 645 %conv = zext i1 %cmp to i32 646 store i32 %conv, ptr @globalVal2, align 4 647 ret void 648} 649 650 651define dso_local void @setbc37(i64 %a, i64 %b) { 652; CHECK-LE-LABEL: setbc37: 653; CHECK-LE: # %bb.0: # %entry 654; CHECK-LE-NEXT: cmpd r3, r4 655; CHECK-LE-NEXT: setbc r3, eq 656; CHECK-LE-NEXT: pstd r3, globalVal3@PCREL(0), 1 657; CHECK-LE-NEXT: blr 658; 659; CHECK-BE-LABEL: setbc37: 660; CHECK-BE: # %bb.0: # %entry 661; CHECK-BE-NEXT: cmpd r3, r4 662; CHECK-BE-NEXT: addis r4, r2, globalVal3@toc@ha 663; CHECK-BE-NEXT: setbc r3, eq 664; CHECK-BE-NEXT: std r3, globalVal3@toc@l(r4) 665; CHECK-BE-NEXT: blr 666entry: 667 %cmp = icmp eq i64 %a, %b 668 %conv1 = zext i1 %cmp to i64 669 store i64 %conv1, ptr @globalVal3, align 8 670 ret void 671} 672 673 674define i64 @setbc38(i16 signext %a, i16 signext %b) { 675; CHECK-LABEL: setbc38: 676; CHECK: # %bb.0: # %entry 677; CHECK-NEXT: cmpw r3, r4 678; CHECK-NEXT: setbc r3, eq 679; CHECK-NEXT: blr 680entry: 681 %cmp = icmp eq i16 %a, %b 682 %conv3 = zext i1 %cmp to i64 683 ret i64 %conv3 684} 685 686 687define dso_local void @setbc39(i16 signext %a, i16 signext %b) { 688; CHECK-LE-LABEL: setbc39: 689; CHECK-LE: # %bb.0: # %entry 690; CHECK-LE-NEXT: cmpw r3, r4 691; CHECK-LE-NEXT: setbc r3, eq 692; CHECK-LE-NEXT: psth r3, globalVal4@PCREL(0), 1 693; CHECK-LE-NEXT: blr 694; 695; CHECK-BE-LABEL: setbc39: 696; CHECK-BE: # %bb.0: # %entry 697; CHECK-BE-NEXT: cmpw r3, r4 698; CHECK-BE-NEXT: addis r4, r2, globalVal4@toc@ha 699; CHECK-BE-NEXT: setbc r3, eq 700; CHECK-BE-NEXT: sth r3, globalVal4@toc@l(r4) 701; CHECK-BE-NEXT: blr 702entry: 703 %cmp = icmp eq i16 %a, %b 704 %conv3 = zext i1 %cmp to i16 705 store i16 %conv3, ptr @globalVal4, align 2 706 ret void 707} 708 709 710define i64 @setbc40(i8 zeroext %a, i8 zeroext %b) { 711; CHECK-LABEL: setbc40: 712; CHECK: # %bb.0: # %entry 713; CHECK-NEXT: cmpw r3, r4 714; CHECK-NEXT: setbc r3, eq 715; CHECK-NEXT: blr 716entry: 717 %cmp = icmp eq i8 %a, %b 718 %conv3 = zext i1 %cmp to i64 719 ret i64 %conv3 720} 721 722 723define dso_local void @setbc41(i8 zeroext %a, i8 zeroext %b) { 724; CHECK-LE-LABEL: setbc41: 725; CHECK-LE: # %bb.0: # %entry 726; CHECK-LE-NEXT: cmpw r3, r4 727; CHECK-LE-NEXT: setbc r3, eq 728; CHECK-LE-NEXT: pstb r3, globalVal@PCREL(0), 1 729; CHECK-LE-NEXT: blr 730; 731; CHECK-BE-LABEL: setbc41: 732; CHECK-BE: # %bb.0: # %entry 733; CHECK-BE-NEXT: cmpw r3, r4 734; CHECK-BE-NEXT: addis r4, r2, globalVal@toc@ha 735; CHECK-BE-NEXT: setbc r3, eq 736; CHECK-BE-NEXT: stb r3, globalVal@toc@l(r4) 737; CHECK-BE-NEXT: blr 738entry: 739 %cmp = icmp eq i8 %a, %b 740 %conv3 = zext i1 %cmp to i8 741 store i8 %conv3, ptr @globalVal, align 1 742 ret void 743} 744 745 746define i64 @setbc42(i32 zeroext %a, i32 zeroext %b) { 747; CHECK-LABEL: setbc42: 748; CHECK: # %bb.0: # %entry 749; CHECK-NEXT: cmpw r3, r4 750; CHECK-NEXT: setbc r3, eq 751; CHECK-NEXT: blr 752entry: 753 %cmp = icmp eq i32 %a, %b 754 %conv1 = zext i1 %cmp to i64 755 ret i64 %conv1 756} 757 758 759define dso_local void @setbc43(i32 zeroext %a, i32 zeroext %b) { 760; CHECK-LE-LABEL: setbc43: 761; CHECK-LE: # %bb.0: # %entry 762; CHECK-LE-NEXT: cmpw r3, r4 763; CHECK-LE-NEXT: setbc r3, eq 764; CHECK-LE-NEXT: pstw r3, globalVal2@PCREL(0), 1 765; CHECK-LE-NEXT: blr 766; 767; CHECK-BE-LABEL: setbc43: 768; CHECK-BE: # %bb.0: # %entry 769; CHECK-BE-NEXT: cmpw r3, r4 770; CHECK-BE-NEXT: addis r4, r2, globalVal2@toc@ha 771; CHECK-BE-NEXT: setbc r3, eq 772; CHECK-BE-NEXT: stw r3, globalVal2@toc@l(r4) 773; CHECK-BE-NEXT: blr 774entry: 775 %cmp = icmp eq i32 %a, %b 776 %conv = zext i1 %cmp to i32 777 store i32 %conv, ptr @globalVal2, align 4 778 ret void 779} 780 781 782define i64 @setbc44(i64 %a, i64 %b) { 783; CHECK-LABEL: setbc44: 784; CHECK: # %bb.0: # %entry 785; CHECK-NEXT: cmpd r3, r4 786; CHECK-NEXT: setbc r3, eq 787; CHECK-NEXT: blr 788entry: 789 %cmp = icmp eq i64 %a, %b 790 %conv1 = zext i1 %cmp to i64 791 ret i64 %conv1 792} 793 794 795define dso_local void @setbc45(i64 %a, i64 %b) { 796; CHECK-LE-LABEL: setbc45: 797; CHECK-LE: # %bb.0: # %entry 798; CHECK-LE-NEXT: cmpd r3, r4 799; CHECK-LE-NEXT: setbc r3, eq 800; CHECK-LE-NEXT: pstd r3, globalVal3@PCREL(0), 1 801; CHECK-LE-NEXT: blr 802; 803; CHECK-BE-LABEL: setbc45: 804; CHECK-BE: # %bb.0: # %entry 805; CHECK-BE-NEXT: cmpd r3, r4 806; CHECK-BE-NEXT: addis r4, r2, globalVal3@toc@ha 807; CHECK-BE-NEXT: setbc r3, eq 808; CHECK-BE-NEXT: std r3, globalVal3@toc@l(r4) 809; CHECK-BE-NEXT: blr 810entry: 811 %cmp = icmp eq i64 %a, %b 812 %conv1 = zext i1 %cmp to i64 813 store i64 %conv1, ptr @globalVal3, align 8 814 ret void 815} 816 817 818define i64 @setbc46(i16 zeroext %a, i16 zeroext %b) { 819; CHECK-LABEL: setbc46: 820; CHECK: # %bb.0: # %entry 821; CHECK-NEXT: cmpw r3, r4 822; CHECK-NEXT: setbc r3, eq 823; CHECK-NEXT: blr 824entry: 825 %cmp = icmp eq i16 %a, %b 826 %conv3 = zext i1 %cmp to i64 827 ret i64 %conv3 828} 829 830 831define dso_local void @setbc47(i16 zeroext %a, i16 zeroext %b) { 832; CHECK-LE-LABEL: setbc47: 833; CHECK-LE: # %bb.0: # %entry 834; CHECK-LE-NEXT: cmpw r3, r4 835; CHECK-LE-NEXT: setbc r3, eq 836; CHECK-LE-NEXT: psth r3, globalVal4@PCREL(0), 1 837; CHECK-LE-NEXT: blr 838; 839; CHECK-BE-LABEL: setbc47: 840; CHECK-BE: # %bb.0: # %entry 841; CHECK-BE-NEXT: cmpw r3, r4 842; CHECK-BE-NEXT: addis r4, r2, globalVal4@toc@ha 843; CHECK-BE-NEXT: setbc r3, eq 844; CHECK-BE-NEXT: sth r3, globalVal4@toc@l(r4) 845; CHECK-BE-NEXT: blr 846entry: 847 %cmp = icmp eq i16 %a, %b 848 %conv3 = zext i1 %cmp to i16 849 store i16 %conv3, ptr @globalVal4, align 2 850 ret void 851} 852 853 854define i64 @setbc48(i64 %a, i64 %b) { 855; CHECK-LABEL: setbc48: 856; CHECK: # %bb.0: # %entry 857; CHECK-NEXT: cmpd r3, r4 858; CHECK-NEXT: setbc r3, gt 859; CHECK-NEXT: blr 860entry: 861 %cmp = icmp sgt i64 %a, %b 862 %conv1 = zext i1 %cmp to i64 863 ret i64 %conv1 864} 865 866 867define dso_local void @setbc49(i64 %a, i64 %b) { 868; CHECK-LE-LABEL: setbc49: 869; CHECK-LE: # %bb.0: # %entry 870; CHECK-LE-NEXT: cmpd r3, r4 871; CHECK-LE-NEXT: setbc r3, gt 872; CHECK-LE-NEXT: pstd r3, globalVal3@PCREL(0), 1 873; CHECK-LE-NEXT: blr 874; 875; CHECK-BE-LABEL: setbc49: 876; CHECK-BE: # %bb.0: # %entry 877; CHECK-BE-NEXT: cmpd r3, r4 878; CHECK-BE-NEXT: addis r4, r2, globalVal3@toc@ha 879; CHECK-BE-NEXT: setbc r3, gt 880; CHECK-BE-NEXT: std r3, globalVal3@toc@l(r4) 881; CHECK-BE-NEXT: blr 882entry: 883 %cmp = icmp sgt i64 %a, %b 884 %conv1 = zext i1 %cmp to i64 885 store i64 %conv1, ptr @globalVal3, align 8 886 ret void 887} 888 889 890define i64 @setbc50(i64 %a, i64 %b) { 891; CHECK-LABEL: setbc50: 892; CHECK: # %bb.0: # %entry 893; CHECK-NEXT: cmpd r3, r4 894; CHECK-NEXT: setbc r3, lt 895; CHECK-NEXT: blr 896entry: 897 %cmp = icmp slt i64 %a, %b 898 %conv1 = zext i1 %cmp to i64 899 ret i64 %conv1 900} 901 902 903define dso_local void @setnbc51(i64 %a, i64 %b) { 904; CHECK-LE-LABEL: setnbc51: 905; CHECK-LE: # %bb.0: # %entry 906; CHECK-LE-NEXT: cmpd r3, r4 907; CHECK-LE-NEXT: setbc r3, lt 908; CHECK-LE-NEXT: pstd r3, globalVal3@PCREL(0), 1 909; CHECK-LE-NEXT: blr 910; 911; CHECK-BE-LABEL: setnbc51: 912; CHECK-BE: # %bb.0: # %entry 913; CHECK-BE-NEXT: cmpd r3, r4 914; CHECK-BE-NEXT: addis r4, r2, globalVal3@toc@ha 915; CHECK-BE-NEXT: setbc r3, lt 916; CHECK-BE-NEXT: std r3, globalVal3@toc@l(r4) 917; CHECK-BE-NEXT: blr 918entry: 919 %cmp = icmp slt i64 %a, %b 920 %conv1 = zext i1 %cmp to i64 921 store i64 %conv1, ptr @globalVal3, align 8 922 ret void 923} 924