mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 19:23:23 +01:00
[SelectionDAG] combine vextract (v1iX extract_subvector(vNiX, Idx))
into vextract(vNiX,Idx) when creating vextract with getNode(). This case appeared in AVX512 after fixing pr33349 in r310552. Differential revision: https://reviews.llvm.org/D36571 llvm-svn: 310828
This commit is contained in:
parent
e2fe4189b2
commit
81062b38f1
@ -4373,6 +4373,15 @@ SDValue SelectionDAG::getNode(unsigned Opcode, const SDLoc &DL, EVT VT,
|
||||
return getNode(ISD::EXTRACT_VECTOR_ELT, DL, VT, N1.getOperand(0), N2);
|
||||
}
|
||||
}
|
||||
|
||||
// EXTRACT_VECTOR_ELT of v1iX EXTRACT_SUBVECTOR could be formed
|
||||
// when vector types are scalarized and v1iX is legal.
|
||||
// vextract (v1iX extract_subvector(vNiX, Idx)) -> vextract(vNiX,Idx)
|
||||
if (N1.getOpcode() == ISD::EXTRACT_SUBVECTOR &&
|
||||
N1.getValueType().getVectorNumElements() == 1) {
|
||||
return getNode(ISD::EXTRACT_VECTOR_ELT, DL, VT, N1.getOperand(0),
|
||||
N1.getOperand(1));
|
||||
}
|
||||
break;
|
||||
case ISD::EXTRACT_ELEMENT:
|
||||
assert(N2C && (unsigned)N2C->getZExtValue() < 2 && "Bad EXTRACT_ELEMENT!");
|
||||
|
@ -43,8 +43,6 @@ target triple = "x86_64-unknown-linux-gnu"
|
||||
; SKX-NEXT: kshiftrw $2, %k0, %k1
|
||||
; SKX-NEXT: kshiftlw $15, %k1, %k2
|
||||
; SKX-NEXT: kshiftrw $15, %k2, %k2
|
||||
; SKX-NEXT: kshiftlw $15, %k2, %k2
|
||||
; SKX-NEXT: kshiftrw $15, %k2, %k2
|
||||
; SKX-NEXT: kmovd %k2, %eax
|
||||
; SKX-NEXT: testb $1, %al
|
||||
; SKX-NEXT: fld1
|
||||
@ -53,24 +51,18 @@ target triple = "x86_64-unknown-linux-gnu"
|
||||
; SKX-NEXT: fcmovne %st(2), %st(0)
|
||||
; SKX-NEXT: kshiftlw $14, %k1, %k1
|
||||
; SKX-NEXT: kshiftrw $15, %k1, %k1
|
||||
; SKX-NEXT: kshiftlw $15, %k1, %k1
|
||||
; SKX-NEXT: kshiftrw $15, %k1, %k1
|
||||
; SKX-NEXT: kmovd %k1, %eax
|
||||
; SKX-NEXT: testb $1, %al
|
||||
; SKX-NEXT: fld %st(1)
|
||||
; SKX-NEXT: fcmovne %st(3), %st(0)
|
||||
; SKX-NEXT: kshiftlw $15, %k0, %k1
|
||||
; SKX-NEXT: kshiftrw $15, %k1, %k1
|
||||
; SKX-NEXT: kshiftlw $15, %k1, %k1
|
||||
; SKX-NEXT: kshiftrw $15, %k1, %k1
|
||||
; SKX-NEXT: kmovd %k1, %eax
|
||||
; SKX-NEXT: testb $1, %al
|
||||
; SKX-NEXT: fld %st(2)
|
||||
; SKX-NEXT: fcmovne %st(4), %st(0)
|
||||
; SKX-NEXT: kshiftlw $14, %k0, %k0
|
||||
; SKX-NEXT: kshiftrw $15, %k0, %k0
|
||||
; SKX-NEXT: kshiftlw $15, %k0, %k0
|
||||
; SKX-NEXT: kshiftrw $15, %k0, %k0
|
||||
; SKX-NEXT: kmovd %k0, %eax
|
||||
; SKX-NEXT: testb $1, %al
|
||||
; SKX-NEXT: fxch %st(3)
|
||||
|
Loading…
Reference in New Issue
Block a user