mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 12:12:47 +01:00
[X86][XOP] Use default AVX2 lowering for v4i64 ashr by splat constants
XOP shifts only support 128-bit vectors, so we were ending up with less optimal codegen requiring constants llvm-svn: 308430
This commit is contained in:
parent
816413b87e
commit
1871c33bf5
@ -22022,8 +22022,9 @@ static SDValue LowerScalarImmediateShift(SDValue Op, SelectionDAG &DAG,
|
||||
return getTargetVShiftByConstNode(X86Opc, dl, VT, R, ShiftAmt, DAG);
|
||||
|
||||
// i64 SRA needs to be performed as partial shifts.
|
||||
if ((VT == MVT::v2i64 || (Subtarget.hasInt256() && VT == MVT::v4i64)) &&
|
||||
Op.getOpcode() == ISD::SRA && !Subtarget.hasXOP())
|
||||
if (((!Subtarget.hasXOP() && VT == MVT::v2i64) ||
|
||||
(Subtarget.hasInt256() && VT == MVT::v4i64)) &&
|
||||
Op.getOpcode() == ISD::SRA)
|
||||
return ArithmeticShiftRight64(ShiftAmt);
|
||||
|
||||
if (VT == MVT::v16i8 ||
|
||||
|
@ -1699,10 +1699,9 @@ define <4 x i64> @splatconstant_shift_v4i64(<4 x i64> %a) nounwind {
|
||||
;
|
||||
; XOPAVX2-LABEL: splatconstant_shift_v4i64:
|
||||
; XOPAVX2: # BB#0:
|
||||
; XOPAVX2-NEXT: vpsrad $7, %ymm0, %ymm1
|
||||
; XOPAVX2-NEXT: vpsrlq $7, %ymm0, %ymm0
|
||||
; XOPAVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [72057594037927936,72057594037927936,72057594037927936,72057594037927936]
|
||||
; XOPAVX2-NEXT: vpxor %ymm1, %ymm0, %ymm0
|
||||
; XOPAVX2-NEXT: vpsubq %ymm1, %ymm0, %ymm0
|
||||
; XOPAVX2-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7]
|
||||
; XOPAVX2-NEXT: retq
|
||||
;
|
||||
; AVX512-LABEL: splatconstant_shift_v4i64:
|
||||
|
Loading…
Reference in New Issue
Block a user