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