@@ -4425,6 +4425,61 @@ define i32 @PR39665_c_ray_opt(<2 x double> %x, <2 x double> %y) {
4425
4425
ret i32 %r
4426
4426
}
4427
4427
4428
+ define i32 @PR39665_c_ray_select (<2 x double > %x , <2 x double > %y ) {
4429
+ ; SSE-LABEL: PR39665_c_ray_select:
4430
+ ; SSE: # %bb.0:
4431
+ ; SSE-NEXT: cmpltpd %xmm0, %xmm1
4432
+ ; SSE-NEXT: psllq $63, %xmm1
4433
+ ; SSE-NEXT: movmskpd %xmm1, %eax
4434
+ ; SSE-NEXT: cmpl $3, %eax
4435
+ ; SSE-NEXT: movl $42, %ecx
4436
+ ; SSE-NEXT: movl $99, %eax
4437
+ ; SSE-NEXT: cmovel %ecx, %eax
4438
+ ; SSE-NEXT: retq
4439
+ ;
4440
+ ; AVX1OR2-LABEL: PR39665_c_ray_select:
4441
+ ; AVX1OR2: # %bb.0:
4442
+ ; AVX1OR2-NEXT: vcmpltpd %xmm0, %xmm1, %xmm0
4443
+ ; AVX1OR2-NEXT: vpsllq $63, %xmm0, %xmm0
4444
+ ; AVX1OR2-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
4445
+ ; AVX1OR2-NEXT: vtestpd %xmm1, %xmm0
4446
+ ; AVX1OR2-NEXT: movl $42, %ecx
4447
+ ; AVX1OR2-NEXT: movl $99, %eax
4448
+ ; AVX1OR2-NEXT: cmovbl %ecx, %eax
4449
+ ; AVX1OR2-NEXT: retq
4450
+ ;
4451
+ ; KNL-LABEL: PR39665_c_ray_select:
4452
+ ; KNL: # %bb.0:
4453
+ ; KNL-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1
4454
+ ; KNL-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0
4455
+ ; KNL-NEXT: vcmpltpd %zmm0, %zmm1, %k0
4456
+ ; KNL-NEXT: knotw %k0, %k0
4457
+ ; KNL-NEXT: kmovw %k0, %eax
4458
+ ; KNL-NEXT: testb $3, %al
4459
+ ; KNL-NEXT: movl $42, %ecx
4460
+ ; KNL-NEXT: movl $99, %eax
4461
+ ; KNL-NEXT: cmovel %ecx, %eax
4462
+ ; KNL-NEXT: vzeroupper
4463
+ ; KNL-NEXT: retq
4464
+ ;
4465
+ ; SKX-LABEL: PR39665_c_ray_select:
4466
+ ; SKX: # %bb.0:
4467
+ ; SKX-NEXT: vcmpltpd %xmm0, %xmm1, %k0
4468
+ ; SKX-NEXT: knotw %k0, %k0
4469
+ ; SKX-NEXT: kmovd %k0, %eax
4470
+ ; SKX-NEXT: testb $3, %al
4471
+ ; SKX-NEXT: movl $42, %ecx
4472
+ ; SKX-NEXT: movl $99, %eax
4473
+ ; SKX-NEXT: cmovel %ecx, %eax
4474
+ ; SKX-NEXT: retq
4475
+ %cmp = fcmp fast ogt <2 x double > %x , %y
4476
+ %b0 = extractelement <2 x i1 > %cmp , i64 0
4477
+ %b1 = extractelement <2 x i1 > %cmp , i64 1
4478
+ %b = select i1 %b0 , i1 %b1 , i1 false
4479
+ %r = select i1 %b , i32 42 , i32 99
4480
+ ret i32 %r
4481
+ }
4482
+
4428
4483
define i32 @pr67287 (<2 x i64 > %broadcast.splatinsert25 ) {
4429
4484
; SSE2-LABEL: pr67287:
4430
4485
; SSE2: # %bb.0: # %entry
@@ -4438,10 +4493,10 @@ define i32 @pr67287(<2 x i64> %broadcast.splatinsert25) {
4438
4493
; SSE2-NEXT: movd %xmm1, %ecx
4439
4494
; SSE2-NEXT: orb %al, %cl
4440
4495
; SSE2-NEXT: testb $1, %cl
4441
- ; SSE2-NEXT: je .LBB97_2
4496
+ ; SSE2-NEXT: je .LBB98_2
4442
4497
; SSE2-NEXT: # %bb.1:
4443
4498
; SSE2-NEXT: movw $0, 0
4444
- ; SSE2-NEXT: .LBB97_2 : # %middle.block
4499
+ ; SSE2-NEXT: .LBB98_2 : # %middle.block
4445
4500
; SSE2-NEXT: xorl %eax, %eax
4446
4501
; SSE2-NEXT: retq
4447
4502
;
@@ -4456,10 +4511,10 @@ define i32 @pr67287(<2 x i64> %broadcast.splatinsert25) {
4456
4511
; SSE41-NEXT: movd %xmm0, %ecx
4457
4512
; SSE41-NEXT: orb %al, %cl
4458
4513
; SSE41-NEXT: testb $1, %cl
4459
- ; SSE41-NEXT: je .LBB97_2
4514
+ ; SSE41-NEXT: je .LBB98_2
4460
4515
; SSE41-NEXT: # %bb.1:
4461
4516
; SSE41-NEXT: movw $0, 0
4462
- ; SSE41-NEXT: .LBB97_2 : # %middle.block
4517
+ ; SSE41-NEXT: .LBB98_2 : # %middle.block
4463
4518
; SSE41-NEXT: xorl %eax, %eax
4464
4519
; SSE41-NEXT: retq
4465
4520
;
@@ -4473,10 +4528,10 @@ define i32 @pr67287(<2 x i64> %broadcast.splatinsert25) {
4473
4528
; AVX1-NEXT: vmovd %xmm0, %ecx
4474
4529
; AVX1-NEXT: orb %al, %cl
4475
4530
; AVX1-NEXT: testb $1, %cl
4476
- ; AVX1-NEXT: je .LBB97_2
4531
+ ; AVX1-NEXT: je .LBB98_2
4477
4532
; AVX1-NEXT: # %bb.1:
4478
4533
; AVX1-NEXT: movw $0, 0
4479
- ; AVX1-NEXT: .LBB97_2 : # %middle.block
4534
+ ; AVX1-NEXT: .LBB98_2 : # %middle.block
4480
4535
; AVX1-NEXT: xorl %eax, %eax
4481
4536
; AVX1-NEXT: retq
4482
4537
;
@@ -4490,10 +4545,10 @@ define i32 @pr67287(<2 x i64> %broadcast.splatinsert25) {
4490
4545
; AVX2-NEXT: vmovd %xmm0, %ecx
4491
4546
; AVX2-NEXT: orb %al, %cl
4492
4547
; AVX2-NEXT: testb $1, %cl
4493
- ; AVX2-NEXT: je .LBB97_2
4548
+ ; AVX2-NEXT: je .LBB98_2
4494
4549
; AVX2-NEXT: # %bb.1:
4495
4550
; AVX2-NEXT: movw $0, 0
4496
- ; AVX2-NEXT: .LBB97_2 : # %middle.block
4551
+ ; AVX2-NEXT: .LBB98_2 : # %middle.block
4497
4552
; AVX2-NEXT: xorl %eax, %eax
4498
4553
; AVX2-NEXT: retq
4499
4554
;
@@ -4508,10 +4563,10 @@ define i32 @pr67287(<2 x i64> %broadcast.splatinsert25) {
4508
4563
; KNL-NEXT: setne %cl
4509
4564
; KNL-NEXT: orb %cl, %al
4510
4565
; KNL-NEXT: testb $1, %al
4511
- ; KNL-NEXT: je .LBB97_2
4566
+ ; KNL-NEXT: je .LBB98_2
4512
4567
; KNL-NEXT: # %bb.1:
4513
4568
; KNL-NEXT: movw $0, 0
4514
- ; KNL-NEXT: .LBB97_2 : # %middle.block
4569
+ ; KNL-NEXT: .LBB98_2 : # %middle.block
4515
4570
; KNL-NEXT: xorl %eax, %eax
4516
4571
; KNL-NEXT: vzeroupper
4517
4572
; KNL-NEXT: retq
@@ -4526,10 +4581,10 @@ define i32 @pr67287(<2 x i64> %broadcast.splatinsert25) {
4526
4581
; SKX-NEXT: kmovd %k0, %ecx
4527
4582
; SKX-NEXT: orb %al, %cl
4528
4583
; SKX-NEXT: testb $1, %cl
4529
- ; SKX-NEXT: je .LBB97_2
4584
+ ; SKX-NEXT: je .LBB98_2
4530
4585
; SKX-NEXT: # %bb.1:
4531
4586
; SKX-NEXT: movw $0, 0
4532
- ; SKX-NEXT: .LBB97_2 : # %middle.block
4587
+ ; SKX-NEXT: .LBB98_2 : # %middle.block
4533
4588
; SKX-NEXT: xorl %eax, %eax
4534
4589
; SKX-NEXT: retq
4535
4590
entry:
0 commit comments