1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -march=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(r3:2,r7:6) 1254; CHECK-NEXT: } 1255; CHECK-NEXT: { 1256; CHECK-NEXT: p2 = vcmph.eq(r5:4,r7:6) 1257; CHECK-NEXT: } 1258; CHECK-NEXT: { 1259; CHECK-NEXT: p0 = and(p2,and(p0,!p1)) 1260; CHECK-NEXT: } 1261; CHECK-NEXT: { 1262; CHECK-NEXT: r1:0 = mask(p0) 1263; CHECK-NEXT: } 1264; CHECK-NEXT: { 1265; CHECK-NEXT: jumpr r31 1266; CHECK-NEXT: } 1267b0: 1268 %v0 = icmp eq <4 x i16> %a0, <i16 1, i16 1, i16 1, i16 1> 1269 %v1 = icmp eq <4 x i16> %a1, <i16 1, i16 1, i16 1, i16 1> 1270 %v2 = xor <4 x i1> %v1, <i1 true, i1 true, i1 true, i1 true> 1271 %v3 = icmp eq <4 x i16> %a2, <i16 1, i16 1, i16 1, i16 1> 1272 %v4 = and <4 x i1> %v0, %v2 1273 %v5 = and <4 x i1> %v3, %v4 1274 %v6 = sext <4 x i1> %v5 to <4 x i16> 1275 ret <4 x i16> %v6 1276} 1277 1278define <4 x i16> @f36(<4 x i16> %a0, <4 x i16> %a1, <4 x i16> %a2) #1 { 1279; CHECK-LABEL: f36: 1280; CHECK: // %bb.0: // %b0 1281; CHECK-NEXT: { 1282; CHECK-NEXT: r6 = ##65537 1283; CHECK-NEXT: } 1284; CHECK-NEXT: { 1285; CHECK-NEXT: r7 = ##65537 1286; CHECK-NEXT: } 1287; CHECK-NEXT: { 1288; CHECK-NEXT: p0 = vcmph.eq(r1:0,r7:6) 1289; CHECK-NEXT: } 1290; CHECK-NEXT: { 1291; CHECK-NEXT: p1 = vcmph.eq(r3:2,r7:6) 1292; CHECK-NEXT: } 1293; CHECK-NEXT: { 1294; CHECK-NEXT: p2 = vcmph.eq(r5:4,r7:6) 1295; CHECK-NEXT: } 1296; CHECK-NEXT: { 1297; CHECK-NEXT: p0 = and(p2,or(p0,!p1)) 1298; CHECK-NEXT: } 1299; CHECK-NEXT: { 1300; CHECK-NEXT: r1:0 = mask(p0) 1301; CHECK-NEXT: } 1302; CHECK-NEXT: { 1303; CHECK-NEXT: jumpr r31 1304; CHECK-NEXT: } 1305b0: 1306 %v0 = icmp eq <4 x i16> %a0, <i16 1, i16 1, i16 1, i16 1> 1307 %v1 = icmp eq <4 x i16> %a1, <i16 1, i16 1, i16 1, i16 1> 1308 %v2 = xor <4 x i1> %v1, <i1 true, i1 true, i1 true, i1 true> 1309 %v3 = icmp eq <4 x i16> %a2, <i16 1, i16 1, i16 1, i16 1> 1310 %v4 = or <4 x i1> %v0, %v2 1311 %v5 = and <4 x i1> %v3, %v4 1312 %v6 = sext <4 x i1> %v5 to <4 x i16> 1313 ret <4 x i16> %v6 1314} 1315 1316define <4 x i16> @f37(<4 x i16> %a0, <4 x i16> %a1, <4 x i16> %a2) #1 { 1317; CHECK-LABEL: f37: 1318; CHECK: // %bb.0: // %b0 1319; CHECK-NEXT: { 1320; CHECK-NEXT: r6 = ##65537 1321; CHECK-NEXT: } 1322; CHECK-NEXT: { 1323; CHECK-NEXT: r7 = ##65537 1324; CHECK-NEXT: } 1325; CHECK-NEXT: { 1326; CHECK-NEXT: p0 = vcmph.eq(r1:0,r7:6) 1327; CHECK-NEXT: } 1328; CHECK-NEXT: { 1329; CHECK-NEXT: p1 = vcmph.eq(r3:2,r7:6) 1330; CHECK-NEXT: } 1331; CHECK-NEXT: { 1332; CHECK-NEXT: p2 = vcmph.eq(r5:4,r7:6) 1333; CHECK-NEXT: } 1334; CHECK-NEXT: { 1335; CHECK-NEXT: p0 = or(p2,and(p0,!p1)) 1336; CHECK-NEXT: } 1337; CHECK-NEXT: { 1338; CHECK-NEXT: r1:0 = mask(p0) 1339; CHECK-NEXT: } 1340; CHECK-NEXT: { 1341; CHECK-NEXT: jumpr r31 1342; CHECK-NEXT: } 1343b0: 1344 %v0 = icmp eq <4 x i16> %a0, <i16 1, i16 1, i16 1, i16 1> 1345 %v1 = icmp eq <4 x i16> %a1, <i16 1, i16 1, i16 1, i16 1> 1346 %v2 = xor <4 x i1> %v1, <i1 true, i1 true, i1 true, i1 true> 1347 %v3 = icmp eq <4 x i16> %a2, <i16 1, i16 1, i16 1, i16 1> 1348 %v4 = and <4 x i1> %v0, %v2 1349 %v5 = or <4 x i1> %v3, %v4 1350 %v6 = sext <4 x i1> %v5 to <4 x i16> 1351 ret <4 x i16> %v6 1352} 1353 1354define <4 x i16> @f38(<4 x i16> %a0, <4 x i16> %a1, <4 x i16> %a2) #1 { 1355; CHECK-LABEL: f38: 1356; CHECK: // %bb.0: // %b0 1357; CHECK-NEXT: { 1358; CHECK-NEXT: r6 = ##65537 1359; CHECK-NEXT: } 1360; CHECK-NEXT: { 1361; CHECK-NEXT: r7 = ##65537 1362; CHECK-NEXT: } 1363; CHECK-NEXT: { 1364; CHECK-NEXT: p0 = vcmph.eq(r1:0,r7:6) 1365; CHECK-NEXT: } 1366; CHECK-NEXT: { 1367; CHECK-NEXT: p1 = vcmph.eq(r3:2,r7:6) 1368; CHECK-NEXT: } 1369; CHECK-NEXT: { 1370; CHECK-NEXT: p2 = vcmph.eq(r5:4,r7:6) 1371; CHECK-NEXT: } 1372; CHECK-NEXT: { 1373; CHECK-NEXT: p0 = or(p2,or(p0,!p1)) 1374; CHECK-NEXT: } 1375; CHECK-NEXT: { 1376; CHECK-NEXT: r1:0 = mask(p0) 1377; CHECK-NEXT: } 1378; CHECK-NEXT: { 1379; CHECK-NEXT: jumpr r31 1380; CHECK-NEXT: } 1381b0: 1382 %v0 = icmp eq <4 x i16> %a0, <i16 1, i16 1, i16 1, i16 1> 1383 %v1 = icmp eq <4 x i16> %a1, <i16 1, i16 1, i16 1, i16 1> 1384 %v2 = xor <4 x i1> %v1, <i1 true, i1 true, i1 true, i1 true> 1385 %v3 = icmp eq <4 x i16> %a2, <i16 1, i16 1, i16 1, i16 1> 1386 %v4 = or <4 x i1> %v0, %v2 1387 %v5 = or <4 x i1> %v3, %v4 1388 %v6 = sext <4 x i1> %v5 to <4 x i16> 1389 ret <4 x i16> %v6 1390} 1391 1392define <8 x i8> @f39(<8 x i8> %a0, <8 x i8> %a1) #1 { 1393; CHECK-LABEL: f39: 1394; CHECK: // %bb.0: // %b0 1395; CHECK-NEXT: { 1396; CHECK-NEXT: r4 = ##16843009 1397; CHECK-NEXT: } 1398; CHECK-NEXT: { 1399; CHECK-NEXT: r5 = ##16843009 1400; CHECK-NEXT: } 1401; CHECK-NEXT: { 1402; CHECK-NEXT: p0 = vcmpb.eq(r1:0,r5:4) 1403; CHECK-NEXT: } 1404; CHECK-NEXT: { 1405; CHECK-NEXT: p1 = vcmpb.eq(r3:2,r5:4) 1406; CHECK-NEXT: } 1407; CHECK-NEXT: { 1408; CHECK-NEXT: p0 = and(p0,p1) 1409; CHECK-NEXT: } 1410; CHECK-NEXT: { 1411; CHECK-NEXT: r1:0 = mask(p0) 1412; CHECK-NEXT: } 1413; CHECK-NEXT: { 1414; CHECK-NEXT: jumpr r31 1415; CHECK-NEXT: } 1416b0: 1417 %v0 = icmp eq <8 x i8> %a0, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1418 %v1 = icmp eq <8 x i8> %a1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1419 %v2 = and <8 x i1> %v0, %v1 1420 %v3 = sext <8 x i1> %v2 to <8 x i8> 1421 ret <8 x i8> %v3 1422} 1423 1424define <8 x i8> @f40(<8 x i8> %a0, <8 x i8> %a1) #1 { 1425; CHECK-LABEL: f40: 1426; CHECK: // %bb.0: // %b0 1427; CHECK-NEXT: { 1428; CHECK-NEXT: r4 = ##16843009 1429; CHECK-NEXT: } 1430; CHECK-NEXT: { 1431; CHECK-NEXT: r5 = ##16843009 1432; CHECK-NEXT: } 1433; CHECK-NEXT: { 1434; CHECK-NEXT: p0 = vcmpb.eq(r1:0,r5:4) 1435; CHECK-NEXT: } 1436; CHECK-NEXT: { 1437; CHECK-NEXT: p1 = vcmpb.eq(r3:2,r5:4) 1438; CHECK-NEXT: } 1439; CHECK-NEXT: { 1440; CHECK-NEXT: p0 = or(p0,p1) 1441; CHECK-NEXT: } 1442; CHECK-NEXT: { 1443; CHECK-NEXT: r1:0 = mask(p0) 1444; CHECK-NEXT: } 1445; CHECK-NEXT: { 1446; CHECK-NEXT: jumpr r31 1447; CHECK-NEXT: } 1448b0: 1449 %v0 = icmp eq <8 x i8> %a0, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1450 %v1 = icmp eq <8 x i8> %a1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1451 %v2 = or <8 x i1> %v0, %v1 1452 %v3 = sext <8 x i1> %v2 to <8 x i8> 1453 ret <8 x i8> %v3 1454} 1455 1456define <8 x i8> @f41(<8 x i8> %a0, <8 x i8> %a1) #1 { 1457; CHECK-LABEL: f41: 1458; CHECK: // %bb.0: // %b0 1459; CHECK-NEXT: { 1460; CHECK-NEXT: r4 = ##16843009 1461; CHECK-NEXT: } 1462; CHECK-NEXT: { 1463; CHECK-NEXT: r5 = ##16843009 1464; CHECK-NEXT: } 1465; CHECK-NEXT: { 1466; CHECK-NEXT: p0 = vcmpb.eq(r1:0,r5:4) 1467; CHECK-NEXT: } 1468; CHECK-NEXT: { 1469; CHECK-NEXT: p1 = vcmpb.eq(r3:2,r5:4) 1470; CHECK-NEXT: } 1471; CHECK-NEXT: { 1472; CHECK-NEXT: p0 = xor(p0,p1) 1473; CHECK-NEXT: } 1474; CHECK-NEXT: { 1475; CHECK-NEXT: r1:0 = mask(p0) 1476; CHECK-NEXT: } 1477; CHECK-NEXT: { 1478; CHECK-NEXT: jumpr r31 1479; CHECK-NEXT: } 1480b0: 1481 %v0 = icmp eq <8 x i8> %a0, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1482 %v1 = icmp eq <8 x i8> %a1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1483 %v2 = xor <8 x i1> %v0, %v1 1484 %v3 = sext <8 x i1> %v2 to <8 x i8> 1485 ret <8 x i8> %v3 1486} 1487 1488define <8 x i8> @f42(<8 x i8> %a0, <8 x i8> %a1) #1 { 1489; CHECK-LABEL: f42: 1490; CHECK: // %bb.0: // %b0 1491; CHECK-NEXT: { 1492; CHECK-NEXT: r4 = ##16843009 1493; CHECK-NEXT: } 1494; CHECK-NEXT: { 1495; CHECK-NEXT: r5 = ##16843009 1496; CHECK-NEXT: } 1497; CHECK-NEXT: { 1498; CHECK-NEXT: p0 = vcmpb.eq(r1:0,r5:4) 1499; CHECK-NEXT: } 1500; CHECK-NEXT: { 1501; CHECK-NEXT: p1 = vcmpb.eq(r3:2,r5:4) 1502; CHECK-NEXT: } 1503; CHECK-NEXT: { 1504; CHECK-NEXT: p0 = and(p0,!p1) 1505; CHECK-NEXT: } 1506; CHECK-NEXT: { 1507; CHECK-NEXT: r1:0 = mask(p0) 1508; CHECK-NEXT: } 1509; CHECK-NEXT: { 1510; CHECK-NEXT: jumpr r31 1511; CHECK-NEXT: } 1512b0: 1513 %v0 = icmp eq <8 x i8> %a0, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1514 %v1 = icmp eq <8 x i8> %a1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1515 %v2 = xor <8 x i1> %v1, <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true> 1516 %v3 = and <8 x i1> %v0, %v2 1517 %v4 = sext <8 x i1> %v3 to <8 x i8> 1518 ret <8 x i8> %v4 1519} 1520 1521define <8 x i8> @f43(<8 x i8> %a0, <8 x i8> %a1) #1 { 1522; CHECK-LABEL: f43: 1523; CHECK: // %bb.0: // %b0 1524; CHECK-NEXT: { 1525; CHECK-NEXT: r4 = ##16843009 1526; CHECK-NEXT: } 1527; CHECK-NEXT: { 1528; CHECK-NEXT: r5 = ##16843009 1529; CHECK-NEXT: } 1530; CHECK-NEXT: { 1531; CHECK-NEXT: p0 = vcmpb.eq(r1:0,r5:4) 1532; CHECK-NEXT: } 1533; CHECK-NEXT: { 1534; CHECK-NEXT: p1 = vcmpb.eq(r3:2,r5:4) 1535; CHECK-NEXT: } 1536; CHECK-NEXT: { 1537; CHECK-NEXT: p0 = or(p0,!p1) 1538; CHECK-NEXT: } 1539; CHECK-NEXT: { 1540; CHECK-NEXT: r1:0 = mask(p0) 1541; CHECK-NEXT: } 1542; CHECK-NEXT: { 1543; CHECK-NEXT: jumpr r31 1544; CHECK-NEXT: } 1545b0: 1546 %v0 = icmp eq <8 x i8> %a0, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1547 %v1 = icmp eq <8 x i8> %a1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1548 %v2 = xor <8 x i1> %v1, <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true> 1549 %v3 = or <8 x i1> %v0, %v2 1550 %v4 = sext <8 x i1> %v3 to <8 x i8> 1551 ret <8 x i8> %v4 1552} 1553 1554define <8 x i8> @f44(<8 x i8> %a0, <8 x i8> %a1, <8 x i8> %a2) #1 { 1555; CHECK-LABEL: f44: 1556; CHECK: // %bb.0: // %b0 1557; CHECK-NEXT: { 1558; CHECK-NEXT: r6 = ##16843009 1559; CHECK-NEXT: } 1560; CHECK-NEXT: { 1561; CHECK-NEXT: r7 = ##16843009 1562; CHECK-NEXT: } 1563; CHECK-NEXT: { 1564; CHECK-NEXT: p0 = vcmpb.eq(r1:0,r7:6) 1565; CHECK-NEXT: } 1566; CHECK-NEXT: { 1567; CHECK-NEXT: p1 = vcmpb.eq(r3:2,r7:6) 1568; CHECK-NEXT: } 1569; CHECK-NEXT: { 1570; CHECK-NEXT: p2 = vcmpb.eq(r5:4,r7:6) 1571; CHECK-NEXT: } 1572; CHECK-NEXT: { 1573; CHECK-NEXT: p0 = and(p2,and(p0,p1)) 1574; CHECK-NEXT: } 1575; CHECK-NEXT: { 1576; CHECK-NEXT: r1:0 = mask(p0) 1577; CHECK-NEXT: } 1578; CHECK-NEXT: { 1579; CHECK-NEXT: jumpr r31 1580; CHECK-NEXT: } 1581b0: 1582 %v0 = icmp eq <8 x i8> %a0, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1583 %v1 = icmp eq <8 x i8> %a1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1584 %v2 = icmp eq <8 x i8> %a2, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1585 %v3 = and <8 x i1> %v0, %v1 1586 %v4 = and <8 x i1> %v2, %v3 1587 %v5 = sext <8 x i1> %v4 to <8 x i8> 1588 ret <8 x i8> %v5 1589} 1590 1591define <8 x i8> @f45(<8 x i8> %a0, <8 x i8> %a1, <8 x i8> %a2) #1 { 1592; CHECK-LABEL: f45: 1593; CHECK: // %bb.0: // %b0 1594; CHECK-NEXT: { 1595; CHECK-NEXT: r6 = ##16843009 1596; CHECK-NEXT: } 1597; CHECK-NEXT: { 1598; CHECK-NEXT: r7 = ##16843009 1599; CHECK-NEXT: } 1600; CHECK-NEXT: { 1601; CHECK-NEXT: p0 = vcmpb.eq(r1:0,r7:6) 1602; CHECK-NEXT: } 1603; CHECK-NEXT: { 1604; CHECK-NEXT: p1 = vcmpb.eq(r3:2,r7:6) 1605; CHECK-NEXT: } 1606; CHECK-NEXT: { 1607; CHECK-NEXT: p2 = vcmpb.eq(r5:4,r7:6) 1608; CHECK-NEXT: } 1609; CHECK-NEXT: { 1610; CHECK-NEXT: p0 = and(p2,or(p0,p1)) 1611; CHECK-NEXT: } 1612; CHECK-NEXT: { 1613; CHECK-NEXT: r1:0 = mask(p0) 1614; CHECK-NEXT: } 1615; CHECK-NEXT: { 1616; CHECK-NEXT: jumpr r31 1617; CHECK-NEXT: } 1618b0: 1619 %v0 = icmp eq <8 x i8> %a0, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1620 %v1 = icmp eq <8 x i8> %a1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1621 %v2 = icmp eq <8 x i8> %a2, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1622 %v3 = or <8 x i1> %v0, %v1 1623 %v4 = and <8 x i1> %v2, %v3 1624 %v5 = sext <8 x i1> %v4 to <8 x i8> 1625 ret <8 x i8> %v5 1626} 1627 1628define <8 x i8> @f46(<8 x i8> %a0, <8 x i8> %a1, <8 x i8> %a2) #1 { 1629; CHECK-LABEL: f46: 1630; CHECK: // %bb.0: // %b0 1631; CHECK-NEXT: { 1632; CHECK-NEXT: r6 = ##16843009 1633; CHECK-NEXT: } 1634; CHECK-NEXT: { 1635; CHECK-NEXT: r7 = ##16843009 1636; CHECK-NEXT: } 1637; CHECK-NEXT: { 1638; CHECK-NEXT: p0 = vcmpb.eq(r1:0,r7:6) 1639; CHECK-NEXT: } 1640; CHECK-NEXT: { 1641; CHECK-NEXT: p1 = vcmpb.eq(r3:2,r7:6) 1642; CHECK-NEXT: } 1643; CHECK-NEXT: { 1644; CHECK-NEXT: p2 = vcmpb.eq(r5:4,r7:6) 1645; CHECK-NEXT: } 1646; CHECK-NEXT: { 1647; CHECK-NEXT: p0 = or(p2,and(p0,p1)) 1648; CHECK-NEXT: } 1649; CHECK-NEXT: { 1650; CHECK-NEXT: r1:0 = mask(p0) 1651; CHECK-NEXT: } 1652; CHECK-NEXT: { 1653; CHECK-NEXT: jumpr r31 1654; CHECK-NEXT: } 1655b0: 1656 %v0 = icmp eq <8 x i8> %a0, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1657 %v1 = icmp eq <8 x i8> %a1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1658 %v2 = icmp eq <8 x i8> %a2, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1659 %v3 = and <8 x i1> %v0, %v1 1660 %v4 = or <8 x i1> %v2, %v3 1661 %v5 = sext <8 x i1> %v4 to <8 x i8> 1662 ret <8 x i8> %v5 1663} 1664 1665define <8 x i8> @f47(<8 x i8> %a0, <8 x i8> %a1, <8 x i8> %a2) #1 { 1666; CHECK-LABEL: f47: 1667; CHECK: // %bb.0: // %b0 1668; CHECK-NEXT: { 1669; CHECK-NEXT: r6 = ##16843009 1670; CHECK-NEXT: } 1671; CHECK-NEXT: { 1672; CHECK-NEXT: r7 = ##16843009 1673; CHECK-NEXT: } 1674; CHECK-NEXT: { 1675; CHECK-NEXT: p0 = vcmpb.eq(r1:0,r7:6) 1676; CHECK-NEXT: } 1677; CHECK-NEXT: { 1678; CHECK-NEXT: p1 = vcmpb.eq(r3:2,r7:6) 1679; CHECK-NEXT: } 1680; CHECK-NEXT: { 1681; CHECK-NEXT: p2 = vcmpb.eq(r5:4,r7:6) 1682; CHECK-NEXT: } 1683; CHECK-NEXT: { 1684; CHECK-NEXT: p0 = or(p2,or(p0,p1)) 1685; CHECK-NEXT: } 1686; CHECK-NEXT: { 1687; CHECK-NEXT: r1:0 = mask(p0) 1688; CHECK-NEXT: } 1689; CHECK-NEXT: { 1690; CHECK-NEXT: jumpr r31 1691; CHECK-NEXT: } 1692b0: 1693 %v0 = icmp eq <8 x i8> %a0, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1694 %v1 = icmp eq <8 x i8> %a1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1695 %v2 = icmp eq <8 x i8> %a2, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1696 %v3 = or <8 x i1> %v0, %v1 1697 %v4 = or <8 x i1> %v2, %v3 1698 %v5 = sext <8 x i1> %v4 to <8 x i8> 1699 ret <8 x i8> %v5 1700} 1701 1702define <8 x i8> @f48(<8 x i8> %a0, <8 x i8> %a1, <8 x i8> %a2) #1 { 1703; CHECK-LABEL: f48: 1704; CHECK: // %bb.0: // %b0 1705; CHECK-NEXT: { 1706; CHECK-NEXT: r6 = ##16843009 1707; CHECK-NEXT: } 1708; CHECK-NEXT: { 1709; CHECK-NEXT: r7 = ##16843009 1710; CHECK-NEXT: } 1711; CHECK-NEXT: { 1712; CHECK-NEXT: p0 = vcmpb.eq(r1:0,r7:6) 1713; CHECK-NEXT: } 1714; CHECK-NEXT: { 1715; CHECK-NEXT: p1 = vcmpb.eq(r3:2,r7:6) 1716; CHECK-NEXT: } 1717; CHECK-NEXT: { 1718; CHECK-NEXT: p2 = vcmpb.eq(r5:4,r7:6) 1719; CHECK-NEXT: } 1720; CHECK-NEXT: { 1721; CHECK-NEXT: p0 = and(p2,and(p0,!p1)) 1722; CHECK-NEXT: } 1723; CHECK-NEXT: { 1724; CHECK-NEXT: r1:0 = mask(p0) 1725; CHECK-NEXT: } 1726; CHECK-NEXT: { 1727; CHECK-NEXT: jumpr r31 1728; CHECK-NEXT: } 1729b0: 1730 %v0 = icmp eq <8 x i8> %a0, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1731 %v1 = icmp eq <8 x i8> %a1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1732 %v2 = xor <8 x i1> %v1, <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true> 1733 %v3 = icmp eq <8 x i8> %a2, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1734 %v4 = and <8 x i1> %v0, %v2 1735 %v5 = and <8 x i1> %v3, %v4 1736 %v6 = sext <8 x i1> %v5 to <8 x i8> 1737 ret <8 x i8> %v6 1738} 1739 1740define <8 x i8> @f49(<8 x i8> %a0, <8 x i8> %a1, <8 x i8> %a2) #1 { 1741; CHECK-LABEL: f49: 1742; CHECK: // %bb.0: // %b0 1743; CHECK-NEXT: { 1744; CHECK-NEXT: r6 = ##16843009 1745; CHECK-NEXT: } 1746; CHECK-NEXT: { 1747; CHECK-NEXT: r7 = ##16843009 1748; CHECK-NEXT: } 1749; CHECK-NEXT: { 1750; CHECK-NEXT: p0 = vcmpb.eq(r1:0,r7:6) 1751; CHECK-NEXT: } 1752; CHECK-NEXT: { 1753; CHECK-NEXT: p1 = vcmpb.eq(r3:2,r7:6) 1754; CHECK-NEXT: } 1755; CHECK-NEXT: { 1756; CHECK-NEXT: p2 = vcmpb.eq(r5:4,r7:6) 1757; CHECK-NEXT: } 1758; CHECK-NEXT: { 1759; CHECK-NEXT: p0 = and(p2,or(p0,!p1)) 1760; CHECK-NEXT: } 1761; CHECK-NEXT: { 1762; CHECK-NEXT: r1:0 = mask(p0) 1763; CHECK-NEXT: } 1764; CHECK-NEXT: { 1765; CHECK-NEXT: jumpr r31 1766; CHECK-NEXT: } 1767b0: 1768 %v0 = icmp eq <8 x i8> %a0, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1769 %v1 = icmp eq <8 x i8> %a1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1770 %v2 = xor <8 x i1> %v1, <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true> 1771 %v3 = icmp eq <8 x i8> %a2, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1772 %v4 = or <8 x i1> %v0, %v2 1773 %v5 = and <8 x i1> %v3, %v4 1774 %v6 = sext <8 x i1> %v5 to <8 x i8> 1775 ret <8 x i8> %v6 1776} 1777 1778define <8 x i8> @f50(<8 x i8> %a0, <8 x i8> %a1, <8 x i8> %a2) #1 { 1779; CHECK-LABEL: f50: 1780; CHECK: // %bb.0: // %b0 1781; CHECK-NEXT: { 1782; CHECK-NEXT: r6 = ##16843009 1783; CHECK-NEXT: } 1784; CHECK-NEXT: { 1785; CHECK-NEXT: r7 = ##16843009 1786; CHECK-NEXT: } 1787; CHECK-NEXT: { 1788; CHECK-NEXT: p0 = vcmpb.eq(r1:0,r7:6) 1789; CHECK-NEXT: } 1790; CHECK-NEXT: { 1791; CHECK-NEXT: p1 = vcmpb.eq(r3:2,r7:6) 1792; CHECK-NEXT: } 1793; CHECK-NEXT: { 1794; CHECK-NEXT: p2 = vcmpb.eq(r5:4,r7:6) 1795; CHECK-NEXT: } 1796; CHECK-NEXT: { 1797; CHECK-NEXT: p0 = or(p2,and(p0,!p1)) 1798; CHECK-NEXT: } 1799; CHECK-NEXT: { 1800; CHECK-NEXT: r1:0 = mask(p0) 1801; CHECK-NEXT: } 1802; CHECK-NEXT: { 1803; CHECK-NEXT: jumpr r31 1804; CHECK-NEXT: } 1805b0: 1806 %v0 = icmp eq <8 x i8> %a0, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1807 %v1 = icmp eq <8 x i8> %a1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1808 %v2 = xor <8 x i1> %v1, <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true> 1809 %v3 = icmp eq <8 x i8> %a2, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1810 %v4 = and <8 x i1> %v0, %v2 1811 %v5 = or <8 x i1> %v3, %v4 1812 %v6 = sext <8 x i1> %v5 to <8 x i8> 1813 ret <8 x i8> %v6 1814} 1815 1816define <8 x i8> @f51(<8 x i8> %a0, <8 x i8> %a1, <8 x i8> %a2) #1 { 1817; CHECK-LABEL: f51: 1818; CHECK: // %bb.0: // %b0 1819; CHECK-NEXT: { 1820; CHECK-NEXT: r6 = ##16843009 1821; CHECK-NEXT: } 1822; CHECK-NEXT: { 1823; CHECK-NEXT: r7 = ##16843009 1824; CHECK-NEXT: } 1825; CHECK-NEXT: { 1826; CHECK-NEXT: p0 = vcmpb.eq(r1:0,r7:6) 1827; CHECK-NEXT: } 1828; CHECK-NEXT: { 1829; CHECK-NEXT: p1 = vcmpb.eq(r3:2,r7:6) 1830; CHECK-NEXT: } 1831; CHECK-NEXT: { 1832; CHECK-NEXT: p2 = vcmpb.eq(r5:4,r7:6) 1833; CHECK-NEXT: } 1834; CHECK-NEXT: { 1835; CHECK-NEXT: p0 = or(p2,or(p0,!p1)) 1836; CHECK-NEXT: } 1837; CHECK-NEXT: { 1838; CHECK-NEXT: r1:0 = mask(p0) 1839; CHECK-NEXT: } 1840; CHECK-NEXT: { 1841; CHECK-NEXT: jumpr r31 1842; CHECK-NEXT: } 1843b0: 1844 %v0 = icmp eq <8 x i8> %a0, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1845 %v1 = icmp eq <8 x i8> %a1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1846 %v2 = xor <8 x i1> %v1, <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true> 1847 %v3 = icmp eq <8 x i8> %a2, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1848 %v4 = or <8 x i1> %v0, %v2 1849 %v5 = or <8 x i1> %v3, %v4 1850 %v6 = sext <8 x i1> %v5 to <8 x i8> 1851 ret <8 x i8> %v6 1852} 1853 1854attributes #0 = { nounwind readnone } 1855attributes #1 = { nounwind "target-features"="-small-data,-packets" } 1856