@@ -4454,3 +4454,140 @@ define i32 @PR39665_c_ray_opt(<2 x double> %x, <2 x double> %y) {
4454
4454
%r = select i1 %u , i32 42 , i32 99
4455
4455
ret i32 %r
4456
4456
}
4457
+
4458
+ define i32 @pr67287 (<2 x i64 > %broadcast.splatinsert25 ) {
4459
+ ; SSE2-LABEL: pr67287:
4460
+ ; SSE2: # %bb.0: # %entry
4461
+ ; SSE2-NEXT: movl $3, %eax
4462
+ ; SSE2-NEXT: testl %eax, %eax
4463
+ ; SSE2-NEXT: jne .LBB97_2
4464
+ ; SSE2-NEXT: # %bb.1: # %entry
4465
+ ; SSE2-NEXT: pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
4466
+ ; SSE2-NEXT: pxor %xmm1, %xmm1
4467
+ ; SSE2-NEXT: pcmpeqd %xmm0, %xmm1
4468
+ ; SSE2-NEXT: movd %xmm1, %eax
4469
+ ; SSE2-NEXT: testb $1, %al
4470
+ ; SSE2-NEXT: jne .LBB97_2
4471
+ ; SSE2-NEXT: # %bb.3: # %middle.block
4472
+ ; SSE2-NEXT: xorl %eax, %eax
4473
+ ; SSE2-NEXT: retq
4474
+ ; SSE2-NEXT: .LBB97_2:
4475
+ ; SSE2-NEXT: movw $0, 0
4476
+ ; SSE2-NEXT: xorl %eax, %eax
4477
+ ; SSE2-NEXT: retq
4478
+ ;
4479
+ ; SSE41-LABEL: pr67287:
4480
+ ; SSE41: # %bb.0: # %entry
4481
+ ; SSE41-NEXT: pxor %xmm1, %xmm1
4482
+ ; SSE41-NEXT: pblendw {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3],xmm0[4,5],xmm1[6,7]
4483
+ ; SSE41-NEXT: pcmpeqq %xmm1, %xmm0
4484
+ ; SSE41-NEXT: movmskpd %xmm0, %eax
4485
+ ; SSE41-NEXT: testl %eax, %eax
4486
+ ; SSE41-NEXT: jne .LBB97_2
4487
+ ; SSE41-NEXT: # %bb.1: # %entry
4488
+ ; SSE41-NEXT: movd %xmm0, %eax
4489
+ ; SSE41-NEXT: testb $1, %al
4490
+ ; SSE41-NEXT: jne .LBB97_2
4491
+ ; SSE41-NEXT: # %bb.3: # %middle.block
4492
+ ; SSE41-NEXT: xorl %eax, %eax
4493
+ ; SSE41-NEXT: retq
4494
+ ; SSE41-NEXT: .LBB97_2:
4495
+ ; SSE41-NEXT: movw $0, 0
4496
+ ; SSE41-NEXT: xorl %eax, %eax
4497
+ ; SSE41-NEXT: retq
4498
+ ;
4499
+ ; AVX1-LABEL: pr67287:
4500
+ ; AVX1: # %bb.0: # %entry
4501
+ ; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1
4502
+ ; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3],xmm0[4,5],xmm1[6,7]
4503
+ ; AVX1-NEXT: vpcmpeqq %xmm1, %xmm0, %xmm0
4504
+ ; AVX1-NEXT: vtestpd %xmm0, %xmm0
4505
+ ; AVX1-NEXT: jne .LBB97_2
4506
+ ; AVX1-NEXT: # %bb.1: # %entry
4507
+ ; AVX1-NEXT: vmovd %xmm0, %eax
4508
+ ; AVX1-NEXT: testb $1, %al
4509
+ ; AVX1-NEXT: jne .LBB97_2
4510
+ ; AVX1-NEXT: # %bb.3: # %middle.block
4511
+ ; AVX1-NEXT: xorl %eax, %eax
4512
+ ; AVX1-NEXT: retq
4513
+ ; AVX1-NEXT: .LBB97_2:
4514
+ ; AVX1-NEXT: movw $0, 0
4515
+ ; AVX1-NEXT: xorl %eax, %eax
4516
+ ; AVX1-NEXT: retq
4517
+ ;
4518
+ ; AVX2-LABEL: pr67287:
4519
+ ; AVX2: # %bb.0: # %entry
4520
+ ; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1
4521
+ ; AVX2-NEXT: vpblendd {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3]
4522
+ ; AVX2-NEXT: vpcmpeqq %xmm1, %xmm0, %xmm0
4523
+ ; AVX2-NEXT: vtestpd %xmm0, %xmm0
4524
+ ; AVX2-NEXT: jne .LBB97_2
4525
+ ; AVX2-NEXT: # %bb.1: # %entry
4526
+ ; AVX2-NEXT: vmovd %xmm0, %eax
4527
+ ; AVX2-NEXT: testb $1, %al
4528
+ ; AVX2-NEXT: jne .LBB97_2
4529
+ ; AVX2-NEXT: # %bb.3: # %middle.block
4530
+ ; AVX2-NEXT: xorl %eax, %eax
4531
+ ; AVX2-NEXT: retq
4532
+ ; AVX2-NEXT: .LBB97_2:
4533
+ ; AVX2-NEXT: movw $0, 0
4534
+ ; AVX2-NEXT: xorl %eax, %eax
4535
+ ; AVX2-NEXT: retq
4536
+ ;
4537
+ ; KNL-LABEL: pr67287:
4538
+ ; KNL: # %bb.0: # %entry
4539
+ ; KNL-NEXT: vpxor %xmm1, %xmm1, %xmm1
4540
+ ; KNL-NEXT: vpblendd {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3]
4541
+ ; KNL-NEXT: vptestnmq %zmm0, %zmm0, %k0
4542
+ ; KNL-NEXT: kmovw %k0, %eax
4543
+ ; KNL-NEXT: testb $3, %al
4544
+ ; KNL-NEXT: jne .LBB97_2
4545
+ ; KNL-NEXT: # %bb.1: # %entry
4546
+ ; KNL-NEXT: kmovw %k0, %eax
4547
+ ; KNL-NEXT: testb $1, %al
4548
+ ; KNL-NEXT: jne .LBB97_2
4549
+ ; KNL-NEXT: # %bb.3: # %middle.block
4550
+ ; KNL-NEXT: xorl %eax, %eax
4551
+ ; KNL-NEXT: vzeroupper
4552
+ ; KNL-NEXT: retq
4553
+ ; KNL-NEXT: .LBB97_2:
4554
+ ; KNL-NEXT: movw $0, 0
4555
+ ; KNL-NEXT: xorl %eax, %eax
4556
+ ; KNL-NEXT: vzeroupper
4557
+ ; KNL-NEXT: retq
4558
+ ;
4559
+ ; SKX-LABEL: pr67287:
4560
+ ; SKX: # %bb.0: # %entry
4561
+ ; SKX-NEXT: vpxor %xmm1, %xmm1, %xmm1
4562
+ ; SKX-NEXT: vpblendd {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3]
4563
+ ; SKX-NEXT: vptestnmq %xmm0, %xmm0, %k0
4564
+ ; SKX-NEXT: kortestb %k0, %k0
4565
+ ; SKX-NEXT: jne .LBB97_2
4566
+ ; SKX-NEXT: # %bb.1: # %entry
4567
+ ; SKX-NEXT: kmovd %k0, %eax
4568
+ ; SKX-NEXT: testb $1, %al
4569
+ ; SKX-NEXT: jne .LBB97_2
4570
+ ; SKX-NEXT: # %bb.3: # %middle.block
4571
+ ; SKX-NEXT: xorl %eax, %eax
4572
+ ; SKX-NEXT: retq
4573
+ ; SKX-NEXT: .LBB97_2:
4574
+ ; SKX-NEXT: movw $0, 0
4575
+ ; SKX-NEXT: xorl %eax, %eax
4576
+ ; SKX-NEXT: retq
4577
+ entry:
4578
+ %0 = and <2 x i64 > %broadcast.splatinsert25 , <i64 4294967295 , i64 4294967295 >
4579
+ %1 = icmp eq <2 x i64 > %0 , zeroinitializer
4580
+ %shift = shufflevector <2 x i1 > %1 , <2 x i1 > zeroinitializer , <2 x i32 > <i32 1 , i32 poison>
4581
+ %2 = or <2 x i1 > %1 , %shift
4582
+ %3 = extractelement <2 x i1 > %2 , i64 0
4583
+ %4 = extractelement <2 x i1 > %1 , i64 0
4584
+ %5 = or i1 %3 , %4
4585
+ br i1 %5 , label %6 , label %middle.block
4586
+
4587
+ 6 : ; preds = %entry
4588
+ store i16 0 , ptr null , align 2
4589
+ br label %middle.block
4590
+
4591
+ middle.block: ; preds = %6, %entry
4592
+ ret i32 0
4593
+ }
0 commit comments