1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mtriple=hexagon < %s | FileCheck %s 3 4declare i32 @llvm.hexagon.S2.tstbit.i(i32, i32 immarg) #0 5 6define i1 @f0(i32 %a0, i32 %a1) #1 { 7; CHECK-LABEL: f0: 8; CHECK: // %bb.0: // %b0 9; CHECK-NEXT: { 10; CHECK-NEXT: p0 = tstbit(r0,#3) 11; CHECK-NEXT: } 12; CHECK-NEXT: { 13; CHECK-NEXT: p1 = tstbit(r1,#3) 14; CHECK-NEXT: } 15; CHECK-NEXT: { 16; CHECK-NEXT: p0 = and(p0,p1) 17; CHECK-NEXT: } 18; CHECK-NEXT: { 19; CHECK-NEXT: r0 = p0 20; CHECK-NEXT: } 21; CHECK-NEXT: { 22; CHECK-NEXT: jumpr r31 23; CHECK-NEXT: } 24b0: 25 %v0 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a0, i32 3) 26 %v1 = trunc i32 %v0 to i1 27 %v2 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a1, i32 3) 28 %v3 = trunc i32 %v2 to i1 29 %v4 = and i1 %v1, %v3 30 ret i1 %v4 31} 32 33define i1 @f1(i32 %a0, i32 %a1) #1 { 34; CHECK-LABEL: f1: 35; CHECK: // %bb.0: // %b0 36; CHECK-NEXT: { 37; CHECK-NEXT: p0 = tstbit(r0,#3) 38; CHECK-NEXT: } 39; CHECK-NEXT: { 40; CHECK-NEXT: p1 = tstbit(r1,#3) 41; CHECK-NEXT: } 42; CHECK-NEXT: { 43; CHECK-NEXT: p0 = or(p0,p1) 44; CHECK-NEXT: } 45; CHECK-NEXT: { 46; CHECK-NEXT: r0 = p0 47; CHECK-NEXT: } 48; CHECK-NEXT: { 49; CHECK-NEXT: jumpr r31 50; CHECK-NEXT: } 51b0: 52 %v0 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a0, i32 3) 53 %v1 = trunc i32 %v0 to i1 54 %v2 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a1, i32 3) 55 %v3 = trunc i32 %v2 to i1 56 %v4 = or i1 %v1, %v3 57 ret i1 %v4 58} 59 60define i1 @f2(i32 %a0, i32 %a1) #1 { 61; CHECK-LABEL: f2: 62; CHECK: // %bb.0: // %b0 63; CHECK-NEXT: { 64; CHECK-NEXT: p0 = tstbit(r0,#3) 65; CHECK-NEXT: } 66; CHECK-NEXT: { 67; CHECK-NEXT: p1 = tstbit(r1,#3) 68; CHECK-NEXT: } 69; CHECK-NEXT: { 70; CHECK-NEXT: p0 = xor(p0,p1) 71; CHECK-NEXT: } 72; CHECK-NEXT: { 73; CHECK-NEXT: r0 = p0 74; CHECK-NEXT: } 75; CHECK-NEXT: { 76; CHECK-NEXT: jumpr r31 77; CHECK-NEXT: } 78b0: 79 %v0 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a0, i32 3) 80 %v1 = trunc i32 %v0 to i1 81 %v2 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a1, i32 3) 82 %v3 = trunc i32 %v2 to i1 83 %v4 = xor i1 %v1, %v3 84 ret i1 %v4 85} 86 87define i1 @f3(i32 %a0, i32 %a1) #1 { 88; CHECK-LABEL: f3: 89; CHECK: // %bb.0: // %b0 90; CHECK-NEXT: { 91; CHECK-NEXT: p0 = tstbit(r0,#3) 92; CHECK-NEXT: } 93; CHECK-NEXT: { 94; CHECK-NEXT: p1 = tstbit(r1,#3) 95; CHECK-NEXT: } 96; CHECK-NEXT: { 97; CHECK-NEXT: r0 = p0 98; CHECK-NEXT: } 99; CHECK-NEXT: { 100; CHECK-NEXT: r1 = p1 101; CHECK-NEXT: } 102; CHECK-NEXT: { 103; CHECK-NEXT: p0 = tstbit(r0,#0) 104; CHECK-NEXT: } 105; CHECK-NEXT: { 106; CHECK-NEXT: p1 = tstbit(r1,#0) 107; CHECK-NEXT: } 108; CHECK-NEXT: { 109; CHECK-NEXT: p0 = and(p0,!p1) 110; CHECK-NEXT: } 111; CHECK-NEXT: { 112; CHECK-NEXT: r0 = mux(p0,#1,#0) 113; CHECK-NEXT: } 114; CHECK-NEXT: { 115; CHECK-NEXT: jumpr r31 116; CHECK-NEXT: } 117b0: 118 %v0 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a0, i32 3) 119 %v1 = trunc i32 %v0 to i1 120 %v2 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a1, i32 3) 121 %v3 = trunc i32 %v2 to i1 122 %v4 = xor i1 %v3, true 123 %v5 = and i1 %v1, %v4 124 ret i1 %v5 125} 126 127define i1 @f4(i32 %a0, i32 %a1) #1 { 128; CHECK-LABEL: f4: 129; CHECK: // %bb.0: // %b0 130; CHECK-NEXT: { 131; CHECK-NEXT: p0 = tstbit(r0,#3) 132; CHECK-NEXT: } 133; CHECK-NEXT: { 134; CHECK-NEXT: p1 = tstbit(r1,#3) 135; CHECK-NEXT: } 136; CHECK-NEXT: { 137; CHECK-NEXT: r0 = p0 138; CHECK-NEXT: } 139; CHECK-NEXT: { 140; CHECK-NEXT: r1 = p1 141; CHECK-NEXT: } 142; CHECK-NEXT: { 143; CHECK-NEXT: p0 = tstbit(r0,#0) 144; CHECK-NEXT: } 145; CHECK-NEXT: { 146; CHECK-NEXT: p1 = tstbit(r1,#0) 147; CHECK-NEXT: } 148; CHECK-NEXT: { 149; CHECK-NEXT: p0 = or(p0,!p1) 150; CHECK-NEXT: } 151; CHECK-NEXT: { 152; CHECK-NEXT: r0 = mux(p0,#1,#0) 153; CHECK-NEXT: } 154; CHECK-NEXT: { 155; CHECK-NEXT: jumpr r31 156; CHECK-NEXT: } 157b0: 158 %v0 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a0, i32 3) 159 %v1 = trunc i32 %v0 to i1 160 %v2 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a1, i32 3) 161 %v3 = trunc i32 %v2 to i1 162 %v4 = xor i1 %v3, true 163 %v5 = or i1 %v1, %v4 164 ret i1 %v5 165} 166 167define i1 @f5(i32 %a0, i32 %a1, i32 %a2) #1 { 168; CHECK-LABEL: f5: 169; CHECK: // %bb.0: // %b0 170; CHECK-NEXT: { 171; CHECK-NEXT: p0 = tstbit(r0,#3) 172; CHECK-NEXT: } 173; CHECK-NEXT: { 174; CHECK-NEXT: p1 = tstbit(r1,#3) 175; CHECK-NEXT: } 176; CHECK-NEXT: { 177; CHECK-NEXT: p2 = tstbit(r2,#3) 178; CHECK-NEXT: } 179; CHECK-NEXT: { 180; CHECK-NEXT: p0 = and(p2,and(p0,p1)) 181; CHECK-NEXT: } 182; CHECK-NEXT: { 183; CHECK-NEXT: r0 = p0 184; CHECK-NEXT: } 185; CHECK-NEXT: { 186; CHECK-NEXT: jumpr r31 187; CHECK-NEXT: } 188b0: 189 %v0 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a0, i32 3) 190 %v1 = trunc i32 %v0 to i1 191 %v2 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a1, i32 3) 192 %v3 = trunc i32 %v2 to i1 193 %v4 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a2, i32 3) 194 %v5 = trunc i32 %v4 to i1 195 %v6 = and i1 %v1, %v3 196 %v7 = and i1 %v5, %v6 197 ret i1 %v7 198} 199 200define i1 @f6(i32 %a0, i32 %a1, i32 %a2) #1 { 201; CHECK-LABEL: f6: 202; CHECK: // %bb.0: // %b0 203; CHECK-NEXT: { 204; CHECK-NEXT: p0 = tstbit(r0,#3) 205; CHECK-NEXT: } 206; CHECK-NEXT: { 207; CHECK-NEXT: p1 = tstbit(r1,#3) 208; CHECK-NEXT: } 209; CHECK-NEXT: { 210; CHECK-NEXT: p2 = tstbit(r2,#3) 211; CHECK-NEXT: } 212; CHECK-NEXT: { 213; CHECK-NEXT: p0 = and(p2,or(p0,p1)) 214; CHECK-NEXT: } 215; CHECK-NEXT: { 216; CHECK-NEXT: r0 = p0 217; CHECK-NEXT: } 218; CHECK-NEXT: { 219; CHECK-NEXT: jumpr r31 220; CHECK-NEXT: } 221b0: 222 %v0 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a0, i32 3) 223 %v1 = trunc i32 %v0 to i1 224 %v2 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a1, i32 3) 225 %v3 = trunc i32 %v2 to i1 226 %v4 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a2, i32 3) 227 %v5 = trunc i32 %v4 to i1 228 %v6 = or i1 %v1, %v3 229 %v7 = and i1 %v5, %v6 230 ret i1 %v7 231} 232 233define i1 @f7(i32 %a0, i32 %a1, i32 %a2) #1 { 234; CHECK-LABEL: f7: 235; CHECK: // %bb.0: // %b0 236; CHECK-NEXT: { 237; CHECK-NEXT: p0 = tstbit(r0,#3) 238; CHECK-NEXT: } 239; CHECK-NEXT: { 240; CHECK-NEXT: p1 = tstbit(r1,#3) 241; CHECK-NEXT: } 242; CHECK-NEXT: { 243; CHECK-NEXT: p2 = tstbit(r2,#3) 244; CHECK-NEXT: } 245; CHECK-NEXT: { 246; CHECK-NEXT: p0 = or(p2,and(p0,p1)) 247; CHECK-NEXT: } 248; CHECK-NEXT: { 249; CHECK-NEXT: r0 = p0 250; CHECK-NEXT: } 251; CHECK-NEXT: { 252; CHECK-NEXT: jumpr r31 253; CHECK-NEXT: } 254b0: 255 %v0 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a0, i32 3) 256 %v1 = trunc i32 %v0 to i1 257 %v2 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a1, i32 3) 258 %v3 = trunc i32 %v2 to i1 259 %v4 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a2, i32 3) 260 %v5 = trunc i32 %v4 to i1 261 %v6 = and i1 %v1, %v3 262 %v7 = or i1 %v5, %v6 263 ret i1 %v7 264} 265 266define i1 @f8(i32 %a0, i32 %a1, i32 %a2) #1 { 267; CHECK-LABEL: f8: 268; CHECK: // %bb.0: // %b0 269; CHECK-NEXT: { 270; CHECK-NEXT: p0 = tstbit(r0,#3) 271; CHECK-NEXT: } 272; CHECK-NEXT: { 273; CHECK-NEXT: p1 = tstbit(r1,#3) 274; CHECK-NEXT: } 275; CHECK-NEXT: { 276; CHECK-NEXT: p2 = tstbit(r2,#3) 277; CHECK-NEXT: } 278; CHECK-NEXT: { 279; CHECK-NEXT: p0 = or(p2,or(p0,p1)) 280; CHECK-NEXT: } 281; CHECK-NEXT: { 282; CHECK-NEXT: r0 = p0 283; CHECK-NEXT: } 284; CHECK-NEXT: { 285; CHECK-NEXT: jumpr r31 286; CHECK-NEXT: } 287b0: 288 %v0 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a0, i32 3) 289 %v1 = trunc i32 %v0 to i1 290 %v2 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a1, i32 3) 291 %v3 = trunc i32 %v2 to i1 292 %v4 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a2, i32 3) 293 %v5 = trunc i32 %v4 to i1 294 %v6 = or i1 %v1, %v3 295 %v7 = or i1 %v5, %v6 296 ret i1 %v7 297} 298 299define i1 @f9(i32 %a0, i32 %a1, i32 %a2) #1 { 300; CHECK-LABEL: f9: 301; CHECK: // %bb.0: // %b0 302; CHECK-NEXT: { 303; CHECK-NEXT: p0 = tstbit(r0,#3) 304; CHECK-NEXT: } 305; CHECK-NEXT: { 306; CHECK-NEXT: p1 = tstbit(r1,#3) 307; CHECK-NEXT: } 308; CHECK-NEXT: { 309; CHECK-NEXT: p2 = tstbit(r2,#3) 310; CHECK-NEXT: } 311; CHECK-NEXT: { 312; CHECK-NEXT: r0 = p0 313; CHECK-NEXT: } 314; CHECK-NEXT: { 315; CHECK-NEXT: r1 = p1 316; CHECK-NEXT: } 317; CHECK-NEXT: { 318; CHECK-NEXT: r2 = p2 319; CHECK-NEXT: } 320; CHECK-NEXT: { 321; CHECK-NEXT: p0 = tstbit(r0,#0) 322; CHECK-NEXT: } 323; CHECK-NEXT: { 324; CHECK-NEXT: p1 = tstbit(r1,#0) 325; CHECK-NEXT: } 326; CHECK-NEXT: { 327; CHECK-NEXT: p2 = tstbit(r2,#0) 328; CHECK-NEXT: } 329; CHECK-NEXT: { 330; CHECK-NEXT: p0 = and(p2,and(p0,!p1)) 331; CHECK-NEXT: } 332; CHECK-NEXT: { 333; CHECK-NEXT: r0 = mux(p0,#1,#0) 334; CHECK-NEXT: } 335; CHECK-NEXT: { 336; CHECK-NEXT: jumpr r31 337; CHECK-NEXT: } 338b0: 339 %v0 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a0, i32 3) 340 %v1 = trunc i32 %v0 to i1 341 %v2 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a1, i32 3) 342 %v3 = trunc i32 %v2 to i1 343 %v4 = xor i1 %v3, true 344 %v5 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a2, i32 3) 345 %v6 = trunc i32 %v5 to i1 346 %v7 = and i1 %v1, %v4 347 %v8 = and i1 %v6, %v7 348 ret i1 %v8 349} 350 351define i1 @f10(i32 %a0, i32 %a1, i32 %a2) #1 { 352; CHECK-LABEL: f10: 353; CHECK: // %bb.0: // %b0 354; CHECK-NEXT: { 355; CHECK-NEXT: p0 = tstbit(r0,#3) 356; CHECK-NEXT: } 357; CHECK-NEXT: { 358; CHECK-NEXT: p1 = tstbit(r1,#3) 359; CHECK-NEXT: } 360; CHECK-NEXT: { 361; CHECK-NEXT: p2 = tstbit(r2,#3) 362; CHECK-NEXT: } 363; CHECK-NEXT: { 364; CHECK-NEXT: r0 = p0 365; CHECK-NEXT: } 366; CHECK-NEXT: { 367; CHECK-NEXT: r1 = p1 368; CHECK-NEXT: } 369; CHECK-NEXT: { 370; CHECK-NEXT: r2 = p2 371; CHECK-NEXT: } 372; CHECK-NEXT: { 373; CHECK-NEXT: p0 = tstbit(r0,#0) 374; CHECK-NEXT: } 375; CHECK-NEXT: { 376; CHECK-NEXT: p1 = tstbit(r1,#0) 377; CHECK-NEXT: } 378; CHECK-NEXT: { 379; CHECK-NEXT: p2 = tstbit(r2,#0) 380; CHECK-NEXT: } 381; CHECK-NEXT: { 382; CHECK-NEXT: p0 = and(p2,or(p0,!p1)) 383; CHECK-NEXT: } 384; CHECK-NEXT: { 385; CHECK-NEXT: r0 = mux(p0,#1,#0) 386; CHECK-NEXT: } 387; CHECK-NEXT: { 388; CHECK-NEXT: jumpr r31 389; CHECK-NEXT: } 390b0: 391 %v0 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a0, i32 3) 392 %v1 = trunc i32 %v0 to i1 393 %v2 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a1, i32 3) 394 %v3 = trunc i32 %v2 to i1 395 %v4 = xor i1 %v3, true 396 %v5 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a2, i32 3) 397 %v6 = trunc i32 %v5 to i1 398 %v7 = or i1 %v1, %v4 399 %v8 = and i1 %v6, %v7 400 ret i1 %v8 401} 402 403define i1 @f11(i32 %a0, i32 %a1, i32 %a2) #1 { 404; CHECK-LABEL: f11: 405; CHECK: // %bb.0: // %b0 406; CHECK-NEXT: { 407; CHECK-NEXT: p0 = tstbit(r0,#3) 408; CHECK-NEXT: } 409; CHECK-NEXT: { 410; CHECK-NEXT: p1 = tstbit(r1,#3) 411; CHECK-NEXT: } 412; CHECK-NEXT: { 413; CHECK-NEXT: p2 = tstbit(r2,#3) 414; CHECK-NEXT: } 415; CHECK-NEXT: { 416; CHECK-NEXT: r0 = p0 417; CHECK-NEXT: } 418; CHECK-NEXT: { 419; CHECK-NEXT: r1 = p1 420; CHECK-NEXT: } 421; CHECK-NEXT: { 422; CHECK-NEXT: r2 = p2 423; CHECK-NEXT: } 424; CHECK-NEXT: { 425; CHECK-NEXT: p0 = tstbit(r0,#0) 426; CHECK-NEXT: } 427; CHECK-NEXT: { 428; CHECK-NEXT: p1 = tstbit(r1,#0) 429; CHECK-NEXT: } 430; CHECK-NEXT: { 431; CHECK-NEXT: p2 = tstbit(r2,#0) 432; CHECK-NEXT: } 433; CHECK-NEXT: { 434; CHECK-NEXT: p0 = or(p2,and(p0,!p1)) 435; CHECK-NEXT: } 436; CHECK-NEXT: { 437; CHECK-NEXT: r0 = mux(p0,#1,#0) 438; CHECK-NEXT: } 439; CHECK-NEXT: { 440; CHECK-NEXT: jumpr r31 441; CHECK-NEXT: } 442b0: 443 %v0 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a0, i32 3) 444 %v1 = trunc i32 %v0 to i1 445 %v2 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a1, i32 3) 446 %v3 = trunc i32 %v2 to i1 447 %v4 = xor i1 %v3, true 448 %v5 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a2, i32 3) 449 %v6 = trunc i32 %v5 to i1 450 %v7 = and i1 %v1, %v4 451 %v8 = or i1 %v6, %v7 452 ret i1 %v8 453} 454 455define i1 @f12(i32 %a0, i32 %a1, i32 %a2) #1 { 456; CHECK-LABEL: f12: 457; CHECK: // %bb.0: // %b0 458; CHECK-NEXT: { 459; CHECK-NEXT: p0 = tstbit(r0,#3) 460; CHECK-NEXT: } 461; CHECK-NEXT: { 462; CHECK-NEXT: p1 = tstbit(r1,#3) 463; CHECK-NEXT: } 464; CHECK-NEXT: { 465; CHECK-NEXT: p2 = tstbit(r2,#3) 466; CHECK-NEXT: } 467; CHECK-NEXT: { 468; CHECK-NEXT: r0 = p0 469; CHECK-NEXT: } 470; CHECK-NEXT: { 471; CHECK-NEXT: r1 = p1 472; CHECK-NEXT: } 473; CHECK-NEXT: { 474; CHECK-NEXT: r2 = p2 475; CHECK-NEXT: } 476; CHECK-NEXT: { 477; CHECK-NEXT: p0 = tstbit(r0,#0) 478; CHECK-NEXT: } 479; CHECK-NEXT: { 480; CHECK-NEXT: p1 = tstbit(r1,#0) 481; CHECK-NEXT: } 482; CHECK-NEXT: { 483; CHECK-NEXT: p2 = tstbit(r2,#0) 484; CHECK-NEXT: } 485; CHECK-NEXT: { 486; CHECK-NEXT: p0 = or(p2,or(p0,!p1)) 487; CHECK-NEXT: } 488; CHECK-NEXT: { 489; CHECK-NEXT: r0 = mux(p0,#1,#0) 490; CHECK-NEXT: } 491; CHECK-NEXT: { 492; CHECK-NEXT: jumpr r31 493; CHECK-NEXT: } 494b0: 495 %v0 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a0, i32 3) 496 %v1 = trunc i32 %v0 to i1 497 %v2 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a1, i32 3) 498 %v3 = trunc i32 %v2 to i1 499 %v4 = xor i1 %v3, true 500 %v5 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a2, i32 3) 501 %v6 = trunc i32 %v5 to i1 502 %v7 = or i1 %v1, %v4 503 %v8 = or i1 %v6, %v7 504 ret i1 %v8 505} 506 507define <2 x i32> @f13(<2 x i32> %a0, <2 x i32> %a1) #1 { 508; CHECK-LABEL: f13: 509; CHECK: // %bb.0: // %b0 510; CHECK-NEXT: { 511; CHECK-NEXT: r5:4 = combine(#1,#1) 512; CHECK-NEXT: } 513; CHECK-NEXT: { 514; CHECK-NEXT: p0 = vcmpw.eq(r1:0,r5:4) 515; CHECK-NEXT: } 516; CHECK-NEXT: { 517; CHECK-NEXT: p1 = vcmpw.eq(r3:2,r5:4) 518; CHECK-NEXT: } 519; CHECK-NEXT: { 520; CHECK-NEXT: p0 = and(p0,p1) 521; CHECK-NEXT: } 522; CHECK-NEXT: { 523; CHECK-NEXT: r1:0 = mask(p0) 524; CHECK-NEXT: } 525; CHECK-NEXT: { 526; CHECK-NEXT: jumpr r31 527; CHECK-NEXT: } 528b0: 529 %v0 = icmp eq <2 x i32> %a0, <i32 1, i32 1> 530 %v1 = icmp eq <2 x i32> %a1, <i32 1, i32 1> 531 %v2 = and <2 x i1> %v0, %v1 532 %v3 = sext <2 x i1> %v2 to <2 x i32> 533 ret <2 x i32> %v3 534} 535 536define <2 x i32> @f14(<2 x i32> %a0, <2 x i32> %a1) #1 { 537; CHECK-LABEL: f14: 538; CHECK: // %bb.0: // %b0 539; CHECK-NEXT: { 540; CHECK-NEXT: r5:4 = combine(#1,#1) 541; CHECK-NEXT: } 542; CHECK-NEXT: { 543; CHECK-NEXT: p0 = vcmpw.eq(r1:0,r5:4) 544; CHECK-NEXT: } 545; CHECK-NEXT: { 546; CHECK-NEXT: p1 = vcmpw.eq(r3:2,r5:4) 547; CHECK-NEXT: } 548; CHECK-NEXT: { 549; CHECK-NEXT: p0 = or(p0,p1) 550; CHECK-NEXT: } 551; CHECK-NEXT: { 552; CHECK-NEXT: r1:0 = mask(p0) 553; CHECK-NEXT: } 554; CHECK-NEXT: { 555; CHECK-NEXT: jumpr r31 556; CHECK-NEXT: } 557b0: 558 %v0 = icmp eq <2 x i32> %a0, <i32 1, i32 1> 559 %v1 = icmp eq <2 x i32> %a1, <i32 1, i32 1> 560 %v2 = or <2 x i1> %v0, %v1 561 %v3 = sext <2 x i1> %v2 to <2 x i32> 562 ret <2 x i32> %v3 563} 564 565define <2 x i32> @f15(<2 x i32> %a0, <2 x i32> %a1) #1 { 566; CHECK-LABEL: f15: 567; CHECK: // %bb.0: // %b0 568; CHECK-NEXT: { 569; CHECK-NEXT: r5:4 = combine(#1,#1) 570; CHECK-NEXT: } 571; CHECK-NEXT: { 572; CHECK-NEXT: p0 = vcmpw.eq(r1:0,r5:4) 573; CHECK-NEXT: } 574; CHECK-NEXT: { 575; CHECK-NEXT: p1 = vcmpw.eq(r3:2,r5:4) 576; CHECK-NEXT: } 577; CHECK-NEXT: { 578; CHECK-NEXT: p0 = xor(p0,p1) 579; CHECK-NEXT: } 580; CHECK-NEXT: { 581; CHECK-NEXT: r1:0 = mask(p0) 582; CHECK-NEXT: } 583; CHECK-NEXT: { 584; CHECK-NEXT: jumpr r31 585; CHECK-NEXT: } 586b0: 587 %v0 = icmp eq <2 x i32> %a0, <i32 1, i32 1> 588 %v1 = icmp eq <2 x i32> %a1, <i32 1, i32 1> 589 %v2 = xor <2 x i1> %v0, %v1 590 %v3 = sext <2 x i1> %v2 to <2 x i32> 591 ret <2 x i32> %v3 592} 593 594define <2 x i32> @f16(<2 x i32> %a0, <2 x i32> %a1) #1 { 595; CHECK-LABEL: f16: 596; CHECK: // %bb.0: // %b0 597; CHECK-NEXT: { 598; CHECK-NEXT: r5:4 = combine(#1,#1) 599; CHECK-NEXT: } 600; CHECK-NEXT: { 601; CHECK-NEXT: p0 = vcmpw.eq(r1:0,r5:4) 602; CHECK-NEXT: } 603; CHECK-NEXT: { 604; CHECK-NEXT: p1 = vcmpw.eq(r3:2,r5:4) 605; CHECK-NEXT: } 606; CHECK-NEXT: { 607; CHECK-NEXT: p0 = and(p0,!p1) 608; CHECK-NEXT: } 609; CHECK-NEXT: { 610; CHECK-NEXT: r1:0 = mask(p0) 611; CHECK-NEXT: } 612; CHECK-NEXT: { 613; CHECK-NEXT: jumpr r31 614; CHECK-NEXT: } 615b0: 616 %v0 = icmp eq <2 x i32> %a0, <i32 1, i32 1> 617 %v1 = icmp eq <2 x i32> %a1, <i32 1, i32 1> 618 %v2 = xor <2 x i1> %v1, <i1 true, i1 true> 619 %v3 = and <2 x i1> %v0, %v2 620 %v4 = sext <2 x i1> %v3 to <2 x i32> 621 ret <2 x i32> %v4 622} 623 624define <2 x i32> @f17(<2 x i32> %a0, <2 x i32> %a1) #1 { 625; CHECK-LABEL: f17: 626; CHECK: // %bb.0: // %b0 627; CHECK-NEXT: { 628; CHECK-NEXT: r5:4 = combine(#1,#1) 629; CHECK-NEXT: } 630; CHECK-NEXT: { 631; CHECK-NEXT: p0 = vcmpw.eq(r1:0,r5:4) 632; CHECK-NEXT: } 633; CHECK-NEXT: { 634; CHECK-NEXT: p1 = vcmpw.eq(r3:2,r5:4) 635; CHECK-NEXT: } 636; CHECK-NEXT: { 637; CHECK-NEXT: p0 = or(p0,!p1) 638; CHECK-NEXT: } 639; CHECK-NEXT: { 640; CHECK-NEXT: r1:0 = mask(p0) 641; CHECK-NEXT: } 642; CHECK-NEXT: { 643; CHECK-NEXT: jumpr r31 644; CHECK-NEXT: } 645b0: 646 %v0 = icmp eq <2 x i32> %a0, <i32 1, i32 1> 647 %v1 = icmp eq <2 x i32> %a1, <i32 1, i32 1> 648 %v2 = xor <2 x i1> %v1, <i1 true, i1 true> 649 %v3 = or <2 x i1> %v0, %v2 650 %v4 = sext <2 x i1> %v3 to <2 x i32> 651 ret <2 x i32> %v4 652} 653 654define <2 x i32> @f18(<2 x i32> %a0, <2 x i32> %a1, <2 x i32> %a2) #1 { 655; CHECK-LABEL: f18: 656; CHECK: // %bb.0: // %b0 657; CHECK-NEXT: { 658; CHECK-NEXT: r7:6 = combine(#1,#1) 659; CHECK-NEXT: } 660; CHECK-NEXT: { 661; CHECK-NEXT: p0 = vcmpw.eq(r1:0,r7:6) 662; CHECK-NEXT: } 663; CHECK-NEXT: { 664; CHECK-NEXT: p1 = vcmpw.eq(r3:2,r7:6) 665; CHECK-NEXT: } 666; CHECK-NEXT: { 667; CHECK-NEXT: p2 = vcmpw.eq(r5:4,r7:6) 668; CHECK-NEXT: } 669; CHECK-NEXT: { 670; CHECK-NEXT: p0 = and(p2,and(p0,p1)) 671; CHECK-NEXT: } 672; CHECK-NEXT: { 673; CHECK-NEXT: r1:0 = mask(p0) 674; CHECK-NEXT: } 675; CHECK-NEXT: { 676; CHECK-NEXT: jumpr r31 677; CHECK-NEXT: } 678b0: 679 %v0 = icmp eq <2 x i32> %a0, <i32 1, i32 1> 680 %v1 = icmp eq <2 x i32> %a1, <i32 1, i32 1> 681 %v2 = icmp eq <2 x i32> %a2, <i32 1, i32 1> 682 %v3 = and <2 x i1> %v0, %v1 683 %v4 = and <2 x i1> %v2, %v3 684 %v5 = sext <2 x i1> %v4 to <2 x i32> 685 ret <2 x i32> %v5 686} 687 688define <2 x i32> @f19(<2 x i32> %a0, <2 x i32> %a1, <2 x i32> %a2) #1 { 689; CHECK-LABEL: f19: 690; CHECK: // %bb.0: // %b0 691; CHECK-NEXT: { 692; CHECK-NEXT: r7:6 = combine(#1,#1) 693; CHECK-NEXT: } 694; CHECK-NEXT: { 695; CHECK-NEXT: p0 = vcmpw.eq(r1:0,r7:6) 696; CHECK-NEXT: } 697; CHECK-NEXT: { 698; CHECK-NEXT: p1 = vcmpw.eq(r3:2,r7:6) 699; CHECK-NEXT: } 700; CHECK-NEXT: { 701; CHECK-NEXT: p2 = vcmpw.eq(r5:4,r7:6) 702; CHECK-NEXT: } 703; CHECK-NEXT: { 704; CHECK-NEXT: p0 = and(p2,or(p0,p1)) 705; CHECK-NEXT: } 706; CHECK-NEXT: { 707; CHECK-NEXT: r1:0 = mask(p0) 708; CHECK-NEXT: } 709; CHECK-NEXT: { 710; CHECK-NEXT: jumpr r31 711; CHECK-NEXT: } 712b0: 713 %v0 = icmp eq <2 x i32> %a0, <i32 1, i32 1> 714 %v1 = icmp eq <2 x i32> %a1, <i32 1, i32 1> 715 %v2 = icmp eq <2 x i32> %a2, <i32 1, i32 1> 716 %v3 = or <2 x i1> %v0, %v1 717 %v4 = and <2 x i1> %v2, %v3 718 %v5 = sext <2 x i1> %v4 to <2 x i32> 719 ret <2 x i32> %v5 720} 721 722define <2 x i32> @f20(<2 x i32> %a0, <2 x i32> %a1, <2 x i32> %a2) #1 { 723; CHECK-LABEL: f20: 724; CHECK: // %bb.0: // %b0 725; CHECK-NEXT: { 726; CHECK-NEXT: r7:6 = combine(#1,#1) 727; CHECK-NEXT: } 728; CHECK-NEXT: { 729; CHECK-NEXT: p0 = vcmpw.eq(r1:0,r7:6) 730; CHECK-NEXT: } 731; CHECK-NEXT: { 732; CHECK-NEXT: p1 = vcmpw.eq(r3:2,r7:6) 733; CHECK-NEXT: } 734; CHECK-NEXT: { 735; CHECK-NEXT: p2 = vcmpw.eq(r5:4,r7:6) 736; CHECK-NEXT: } 737; CHECK-NEXT: { 738; CHECK-NEXT: p0 = or(p2,and(p0,p1)) 739; CHECK-NEXT: } 740; CHECK-NEXT: { 741; CHECK-NEXT: r1:0 = mask(p0) 742; CHECK-NEXT: } 743; CHECK-NEXT: { 744; CHECK-NEXT: jumpr r31 745; CHECK-NEXT: } 746b0: 747 %v0 = icmp eq <2 x i32> %a0, <i32 1, i32 1> 748 %v1 = icmp eq <2 x i32> %a1, <i32 1, i32 1> 749 %v2 = icmp eq <2 x i32> %a2, <i32 1, i32 1> 750 %v3 = and <2 x i1> %v0, %v1 751 %v4 = or <2 x i1> %v2, %v3 752 %v5 = sext <2 x i1> %v4 to <2 x i32> 753 ret <2 x i32> %v5 754} 755 756define <2 x i32> @f21(<2 x i32> %a0, <2 x i32> %a1, <2 x i32> %a2) #1 { 757; CHECK-LABEL: f21: 758; CHECK: // %bb.0: // %b0 759; CHECK-NEXT: { 760; CHECK-NEXT: r7:6 = combine(#1,#1) 761; CHECK-NEXT: } 762; CHECK-NEXT: { 763; CHECK-NEXT: p0 = vcmpw.eq(r1:0,r7:6) 764; CHECK-NEXT: } 765; CHECK-NEXT: { 766; CHECK-NEXT: p1 = vcmpw.eq(r3:2,r7:6) 767; CHECK-NEXT: } 768; CHECK-NEXT: { 769; CHECK-NEXT: p2 = vcmpw.eq(r5:4,r7:6) 770; CHECK-NEXT: } 771; CHECK-NEXT: { 772; CHECK-NEXT: p0 = or(p2,or(p0,p1)) 773; CHECK-NEXT: } 774; CHECK-NEXT: { 775; CHECK-NEXT: r1:0 = mask(p0) 776; CHECK-NEXT: } 777; CHECK-NEXT: { 778; CHECK-NEXT: jumpr r31 779; CHECK-NEXT: } 780b0: 781 %v0 = icmp eq <2 x i32> %a0, <i32 1, i32 1> 782 %v1 = icmp eq <2 x i32> %a1, <i32 1, i32 1> 783 %v2 = icmp eq <2 x i32> %a2, <i32 1, i32 1> 784 %v3 = or <2 x i1> %v0, %v1 785 %v4 = or <2 x i1> %v2, %v3 786 %v5 = sext <2 x i1> %v4 to <2 x i32> 787 ret <2 x i32> %v5 788} 789 790define <2 x i32> @f22(<2 x i32> %a0, <2 x i32> %a1, <2 x i32> %a2) #1 { 791; CHECK-LABEL: f22: 792; CHECK: // %bb.0: // %b0 793; CHECK-NEXT: { 794; CHECK-NEXT: r7:6 = combine(#1,#1) 795; CHECK-NEXT: } 796; CHECK-NEXT: { 797; CHECK-NEXT: p0 = vcmpw.eq(r1:0,r7:6) 798; CHECK-NEXT: } 799; CHECK-NEXT: { 800; CHECK-NEXT: p1 = vcmpw.eq(r3:2,r7:6) 801; CHECK-NEXT: } 802; CHECK-NEXT: { 803; CHECK-NEXT: p2 = vcmpw.eq(r5:4,r7:6) 804; CHECK-NEXT: } 805; CHECK-NEXT: { 806; CHECK-NEXT: p0 = and(p2,and(p0,!p1)) 807; CHECK-NEXT: } 808; CHECK-NEXT: { 809; CHECK-NEXT: r1:0 = mask(p0) 810; CHECK-NEXT: } 811; CHECK-NEXT: { 812; CHECK-NEXT: jumpr r31 813; CHECK-NEXT: } 814b0: 815 %v0 = icmp eq <2 x i32> %a0, <i32 1, i32 1> 816 %v1 = icmp eq <2 x i32> %a1, <i32 1, i32 1> 817 %v2 = xor <2 x i1> %v1, <i1 true, i1 true> 818 %v3 = icmp eq <2 x i32> %a2, <i32 1, i32 1> 819 %v4 = and <2 x i1> %v0, %v2 820 %v5 = and <2 x i1> %v3, %v4 821 %v6 = sext <2 x i1> %v5 to <2 x i32> 822 ret <2 x i32> %v6 823} 824 825define <2 x i32> @f23(<2 x i32> %a0, <2 x i32> %a1, <2 x i32> %a2) #1 { 826; CHECK-LABEL: f23: 827; CHECK: // %bb.0: // %b0 828; CHECK-NEXT: { 829; CHECK-NEXT: r7:6 = combine(#1,#1) 830; CHECK-NEXT: } 831; CHECK-NEXT: { 832; CHECK-NEXT: p0 = vcmpw.eq(r1:0,r7:6) 833; CHECK-NEXT: } 834; CHECK-NEXT: { 835; CHECK-NEXT: p1 = vcmpw.eq(r3:2,r7:6) 836; CHECK-NEXT: } 837; CHECK-NEXT: { 838; CHECK-NEXT: p2 = vcmpw.eq(r5:4,r7:6) 839; CHECK-NEXT: } 840; CHECK-NEXT: { 841; CHECK-NEXT: p0 = and(p2,or(p0,!p1)) 842; CHECK-NEXT: } 843; CHECK-NEXT: { 844; CHECK-NEXT: r1:0 = mask(p0) 845; CHECK-NEXT: } 846; CHECK-NEXT: { 847; CHECK-NEXT: jumpr r31 848; CHECK-NEXT: } 849b0: 850 %v0 = icmp eq <2 x i32> %a0, <i32 1, i32 1> 851 %v1 = icmp eq <2 x i32> %a1, <i32 1, i32 1> 852 %v2 = xor <2 x i1> %v1, <i1 true, i1 true> 853 %v3 = icmp eq <2 x i32> %a2, <i32 1, i32 1> 854 %v4 = or <2 x i1> %v0, %v2 855 %v5 = and <2 x i1> %v3, %v4 856 %v6 = sext <2 x i1> %v5 to <2 x i32> 857 ret <2 x i32> %v6 858} 859 860define <2 x i32> @f24(<2 x i32> %a0, <2 x i32> %a1, <2 x i32> %a2) #1 { 861; CHECK-LABEL: f24: 862; CHECK: // %bb.0: // %b0 863; CHECK-NEXT: { 864; CHECK-NEXT: r7:6 = combine(#1,#1) 865; CHECK-NEXT: } 866; CHECK-NEXT: { 867; CHECK-NEXT: p0 = vcmpw.eq(r1:0,r7:6) 868; CHECK-NEXT: } 869; CHECK-NEXT: { 870; CHECK-NEXT: p1 = vcmpw.eq(r3:2,r7:6) 871; CHECK-NEXT: } 872; CHECK-NEXT: { 873; CHECK-NEXT: p2 = vcmpw.eq(r5:4,r7:6) 874; CHECK-NEXT: } 875; CHECK-NEXT: { 876; CHECK-NEXT: p0 = or(p2,and(p0,!p1)) 877; CHECK-NEXT: } 878; CHECK-NEXT: { 879; CHECK-NEXT: r1:0 = mask(p0) 880; CHECK-NEXT: } 881; CHECK-NEXT: { 882; CHECK-NEXT: jumpr r31 883; CHECK-NEXT: } 884b0: 885 %v0 = icmp eq <2 x i32> %a0, <i32 1, i32 1> 886 %v1 = icmp eq <2 x i32> %a1, <i32 1, i32 1> 887 %v2 = xor <2 x i1> %v1, <i1 true, i1 true> 888 %v3 = icmp eq <2 x i32> %a2, <i32 1, i32 1> 889 %v4 = and <2 x i1> %v0, %v2 890 %v5 = or <2 x i1> %v3, %v4 891 %v6 = sext <2 x i1> %v5 to <2 x i32> 892 ret <2 x i32> %v6 893} 894 895define <2 x i32> @f25(<2 x i32> %a0, <2 x i32> %a1, <2 x i32> %a2) #1 { 896; CHECK-LABEL: f25: 897; CHECK: // %bb.0: // %b0 898; CHECK-NEXT: { 899; CHECK-NEXT: r7:6 = combine(#1,#1) 900; CHECK-NEXT: } 901; CHECK-NEXT: { 902; CHECK-NEXT: p0 = vcmpw.eq(r1:0,r7:6) 903; CHECK-NEXT: } 904; CHECK-NEXT: { 905; CHECK-NEXT: p1 = vcmpw.eq(r3:2,r7:6) 906; CHECK-NEXT: } 907; CHECK-NEXT: { 908; CHECK-NEXT: p2 = vcmpw.eq(r5:4,r7:6) 909; CHECK-NEXT: } 910; CHECK-NEXT: { 911; CHECK-NEXT: p0 = or(p2,or(p0,!p1)) 912; CHECK-NEXT: } 913; CHECK-NEXT: { 914; CHECK-NEXT: r1:0 = mask(p0) 915; CHECK-NEXT: } 916; CHECK-NEXT: { 917; CHECK-NEXT: jumpr r31 918; CHECK-NEXT: } 919b0: 920 %v0 = icmp eq <2 x i32> %a0, <i32 1, i32 1> 921 %v1 = icmp eq <2 x i32> %a1, <i32 1, i32 1> 922 %v2 = xor <2 x i1> %v1, <i1 true, i1 true> 923 %v3 = icmp eq <2 x i32> %a2, <i32 1, i32 1> 924 %v4 = or <2 x i1> %v0, %v2 925 %v5 = or <2 x i1> %v3, %v4 926 %v6 = sext <2 x i1> %v5 to <2 x i32> 927 ret <2 x i32> %v6 928} 929 930define <4 x i16> @f26(<4 x i16> %a0, <4 x i16> %a1) #1 { 931; CHECK-LABEL: f26: 932; CHECK: // %bb.0: // %b0 933; CHECK-NEXT: { 934; CHECK-NEXT: r4 = ##65537 935; CHECK-NEXT: } 936; CHECK-NEXT: { 937; CHECK-NEXT: r5 = ##65537 938; CHECK-NEXT: } 939; CHECK-NEXT: { 940; CHECK-NEXT: p0 = vcmph.eq(r1:0,r5:4) 941; CHECK-NEXT: } 942; CHECK-NEXT: { 943; CHECK-NEXT: p1 = vcmph.eq(r3:2,r5:4) 944; CHECK-NEXT: } 945; CHECK-NEXT: { 946; CHECK-NEXT: p0 = and(p0,p1) 947; CHECK-NEXT: } 948; CHECK-NEXT: { 949; CHECK-NEXT: r1:0 = mask(p0) 950; CHECK-NEXT: } 951; CHECK-NEXT: { 952; CHECK-NEXT: jumpr r31 953; CHECK-NEXT: } 954b0: 955 %v0 = icmp eq <4 x i16> %a0, <i16 1, i16 1, i16 1, i16 1> 956 %v1 = icmp eq <4 x i16> %a1, <i16 1, i16 1, i16 1, i16 1> 957 %v2 = and <4 x i1> %v0, %v1 958 %v3 = sext <4 x i1> %v2 to <4 x i16> 959 ret <4 x i16> %v3 960} 961 962define <4 x i16> @f27(<4 x i16> %a0, <4 x i16> %a1) #1 { 963; CHECK-LABEL: f27: 964; CHECK: // %bb.0: // %b0 965; CHECK-NEXT: { 966; CHECK-NEXT: r4 = ##65537 967; CHECK-NEXT: } 968; CHECK-NEXT: { 969; CHECK-NEXT: r5 = ##65537 970; CHECK-NEXT: } 971; CHECK-NEXT: { 972; CHECK-NEXT: p0 = vcmph.eq(r1:0,r5:4) 973; CHECK-NEXT: } 974; CHECK-NEXT: { 975; CHECK-NEXT: p1 = vcmph.eq(r3:2,r5:4) 976; CHECK-NEXT: } 977; CHECK-NEXT: { 978; CHECK-NEXT: p0 = or(p0,p1) 979; CHECK-NEXT: } 980; CHECK-NEXT: { 981; CHECK-NEXT: r1:0 = mask(p0) 982; CHECK-NEXT: } 983; CHECK-NEXT: { 984; CHECK-NEXT: jumpr r31 985; CHECK-NEXT: } 986b0: 987 %v0 = icmp eq <4 x i16> %a0, <i16 1, i16 1, i16 1, i16 1> 988 %v1 = icmp eq <4 x i16> %a1, <i16 1, i16 1, i16 1, i16 1> 989 %v2 = or <4 x i1> %v0, %v1 990 %v3 = sext <4 x i1> %v2 to <4 x i16> 991 ret <4 x i16> %v3 992} 993 994define <4 x i16> @f28(<4 x i16> %a0, <4 x i16> %a1) #1 { 995; CHECK-LABEL: f28: 996; CHECK: // %bb.0: // %b0 997; CHECK-NEXT: { 998; CHECK-NEXT: r4 = ##65537 999; CHECK-NEXT: } 1000; CHECK-NEXT: { 1001; CHECK-NEXT: r5 = ##65537 1002; CHECK-NEXT: } 1003; CHECK-NEXT: { 1004; CHECK-NEXT: p0 = vcmph.eq(r1:0,r5:4) 1005; CHECK-NEXT: } 1006; CHECK-NEXT: { 1007; CHECK-NEXT: p1 = vcmph.eq(r3:2,r5:4) 1008; CHECK-NEXT: } 1009; CHECK-NEXT: { 1010; CHECK-NEXT: p0 = xor(p0,p1) 1011; CHECK-NEXT: } 1012; CHECK-NEXT: { 1013; CHECK-NEXT: r1:0 = mask(p0) 1014; CHECK-NEXT: } 1015; CHECK-NEXT: { 1016; CHECK-NEXT: jumpr r31 1017; CHECK-NEXT: } 1018b0: 1019 %v0 = icmp eq <4 x i16> %a0, <i16 1, i16 1, i16 1, i16 1> 1020 %v1 = icmp eq <4 x i16> %a1, <i16 1, i16 1, i16 1, i16 1> 1021 %v2 = xor <4 x i1> %v0, %v1 1022 %v3 = sext <4 x i1> %v2 to <4 x i16> 1023 ret <4 x i16> %v3 1024} 1025 1026define <4 x i16> @f29(<4 x i16> %a0, <4 x i16> %a1) #1 { 1027; CHECK-LABEL: f29: 1028; CHECK: // %bb.0: // %b0 1029; CHECK-NEXT: { 1030; CHECK-NEXT: r4 = ##65537 1031; CHECK-NEXT: } 1032; CHECK-NEXT: { 1033; CHECK-NEXT: r5 = ##65537 1034; CHECK-NEXT: } 1035; CHECK-NEXT: { 1036; CHECK-NEXT: p0 = vcmph.eq(r1:0,r5:4) 1037; CHECK-NEXT: } 1038; CHECK-NEXT: { 1039; CHECK-NEXT: p1 = vcmph.eq(r3:2,r5:4) 1040; CHECK-NEXT: } 1041; CHECK-NEXT: { 1042; CHECK-NEXT: p0 = and(p0,!p1) 1043; CHECK-NEXT: } 1044; CHECK-NEXT: { 1045; CHECK-NEXT: r1:0 = mask(p0) 1046; CHECK-NEXT: } 1047; CHECK-NEXT: { 1048; CHECK-NEXT: jumpr r31 1049; CHECK-NEXT: } 1050b0: 1051 %v0 = icmp eq <4 x i16> %a0, <i16 1, i16 1, i16 1, i16 1> 1052 %v1 = icmp eq <4 x i16> %a1, <i16 1, i16 1, i16 1, i16 1> 1053 %v2 = xor <4 x i1> %v1, <i1 true, i1 true, i1 true, i1 true> 1054 %v3 = and <4 x i1> %v0, %v2 1055 %v4 = sext <4 x i1> %v3 to <4 x i16> 1056 ret <4 x i16> %v4 1057} 1058 1059define <4 x i16> @f30(<4 x i16> %a0, <4 x i16> %a1) #1 { 1060; CHECK-LABEL: f30: 1061; CHECK: // %bb.0: // %b0 1062; CHECK-NEXT: { 1063; CHECK-NEXT: r4 = ##65537 1064; CHECK-NEXT: } 1065; CHECK-NEXT: { 1066; CHECK-NEXT: r5 = ##65537 1067; CHECK-NEXT: } 1068; CHECK-NEXT: { 1069; CHECK-NEXT: p0 = vcmph.eq(r1:0,r5:4) 1070; CHECK-NEXT: } 1071; CHECK-NEXT: { 1072; CHECK-NEXT: p1 = vcmph.eq(r3:2,r5:4) 1073; CHECK-NEXT: } 1074; CHECK-NEXT: { 1075; CHECK-NEXT: p0 = or(p0,!p1) 1076; CHECK-NEXT: } 1077; CHECK-NEXT: { 1078; CHECK-NEXT: r1:0 = mask(p0) 1079; CHECK-NEXT: } 1080; CHECK-NEXT: { 1081; CHECK-NEXT: jumpr r31 1082; CHECK-NEXT: } 1083b0: 1084 %v0 = icmp eq <4 x i16> %a0, <i16 1, i16 1, i16 1, i16 1> 1085 %v1 = icmp eq <4 x i16> %a1, <i16 1, i16 1, i16 1, i16 1> 1086 %v2 = xor <4 x i1> %v1, <i1 true, i1 true, i1 true, i1 true> 1087 %v3 = or <4 x i1> %v0, %v2 1088 %v4 = sext <4 x i1> %v3 to <4 x i16> 1089 ret <4 x i16> %v4 1090} 1091 1092define <4 x i16> @f31(<4 x i16> %a0, <4 x i16> %a1, <4 x i16> %a2) #1 { 1093; CHECK-LABEL: f31: 1094; CHECK: // %bb.0: // %b0 1095; CHECK-NEXT: { 1096; CHECK-NEXT: r6 = ##65537 1097; CHECK-NEXT: } 1098; CHECK-NEXT: { 1099; CHECK-NEXT: r7 = ##65537 1100; CHECK-NEXT: } 1101; CHECK-NEXT: { 1102; CHECK-NEXT: p0 = vcmph.eq(r1:0,r7:6) 1103; CHECK-NEXT: } 1104; CHECK-NEXT: { 1105; CHECK-NEXT: p1 = vcmph.eq(r3:2,r7:6) 1106; CHECK-NEXT: } 1107; CHECK-NEXT: { 1108; CHECK-NEXT: p2 = vcmph.eq(r5:4,r7:6) 1109; CHECK-NEXT: } 1110; CHECK-NEXT: { 1111; CHECK-NEXT: p0 = and(p2,and(p0,p1)) 1112; CHECK-NEXT: } 1113; CHECK-NEXT: { 1114; CHECK-NEXT: r1:0 = mask(p0) 1115; CHECK-NEXT: } 1116; CHECK-NEXT: { 1117; CHECK-NEXT: jumpr r31 1118; CHECK-NEXT: } 1119b0: 1120 %v0 = icmp eq <4 x i16> %a0, <i16 1, i16 1, i16 1, i16 1> 1121 %v1 = icmp eq <4 x i16> %a1, <i16 1, i16 1, i16 1, i16 1> 1122 %v2 = icmp eq <4 x i16> %a2, <i16 1, i16 1, i16 1, i16 1> 1123 %v3 = and <4 x i1> %v0, %v1 1124 %v4 = and <4 x i1> %v2, %v3 1125 %v5 = sext <4 x i1> %v4 to <4 x i16> 1126 ret <4 x i16> %v5 1127} 1128 1129define <4 x i16> @f32(<4 x i16> %a0, <4 x i16> %a1, <4 x i16> %a2) #1 { 1130; CHECK-LABEL: f32: 1131; CHECK: // %bb.0: // %b0 1132; CHECK-NEXT: { 1133; CHECK-NEXT: r6 = ##65537 1134; CHECK-NEXT: } 1135; CHECK-NEXT: { 1136; CHECK-NEXT: r7 = ##65537 1137; CHECK-NEXT: } 1138; CHECK-NEXT: { 1139; CHECK-NEXT: p0 = vcmph.eq(r1:0,r7:6) 1140; CHECK-NEXT: } 1141; CHECK-NEXT: { 1142; CHECK-NEXT: p1 = vcmph.eq(r3:2,r7:6) 1143; CHECK-NEXT: } 1144; CHECK-NEXT: { 1145; CHECK-NEXT: p2 = vcmph.eq(r5:4,r7:6) 1146; CHECK-NEXT: } 1147; CHECK-NEXT: { 1148; CHECK-NEXT: p0 = and(p2,or(p0,p1)) 1149; CHECK-NEXT: } 1150; CHECK-NEXT: { 1151; CHECK-NEXT: r1:0 = mask(p0) 1152; CHECK-NEXT: } 1153; CHECK-NEXT: { 1154; CHECK-NEXT: jumpr r31 1155; CHECK-NEXT: } 1156b0: 1157 %v0 = icmp eq <4 x i16> %a0, <i16 1, i16 1, i16 1, i16 1> 1158 %v1 = icmp eq <4 x i16> %a1, <i16 1, i16 1, i16 1, i16 1> 1159 %v2 = icmp eq <4 x i16> %a2, <i16 1, i16 1, i16 1, i16 1> 1160 %v3 = or <4 x i1> %v0, %v1 1161 %v4 = and <4 x i1> %v2, %v3 1162 %v5 = sext <4 x i1> %v4 to <4 x i16> 1163 ret <4 x i16> %v5 1164} 1165 1166define <4 x i16> @f33(<4 x i16> %a0, <4 x i16> %a1, <4 x i16> %a2) #1 { 1167; CHECK-LABEL: f33: 1168; CHECK: // %bb.0: // %b0 1169; CHECK-NEXT: { 1170; CHECK-NEXT: r6 = ##65537 1171; CHECK-NEXT: } 1172; CHECK-NEXT: { 1173; CHECK-NEXT: r7 = ##65537 1174; CHECK-NEXT: } 1175; CHECK-NEXT: { 1176; CHECK-NEXT: p0 = vcmph.eq(r1:0,r7:6) 1177; CHECK-NEXT: } 1178; CHECK-NEXT: { 1179; CHECK-NEXT: p1 = vcmph.eq(r3:2,r7:6) 1180; CHECK-NEXT: } 1181; CHECK-NEXT: { 1182; CHECK-NEXT: p2 = vcmph.eq(r5:4,r7:6) 1183; CHECK-NEXT: } 1184; CHECK-NEXT: { 1185; CHECK-NEXT: p0 = or(p2,and(p0,p1)) 1186; CHECK-NEXT: } 1187; CHECK-NEXT: { 1188; CHECK-NEXT: r1:0 = mask(p0) 1189; CHECK-NEXT: } 1190; CHECK-NEXT: { 1191; CHECK-NEXT: jumpr r31 1192; CHECK-NEXT: } 1193b0: 1194 %v0 = icmp eq <4 x i16> %a0, <i16 1, i16 1, i16 1, i16 1> 1195 %v1 = icmp eq <4 x i16> %a1, <i16 1, i16 1, i16 1, i16 1> 1196 %v2 = icmp eq <4 x i16> %a2, <i16 1, i16 1, i16 1, i16 1> 1197 %v3 = and <4 x i1> %v0, %v1 1198 %v4 = or <4 x i1> %v2, %v3 1199 %v5 = sext <4 x i1> %v4 to <4 x i16> 1200 ret <4 x i16> %v5 1201} 1202 1203define <4 x i16> @f34(<4 x i16> %a0, <4 x i16> %a1, <4 x i16> %a2) #1 { 1204; CHECK-LABEL: f34: 1205; CHECK: // %bb.0: // %b0 1206; CHECK-NEXT: { 1207; CHECK-NEXT: r6 = ##65537 1208; CHECK-NEXT: } 1209; CHECK-NEXT: { 1210; CHECK-NEXT: r7 = ##65537 1211; CHECK-NEXT: } 1212; CHECK-NEXT: { 1213; CHECK-NEXT: p0 = vcmph.eq(r1:0,r7:6) 1214; CHECK-NEXT: } 1215; CHECK-NEXT: { 1216; CHECK-NEXT: p1 = vcmph.eq(r3:2,r7:6) 1217; CHECK-NEXT: } 1218; CHECK-NEXT: { 1219; CHECK-NEXT: p2 = vcmph.eq(r5:4,r7:6) 1220; CHECK-NEXT: } 1221; CHECK-NEXT: { 1222; CHECK-NEXT: p0 = or(p2,or(p0,p1)) 1223; CHECK-NEXT: } 1224; CHECK-NEXT: { 1225; CHECK-NEXT: r1:0 = mask(p0) 1226; CHECK-NEXT: } 1227; CHECK-NEXT: { 1228; CHECK-NEXT: jumpr r31 1229; CHECK-NEXT: } 1230b0: 1231 %v0 = icmp eq <4 x i16> %a0, <i16 1, i16 1, i16 1, i16 1> 1232 %v1 = icmp eq <4 x i16> %a1, <i16 1, i16 1, i16 1, i16 1> 1233 %v2 = icmp eq <4 x i16> %a2, <i16 1, i16 1, i16 1, i16 1> 1234 %v3 = or <4 x i1> %v0, %v1 1235 %v4 = or <4 x i1> %v2, %v3 1236 %v5 = sext <4 x i1> %v4 to <4 x i16> 1237 ret <4 x i16> %v5 1238} 1239 1240define <4 x i16> @f35(<4 x i16> %a0, <4 x i16> %a1, <4 x i16> %a2) #1 { 1241; CHECK-LABEL: f35: 1242; CHECK: // %bb.0: // %b0 1243; CHECK-NEXT: { 1244; CHECK-NEXT: r6 = ##65537 1245; CHECK-NEXT: } 1246; CHECK-NEXT: { 1247; CHECK-NEXT: r7 = ##65537 1248; CHECK-NEXT: } 1249; CHECK-NEXT: { 1250; CHECK-NEXT: p0 = vcmph.eq(r1:0,r7:6) 1251; CHECK-NEXT: } 1252; CHECK-NEXT: { 1253; CHECK-NEXT: p1 = vcmph.eq(r5:4,r7:6) 1254; CHECK-NEXT: } 1255; CHECK-NEXT: { 1256; CHECK-NEXT: p2 = vcmph.eq(r3:2,r7:6) 1257; CHECK-NEXT: } 1258; CHECK-NEXT: { 1259; CHECK-NEXT: p0 = and(p0,p1) 1260; CHECK-NEXT: } 1261; CHECK-NEXT: { 1262; CHECK-NEXT: p0 = and(p0,!p2) 1263; CHECK-NEXT: } 1264; CHECK-NEXT: { 1265; CHECK-NEXT: r1:0 = mask(p0) 1266; CHECK-NEXT: } 1267; CHECK-NEXT: { 1268; CHECK-NEXT: jumpr r31 1269; CHECK-NEXT: } 1270b0: 1271 %v0 = icmp eq <4 x i16> %a0, <i16 1, i16 1, i16 1, i16 1> 1272 %v1 = icmp eq <4 x i16> %a1, <i16 1, i16 1, i16 1, i16 1> 1273 %v2 = xor <4 x i1> %v1, <i1 true, i1 true, i1 true, i1 true> 1274 %v3 = icmp eq <4 x i16> %a2, <i16 1, i16 1, i16 1, i16 1> 1275 %v4 = and <4 x i1> %v0, %v2 1276 %v5 = and <4 x i1> %v3, %v4 1277 %v6 = sext <4 x i1> %v5 to <4 x i16> 1278 ret <4 x i16> %v6 1279} 1280 1281define <4 x i16> @f36(<4 x i16> %a0, <4 x i16> %a1, <4 x i16> %a2) #1 { 1282; CHECK-LABEL: f36: 1283; CHECK: // %bb.0: // %b0 1284; CHECK-NEXT: { 1285; CHECK-NEXT: r6 = ##65537 1286; CHECK-NEXT: } 1287; CHECK-NEXT: { 1288; CHECK-NEXT: r7 = ##65537 1289; CHECK-NEXT: } 1290; CHECK-NEXT: { 1291; CHECK-NEXT: p0 = vcmph.eq(r1:0,r7:6) 1292; CHECK-NEXT: } 1293; CHECK-NEXT: { 1294; CHECK-NEXT: p1 = vcmph.eq(r3:2,r7:6) 1295; CHECK-NEXT: } 1296; CHECK-NEXT: { 1297; CHECK-NEXT: p2 = vcmph.eq(r5:4,r7:6) 1298; CHECK-NEXT: } 1299; CHECK-NEXT: { 1300; CHECK-NEXT: p0 = and(p2,or(p0,!p1)) 1301; CHECK-NEXT: } 1302; CHECK-NEXT: { 1303; CHECK-NEXT: r1:0 = mask(p0) 1304; CHECK-NEXT: } 1305; CHECK-NEXT: { 1306; CHECK-NEXT: jumpr r31 1307; CHECK-NEXT: } 1308b0: 1309 %v0 = icmp eq <4 x i16> %a0, <i16 1, i16 1, i16 1, i16 1> 1310 %v1 = icmp eq <4 x i16> %a1, <i16 1, i16 1, i16 1, i16 1> 1311 %v2 = xor <4 x i1> %v1, <i1 true, i1 true, i1 true, i1 true> 1312 %v3 = icmp eq <4 x i16> %a2, <i16 1, i16 1, i16 1, i16 1> 1313 %v4 = or <4 x i1> %v0, %v2 1314 %v5 = and <4 x i1> %v3, %v4 1315 %v6 = sext <4 x i1> %v5 to <4 x i16> 1316 ret <4 x i16> %v6 1317} 1318 1319define <4 x i16> @f37(<4 x i16> %a0, <4 x i16> %a1, <4 x i16> %a2) #1 { 1320; CHECK-LABEL: f37: 1321; CHECK: // %bb.0: // %b0 1322; CHECK-NEXT: { 1323; CHECK-NEXT: r6 = ##65537 1324; CHECK-NEXT: } 1325; CHECK-NEXT: { 1326; CHECK-NEXT: r7 = ##65537 1327; CHECK-NEXT: } 1328; CHECK-NEXT: { 1329; CHECK-NEXT: p0 = vcmph.eq(r1:0,r7:6) 1330; CHECK-NEXT: } 1331; CHECK-NEXT: { 1332; CHECK-NEXT: p1 = vcmph.eq(r3:2,r7:6) 1333; CHECK-NEXT: } 1334; CHECK-NEXT: { 1335; CHECK-NEXT: p2 = vcmph.eq(r5:4,r7:6) 1336; CHECK-NEXT: } 1337; CHECK-NEXT: { 1338; CHECK-NEXT: p0 = or(p2,and(p0,!p1)) 1339; CHECK-NEXT: } 1340; CHECK-NEXT: { 1341; CHECK-NEXT: r1:0 = mask(p0) 1342; CHECK-NEXT: } 1343; CHECK-NEXT: { 1344; CHECK-NEXT: jumpr r31 1345; CHECK-NEXT: } 1346b0: 1347 %v0 = icmp eq <4 x i16> %a0, <i16 1, i16 1, i16 1, i16 1> 1348 %v1 = icmp eq <4 x i16> %a1, <i16 1, i16 1, i16 1, i16 1> 1349 %v2 = xor <4 x i1> %v1, <i1 true, i1 true, i1 true, i1 true> 1350 %v3 = icmp eq <4 x i16> %a2, <i16 1, i16 1, i16 1, i16 1> 1351 %v4 = and <4 x i1> %v0, %v2 1352 %v5 = or <4 x i1> %v3, %v4 1353 %v6 = sext <4 x i1> %v5 to <4 x i16> 1354 ret <4 x i16> %v6 1355} 1356 1357define <4 x i16> @f38(<4 x i16> %a0, <4 x i16> %a1, <4 x i16> %a2) #1 { 1358; CHECK-LABEL: f38: 1359; CHECK: // %bb.0: // %b0 1360; CHECK-NEXT: { 1361; CHECK-NEXT: r6 = ##65537 1362; CHECK-NEXT: } 1363; CHECK-NEXT: { 1364; CHECK-NEXT: r7 = ##65537 1365; CHECK-NEXT: } 1366; CHECK-NEXT: { 1367; CHECK-NEXT: p0 = vcmph.eq(r1:0,r7:6) 1368; CHECK-NEXT: } 1369; CHECK-NEXT: { 1370; CHECK-NEXT: p1 = vcmph.eq(r5:4,r7:6) 1371; CHECK-NEXT: } 1372; CHECK-NEXT: { 1373; CHECK-NEXT: p2 = vcmph.eq(r3:2,r7:6) 1374; CHECK-NEXT: } 1375; CHECK-NEXT: { 1376; CHECK-NEXT: p0 = or(p0,p1) 1377; CHECK-NEXT: } 1378; CHECK-NEXT: { 1379; CHECK-NEXT: p0 = or(p0,!p2) 1380; CHECK-NEXT: } 1381; CHECK-NEXT: { 1382; CHECK-NEXT: r1:0 = mask(p0) 1383; CHECK-NEXT: } 1384; CHECK-NEXT: { 1385; CHECK-NEXT: jumpr r31 1386; CHECK-NEXT: } 1387b0: 1388 %v0 = icmp eq <4 x i16> %a0, <i16 1, i16 1, i16 1, i16 1> 1389 %v1 = icmp eq <4 x i16> %a1, <i16 1, i16 1, i16 1, i16 1> 1390 %v2 = xor <4 x i1> %v1, <i1 true, i1 true, i1 true, i1 true> 1391 %v3 = icmp eq <4 x i16> %a2, <i16 1, i16 1, i16 1, i16 1> 1392 %v4 = or <4 x i1> %v0, %v2 1393 %v5 = or <4 x i1> %v3, %v4 1394 %v6 = sext <4 x i1> %v5 to <4 x i16> 1395 ret <4 x i16> %v6 1396} 1397 1398define <8 x i8> @f39(<8 x i8> %a0, <8 x i8> %a1) #1 { 1399; CHECK-LABEL: f39: 1400; CHECK: // %bb.0: // %b0 1401; CHECK-NEXT: { 1402; CHECK-NEXT: r4 = ##16843009 1403; CHECK-NEXT: } 1404; CHECK-NEXT: { 1405; CHECK-NEXT: r5 = ##16843009 1406; CHECK-NEXT: } 1407; CHECK-NEXT: { 1408; CHECK-NEXT: p0 = vcmpb.eq(r1:0,r5:4) 1409; CHECK-NEXT: } 1410; CHECK-NEXT: { 1411; CHECK-NEXT: p1 = vcmpb.eq(r3:2,r5:4) 1412; CHECK-NEXT: } 1413; CHECK-NEXT: { 1414; CHECK-NEXT: p0 = and(p0,p1) 1415; CHECK-NEXT: } 1416; CHECK-NEXT: { 1417; CHECK-NEXT: r1:0 = mask(p0) 1418; CHECK-NEXT: } 1419; CHECK-NEXT: { 1420; CHECK-NEXT: jumpr r31 1421; CHECK-NEXT: } 1422b0: 1423 %v0 = icmp eq <8 x i8> %a0, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1424 %v1 = icmp eq <8 x i8> %a1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1425 %v2 = and <8 x i1> %v0, %v1 1426 %v3 = sext <8 x i1> %v2 to <8 x i8> 1427 ret <8 x i8> %v3 1428} 1429 1430define <8 x i8> @f40(<8 x i8> %a0, <8 x i8> %a1) #1 { 1431; CHECK-LABEL: f40: 1432; CHECK: // %bb.0: // %b0 1433; CHECK-NEXT: { 1434; CHECK-NEXT: r4 = ##16843009 1435; CHECK-NEXT: } 1436; CHECK-NEXT: { 1437; CHECK-NEXT: r5 = ##16843009 1438; CHECK-NEXT: } 1439; CHECK-NEXT: { 1440; CHECK-NEXT: p0 = vcmpb.eq(r1:0,r5:4) 1441; CHECK-NEXT: } 1442; CHECK-NEXT: { 1443; CHECK-NEXT: p1 = vcmpb.eq(r3:2,r5:4) 1444; CHECK-NEXT: } 1445; CHECK-NEXT: { 1446; CHECK-NEXT: p0 = or(p0,p1) 1447; CHECK-NEXT: } 1448; CHECK-NEXT: { 1449; CHECK-NEXT: r1:0 = mask(p0) 1450; CHECK-NEXT: } 1451; CHECK-NEXT: { 1452; CHECK-NEXT: jumpr r31 1453; CHECK-NEXT: } 1454b0: 1455 %v0 = icmp eq <8 x i8> %a0, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1456 %v1 = icmp eq <8 x i8> %a1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1457 %v2 = or <8 x i1> %v0, %v1 1458 %v3 = sext <8 x i1> %v2 to <8 x i8> 1459 ret <8 x i8> %v3 1460} 1461 1462define <8 x i8> @f41(<8 x i8> %a0, <8 x i8> %a1) #1 { 1463; CHECK-LABEL: f41: 1464; CHECK: // %bb.0: // %b0 1465; CHECK-NEXT: { 1466; CHECK-NEXT: r4 = ##16843009 1467; CHECK-NEXT: } 1468; CHECK-NEXT: { 1469; CHECK-NEXT: r5 = ##16843009 1470; CHECK-NEXT: } 1471; CHECK-NEXT: { 1472; CHECK-NEXT: p0 = vcmpb.eq(r1:0,r5:4) 1473; CHECK-NEXT: } 1474; CHECK-NEXT: { 1475; CHECK-NEXT: p1 = vcmpb.eq(r3:2,r5:4) 1476; CHECK-NEXT: } 1477; CHECK-NEXT: { 1478; CHECK-NEXT: p0 = xor(p0,p1) 1479; CHECK-NEXT: } 1480; CHECK-NEXT: { 1481; CHECK-NEXT: r1:0 = mask(p0) 1482; CHECK-NEXT: } 1483; CHECK-NEXT: { 1484; CHECK-NEXT: jumpr r31 1485; CHECK-NEXT: } 1486b0: 1487 %v0 = icmp eq <8 x i8> %a0, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1488 %v1 = icmp eq <8 x i8> %a1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1489 %v2 = xor <8 x i1> %v0, %v1 1490 %v3 = sext <8 x i1> %v2 to <8 x i8> 1491 ret <8 x i8> %v3 1492} 1493 1494define <8 x i8> @f42(<8 x i8> %a0, <8 x i8> %a1) #1 { 1495; CHECK-LABEL: f42: 1496; CHECK: // %bb.0: // %b0 1497; CHECK-NEXT: { 1498; CHECK-NEXT: r4 = ##16843009 1499; CHECK-NEXT: } 1500; CHECK-NEXT: { 1501; CHECK-NEXT: r5 = ##16843009 1502; CHECK-NEXT: } 1503; CHECK-NEXT: { 1504; CHECK-NEXT: p0 = vcmpb.eq(r1:0,r5:4) 1505; CHECK-NEXT: } 1506; CHECK-NEXT: { 1507; CHECK-NEXT: p1 = vcmpb.eq(r3:2,r5:4) 1508; CHECK-NEXT: } 1509; CHECK-NEXT: { 1510; CHECK-NEXT: p0 = and(p0,!p1) 1511; CHECK-NEXT: } 1512; CHECK-NEXT: { 1513; CHECK-NEXT: r1:0 = mask(p0) 1514; CHECK-NEXT: } 1515; CHECK-NEXT: { 1516; CHECK-NEXT: jumpr r31 1517; CHECK-NEXT: } 1518b0: 1519 %v0 = icmp eq <8 x i8> %a0, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1520 %v1 = icmp eq <8 x i8> %a1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1521 %v2 = xor <8 x i1> %v1, <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true> 1522 %v3 = and <8 x i1> %v0, %v2 1523 %v4 = sext <8 x i1> %v3 to <8 x i8> 1524 ret <8 x i8> %v4 1525} 1526 1527define <8 x i8> @f43(<8 x i8> %a0, <8 x i8> %a1) #1 { 1528; CHECK-LABEL: f43: 1529; CHECK: // %bb.0: // %b0 1530; CHECK-NEXT: { 1531; CHECK-NEXT: r4 = ##16843009 1532; CHECK-NEXT: } 1533; CHECK-NEXT: { 1534; CHECK-NEXT: r5 = ##16843009 1535; CHECK-NEXT: } 1536; CHECK-NEXT: { 1537; CHECK-NEXT: p0 = vcmpb.eq(r1:0,r5:4) 1538; CHECK-NEXT: } 1539; CHECK-NEXT: { 1540; CHECK-NEXT: p1 = vcmpb.eq(r3:2,r5:4) 1541; CHECK-NEXT: } 1542; CHECK-NEXT: { 1543; CHECK-NEXT: p0 = or(p0,!p1) 1544; CHECK-NEXT: } 1545; CHECK-NEXT: { 1546; CHECK-NEXT: r1:0 = mask(p0) 1547; CHECK-NEXT: } 1548; CHECK-NEXT: { 1549; CHECK-NEXT: jumpr r31 1550; CHECK-NEXT: } 1551b0: 1552 %v0 = icmp eq <8 x i8> %a0, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1553 %v1 = icmp eq <8 x i8> %a1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1554 %v2 = xor <8 x i1> %v1, <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true> 1555 %v3 = or <8 x i1> %v0, %v2 1556 %v4 = sext <8 x i1> %v3 to <8 x i8> 1557 ret <8 x i8> %v4 1558} 1559 1560define <8 x i8> @f44(<8 x i8> %a0, <8 x i8> %a1, <8 x i8> %a2) #1 { 1561; CHECK-LABEL: f44: 1562; CHECK: // %bb.0: // %b0 1563; CHECK-NEXT: { 1564; CHECK-NEXT: r6 = ##16843009 1565; CHECK-NEXT: } 1566; CHECK-NEXT: { 1567; CHECK-NEXT: r7 = ##16843009 1568; CHECK-NEXT: } 1569; CHECK-NEXT: { 1570; CHECK-NEXT: p0 = vcmpb.eq(r1:0,r7:6) 1571; CHECK-NEXT: } 1572; CHECK-NEXT: { 1573; CHECK-NEXT: p1 = vcmpb.eq(r3:2,r7:6) 1574; CHECK-NEXT: } 1575; CHECK-NEXT: { 1576; CHECK-NEXT: p2 = vcmpb.eq(r5:4,r7:6) 1577; CHECK-NEXT: } 1578; CHECK-NEXT: { 1579; CHECK-NEXT: p0 = and(p2,and(p0,p1)) 1580; CHECK-NEXT: } 1581; CHECK-NEXT: { 1582; CHECK-NEXT: r1:0 = mask(p0) 1583; CHECK-NEXT: } 1584; CHECK-NEXT: { 1585; CHECK-NEXT: jumpr r31 1586; CHECK-NEXT: } 1587b0: 1588 %v0 = icmp eq <8 x i8> %a0, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1589 %v1 = icmp eq <8 x i8> %a1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1590 %v2 = icmp eq <8 x i8> %a2, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1591 %v3 = and <8 x i1> %v0, %v1 1592 %v4 = and <8 x i1> %v2, %v3 1593 %v5 = sext <8 x i1> %v4 to <8 x i8> 1594 ret <8 x i8> %v5 1595} 1596 1597define <8 x i8> @f45(<8 x i8> %a0, <8 x i8> %a1, <8 x i8> %a2) #1 { 1598; CHECK-LABEL: f45: 1599; CHECK: // %bb.0: // %b0 1600; CHECK-NEXT: { 1601; CHECK-NEXT: r6 = ##16843009 1602; CHECK-NEXT: } 1603; CHECK-NEXT: { 1604; CHECK-NEXT: r7 = ##16843009 1605; CHECK-NEXT: } 1606; CHECK-NEXT: { 1607; CHECK-NEXT: p0 = vcmpb.eq(r1:0,r7:6) 1608; CHECK-NEXT: } 1609; CHECK-NEXT: { 1610; CHECK-NEXT: p1 = vcmpb.eq(r3:2,r7:6) 1611; CHECK-NEXT: } 1612; CHECK-NEXT: { 1613; CHECK-NEXT: p2 = vcmpb.eq(r5:4,r7:6) 1614; CHECK-NEXT: } 1615; CHECK-NEXT: { 1616; CHECK-NEXT: p0 = and(p2,or(p0,p1)) 1617; CHECK-NEXT: } 1618; CHECK-NEXT: { 1619; CHECK-NEXT: r1:0 = mask(p0) 1620; CHECK-NEXT: } 1621; CHECK-NEXT: { 1622; CHECK-NEXT: jumpr r31 1623; CHECK-NEXT: } 1624b0: 1625 %v0 = icmp eq <8 x i8> %a0, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1626 %v1 = icmp eq <8 x i8> %a1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1627 %v2 = icmp eq <8 x i8> %a2, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1628 %v3 = or <8 x i1> %v0, %v1 1629 %v4 = and <8 x i1> %v2, %v3 1630 %v5 = sext <8 x i1> %v4 to <8 x i8> 1631 ret <8 x i8> %v5 1632} 1633 1634define <8 x i8> @f46(<8 x i8> %a0, <8 x i8> %a1, <8 x i8> %a2) #1 { 1635; CHECK-LABEL: f46: 1636; CHECK: // %bb.0: // %b0 1637; CHECK-NEXT: { 1638; CHECK-NEXT: r6 = ##16843009 1639; CHECK-NEXT: } 1640; CHECK-NEXT: { 1641; CHECK-NEXT: r7 = ##16843009 1642; CHECK-NEXT: } 1643; CHECK-NEXT: { 1644; CHECK-NEXT: p0 = vcmpb.eq(r1:0,r7:6) 1645; CHECK-NEXT: } 1646; CHECK-NEXT: { 1647; CHECK-NEXT: p1 = vcmpb.eq(r3:2,r7:6) 1648; CHECK-NEXT: } 1649; CHECK-NEXT: { 1650; CHECK-NEXT: p2 = vcmpb.eq(r5:4,r7:6) 1651; CHECK-NEXT: } 1652; CHECK-NEXT: { 1653; CHECK-NEXT: p0 = or(p2,and(p0,p1)) 1654; CHECK-NEXT: } 1655; CHECK-NEXT: { 1656; CHECK-NEXT: r1:0 = mask(p0) 1657; CHECK-NEXT: } 1658; CHECK-NEXT: { 1659; CHECK-NEXT: jumpr r31 1660; CHECK-NEXT: } 1661b0: 1662 %v0 = icmp eq <8 x i8> %a0, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1663 %v1 = icmp eq <8 x i8> %a1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1664 %v2 = icmp eq <8 x i8> %a2, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1665 %v3 = and <8 x i1> %v0, %v1 1666 %v4 = or <8 x i1> %v2, %v3 1667 %v5 = sext <8 x i1> %v4 to <8 x i8> 1668 ret <8 x i8> %v5 1669} 1670 1671define <8 x i8> @f47(<8 x i8> %a0, <8 x i8> %a1, <8 x i8> %a2) #1 { 1672; CHECK-LABEL: f47: 1673; CHECK: // %bb.0: // %b0 1674; CHECK-NEXT: { 1675; CHECK-NEXT: r6 = ##16843009 1676; CHECK-NEXT: } 1677; CHECK-NEXT: { 1678; CHECK-NEXT: r7 = ##16843009 1679; CHECK-NEXT: } 1680; CHECK-NEXT: { 1681; CHECK-NEXT: p0 = vcmpb.eq(r1:0,r7:6) 1682; CHECK-NEXT: } 1683; CHECK-NEXT: { 1684; CHECK-NEXT: p1 = vcmpb.eq(r3:2,r7:6) 1685; CHECK-NEXT: } 1686; CHECK-NEXT: { 1687; CHECK-NEXT: p2 = vcmpb.eq(r5:4,r7:6) 1688; CHECK-NEXT: } 1689; CHECK-NEXT: { 1690; CHECK-NEXT: p0 = or(p2,or(p0,p1)) 1691; CHECK-NEXT: } 1692; CHECK-NEXT: { 1693; CHECK-NEXT: r1:0 = mask(p0) 1694; CHECK-NEXT: } 1695; CHECK-NEXT: { 1696; CHECK-NEXT: jumpr r31 1697; CHECK-NEXT: } 1698b0: 1699 %v0 = icmp eq <8 x i8> %a0, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1700 %v1 = icmp eq <8 x i8> %a1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1701 %v2 = icmp eq <8 x i8> %a2, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1702 %v3 = or <8 x i1> %v0, %v1 1703 %v4 = or <8 x i1> %v2, %v3 1704 %v5 = sext <8 x i1> %v4 to <8 x i8> 1705 ret <8 x i8> %v5 1706} 1707 1708define <8 x i8> @f48(<8 x i8> %a0, <8 x i8> %a1, <8 x i8> %a2) #1 { 1709; CHECK-LABEL: f48: 1710; CHECK: // %bb.0: // %b0 1711; CHECK-NEXT: { 1712; CHECK-NEXT: r6 = ##16843009 1713; CHECK-NEXT: } 1714; CHECK-NEXT: { 1715; CHECK-NEXT: r7 = ##16843009 1716; CHECK-NEXT: } 1717; CHECK-NEXT: { 1718; CHECK-NEXT: p0 = vcmpb.eq(r1:0,r7:6) 1719; CHECK-NEXT: } 1720; CHECK-NEXT: { 1721; CHECK-NEXT: p1 = vcmpb.eq(r5:4,r7:6) 1722; CHECK-NEXT: } 1723; CHECK-NEXT: { 1724; CHECK-NEXT: p2 = vcmpb.eq(r3:2,r7:6) 1725; CHECK-NEXT: } 1726; CHECK-NEXT: { 1727; CHECK-NEXT: p0 = and(p0,p1) 1728; CHECK-NEXT: } 1729; CHECK-NEXT: { 1730; CHECK-NEXT: p0 = and(p0,!p2) 1731; CHECK-NEXT: } 1732; CHECK-NEXT: { 1733; CHECK-NEXT: r1:0 = mask(p0) 1734; CHECK-NEXT: } 1735; CHECK-NEXT: { 1736; CHECK-NEXT: jumpr r31 1737; CHECK-NEXT: } 1738b0: 1739 %v0 = icmp eq <8 x i8> %a0, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1740 %v1 = icmp eq <8 x i8> %a1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1741 %v2 = xor <8 x i1> %v1, <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true> 1742 %v3 = icmp eq <8 x i8> %a2, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1743 %v4 = and <8 x i1> %v0, %v2 1744 %v5 = and <8 x i1> %v3, %v4 1745 %v6 = sext <8 x i1> %v5 to <8 x i8> 1746 ret <8 x i8> %v6 1747} 1748 1749define <8 x i8> @f49(<8 x i8> %a0, <8 x i8> %a1, <8 x i8> %a2) #1 { 1750; CHECK-LABEL: f49: 1751; CHECK: // %bb.0: // %b0 1752; CHECK-NEXT: { 1753; CHECK-NEXT: r6 = ##16843009 1754; CHECK-NEXT: } 1755; CHECK-NEXT: { 1756; CHECK-NEXT: r7 = ##16843009 1757; CHECK-NEXT: } 1758; CHECK-NEXT: { 1759; CHECK-NEXT: p0 = vcmpb.eq(r1:0,r7:6) 1760; CHECK-NEXT: } 1761; CHECK-NEXT: { 1762; CHECK-NEXT: p1 = vcmpb.eq(r3:2,r7:6) 1763; CHECK-NEXT: } 1764; CHECK-NEXT: { 1765; CHECK-NEXT: p2 = vcmpb.eq(r5:4,r7:6) 1766; CHECK-NEXT: } 1767; CHECK-NEXT: { 1768; CHECK-NEXT: p0 = and(p2,or(p0,!p1)) 1769; CHECK-NEXT: } 1770; CHECK-NEXT: { 1771; CHECK-NEXT: r1:0 = mask(p0) 1772; CHECK-NEXT: } 1773; CHECK-NEXT: { 1774; CHECK-NEXT: jumpr r31 1775; CHECK-NEXT: } 1776b0: 1777 %v0 = icmp eq <8 x i8> %a0, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1778 %v1 = icmp eq <8 x i8> %a1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1779 %v2 = xor <8 x i1> %v1, <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true> 1780 %v3 = icmp eq <8 x i8> %a2, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1781 %v4 = or <8 x i1> %v0, %v2 1782 %v5 = and <8 x i1> %v3, %v4 1783 %v6 = sext <8 x i1> %v5 to <8 x i8> 1784 ret <8 x i8> %v6 1785} 1786 1787define <8 x i8> @f50(<8 x i8> %a0, <8 x i8> %a1, <8 x i8> %a2) #1 { 1788; CHECK-LABEL: f50: 1789; CHECK: // %bb.0: // %b0 1790; CHECK-NEXT: { 1791; CHECK-NEXT: r6 = ##16843009 1792; CHECK-NEXT: } 1793; CHECK-NEXT: { 1794; CHECK-NEXT: r7 = ##16843009 1795; CHECK-NEXT: } 1796; CHECK-NEXT: { 1797; CHECK-NEXT: p0 = vcmpb.eq(r1:0,r7:6) 1798; CHECK-NEXT: } 1799; CHECK-NEXT: { 1800; CHECK-NEXT: p1 = vcmpb.eq(r3:2,r7:6) 1801; CHECK-NEXT: } 1802; CHECK-NEXT: { 1803; CHECK-NEXT: p2 = vcmpb.eq(r5:4,r7:6) 1804; CHECK-NEXT: } 1805; CHECK-NEXT: { 1806; CHECK-NEXT: p0 = or(p2,and(p0,!p1)) 1807; CHECK-NEXT: } 1808; CHECK-NEXT: { 1809; CHECK-NEXT: r1:0 = mask(p0) 1810; CHECK-NEXT: } 1811; CHECK-NEXT: { 1812; CHECK-NEXT: jumpr r31 1813; CHECK-NEXT: } 1814b0: 1815 %v0 = icmp eq <8 x i8> %a0, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1816 %v1 = icmp eq <8 x i8> %a1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1817 %v2 = xor <8 x i1> %v1, <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true> 1818 %v3 = icmp eq <8 x i8> %a2, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1819 %v4 = and <8 x i1> %v0, %v2 1820 %v5 = or <8 x i1> %v3, %v4 1821 %v6 = sext <8 x i1> %v5 to <8 x i8> 1822 ret <8 x i8> %v6 1823} 1824 1825define <8 x i8> @f51(<8 x i8> %a0, <8 x i8> %a1, <8 x i8> %a2) #1 { 1826; CHECK-LABEL: f51: 1827; CHECK: // %bb.0: // %b0 1828; CHECK-NEXT: { 1829; CHECK-NEXT: r6 = ##16843009 1830; CHECK-NEXT: } 1831; CHECK-NEXT: { 1832; CHECK-NEXT: r7 = ##16843009 1833; CHECK-NEXT: } 1834; CHECK-NEXT: { 1835; CHECK-NEXT: p0 = vcmpb.eq(r1:0,r7:6) 1836; CHECK-NEXT: } 1837; CHECK-NEXT: { 1838; CHECK-NEXT: p1 = vcmpb.eq(r5:4,r7:6) 1839; CHECK-NEXT: } 1840; CHECK-NEXT: { 1841; CHECK-NEXT: p2 = vcmpb.eq(r3:2,r7:6) 1842; CHECK-NEXT: } 1843; CHECK-NEXT: { 1844; CHECK-NEXT: p0 = or(p0,p1) 1845; CHECK-NEXT: } 1846; CHECK-NEXT: { 1847; CHECK-NEXT: p0 = or(p0,!p2) 1848; CHECK-NEXT: } 1849; CHECK-NEXT: { 1850; CHECK-NEXT: r1:0 = mask(p0) 1851; CHECK-NEXT: } 1852; CHECK-NEXT: { 1853; CHECK-NEXT: jumpr r31 1854; CHECK-NEXT: } 1855b0: 1856 %v0 = icmp eq <8 x i8> %a0, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1857 %v1 = icmp eq <8 x i8> %a1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1858 %v2 = xor <8 x i1> %v1, <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true> 1859 %v3 = icmp eq <8 x i8> %a2, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1860 %v4 = or <8 x i1> %v0, %v2 1861 %v5 = or <8 x i1> %v3, %v4 1862 %v6 = sext <8 x i1> %v5 to <8 x i8> 1863 ret <8 x i8> %v6 1864} 1865 1866attributes #0 = { nounwind readnone } 1867attributes #1 = { nounwind "target-features"="-small-data,-packets" } 1868