mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 12:12:47 +01:00
[X86] Enable combineExtSetcc for vectors larger than 256 bits when we've disabled 512 bit vectors.
The compares are going to be type legalized to 256 bits so we might as well fold the extend.
This commit is contained in:
parent
59c870af32
commit
a316b89267
@ -44762,7 +44762,7 @@ static SDValue combineExtSetcc(SDNode *N, SelectionDAG &DAG,
|
||||
|
||||
// We can only do this if the vector size in 256 bits or less.
|
||||
unsigned Size = VT.getSizeInBits();
|
||||
if (Size > 256)
|
||||
if (Size > 256 && Subtarget.useAVX512Regs())
|
||||
return SDValue();
|
||||
|
||||
// Don't fold if the condition code can't be handled by PCMPEQ/PCMPGT since
|
||||
|
@ -1600,3 +1600,43 @@ define i32 @v64i1_inline_asm() "min-legal-vector-width"="256" {
|
||||
%4 = load i32, i32* %1, align 4
|
||||
ret i32 %4
|
||||
}
|
||||
|
||||
define void @cmp_v8i64_sext(<8 x i64>* %xptr, <8 x i64>* %yptr, <8 x i64>* %zptr) "min-legal-vector-width"="256" {
|
||||
; CHECK-LABEL: cmp_v8i64_sext:
|
||||
; CHECK: # %bb.0:
|
||||
; CHECK-NEXT: vmovdqa (%rsi), %ymm0
|
||||
; CHECK-NEXT: vmovdqa 32(%rsi), %ymm1
|
||||
; CHECK-NEXT: vpcmpgtq 32(%rdi), %ymm1, %ymm1
|
||||
; CHECK-NEXT: vpcmpgtq (%rdi), %ymm0, %ymm0
|
||||
; CHECK-NEXT: vmovdqa %ymm0, (%rdx)
|
||||
; CHECK-NEXT: vmovdqa %ymm1, 32(%rdx)
|
||||
; CHECK-NEXT: vzeroupper
|
||||
; CHECK-NEXT: retq
|
||||
%x = load <8 x i64>, <8 x i64>* %xptr
|
||||
%y = load <8 x i64>, <8 x i64>* %yptr
|
||||
%cmp = icmp slt <8 x i64> %x, %y
|
||||
%ext = sext <8 x i1> %cmp to <8 x i64>
|
||||
store <8 x i64> %ext, <8 x i64>* %zptr
|
||||
ret void
|
||||
}
|
||||
|
||||
define void @cmp_v8i64_zext(<8 x i64>* %xptr, <8 x i64>* %yptr, <8 x i64>* %zptr) "min-legal-vector-width"="256" {
|
||||
; CHECK-LABEL: cmp_v8i64_zext:
|
||||
; CHECK: # %bb.0:
|
||||
; CHECK-NEXT: vmovdqa (%rsi), %ymm0
|
||||
; CHECK-NEXT: vmovdqa 32(%rsi), %ymm1
|
||||
; CHECK-NEXT: vpcmpgtq 32(%rdi), %ymm1, %ymm1
|
||||
; CHECK-NEXT: vpcmpgtq (%rdi), %ymm0, %ymm0
|
||||
; CHECK-NEXT: vpsrlq $63, %ymm1, %ymm1
|
||||
; CHECK-NEXT: vpsrlq $63, %ymm0, %ymm0
|
||||
; CHECK-NEXT: vmovdqa %ymm0, (%rdx)
|
||||
; CHECK-NEXT: vmovdqa %ymm1, 32(%rdx)
|
||||
; CHECK-NEXT: vzeroupper
|
||||
; CHECK-NEXT: retq
|
||||
%x = load <8 x i64>, <8 x i64>* %xptr
|
||||
%y = load <8 x i64>, <8 x i64>* %yptr
|
||||
%cmp = icmp slt <8 x i64> %x, %y
|
||||
%ext = zext <8 x i1> %cmp to <8 x i64>
|
||||
store <8 x i64> %ext, <8 x i64>* %zptr
|
||||
ret void
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user