mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-08 21:32:39 +00:00
[x86] Rename X86ISD::VPERMILP to X86ISD::VPERMILPI (and the same for the
td pattern). Currently we only model the immediate operand variation of VPERMILPS and VPERMILPD, we should make that clear in the pseudos used. Will be adding support for the variable mask variant in my next commit. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@218282 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
cdc451b1ae
commit
4b365159bf
@ -3557,7 +3557,7 @@ static bool isTargetShuffle(unsigned Opcode) {
|
||||
case X86ISD::MOVSD:
|
||||
case X86ISD::UNPCKL:
|
||||
case X86ISD::UNPCKH:
|
||||
case X86ISD::VPERMILP:
|
||||
case X86ISD::VPERMILPI:
|
||||
case X86ISD::VPERM2X128:
|
||||
case X86ISD::VPERMI:
|
||||
return true;
|
||||
@ -3583,7 +3583,7 @@ static SDValue getTargetShuffleNode(unsigned Opc, SDLoc dl, EVT VT,
|
||||
case X86ISD::PSHUFD:
|
||||
case X86ISD::PSHUFHW:
|
||||
case X86ISD::PSHUFLW:
|
||||
case X86ISD::VPERMILP:
|
||||
case X86ISD::VPERMILPI:
|
||||
case X86ISD::VPERMI:
|
||||
return DAG.getNode(Opc, dl, VT, V1, DAG.getConstant(TargetMask, MVT::i8));
|
||||
}
|
||||
@ -5314,7 +5314,7 @@ static bool getTargetShuffleMask(SDNode *N, MVT VT,
|
||||
DecodePALIGNRMask(VT, cast<ConstantSDNode>(ImmN)->getZExtValue(), Mask);
|
||||
break;
|
||||
case X86ISD::PSHUFD:
|
||||
case X86ISD::VPERMILP:
|
||||
case X86ISD::VPERMILPI:
|
||||
ImmN = N->getOperand(N->getNumOperands()-1);
|
||||
DecodePSHUFMask(VT, cast<ConstantSDNode>(ImmN)->getZExtValue(), Mask);
|
||||
IsUnary = true;
|
||||
@ -7687,7 +7687,7 @@ static SDValue lowerV2F64VectorShuffle(SDValue Op, SDValue V1, SDValue V2,
|
||||
if (Subtarget->hasAVX()) {
|
||||
// If we have AVX, we can use VPERMILPS which will allow folding a load
|
||||
// into the shuffle.
|
||||
return DAG.getNode(X86ISD::VPERMILP, DL, MVT::v2f64, V1,
|
||||
return DAG.getNode(X86ISD::VPERMILPI, DL, MVT::v2f64, V1,
|
||||
DAG.getConstant(SHUFPDMask, MVT::i8));
|
||||
}
|
||||
|
||||
@ -7889,7 +7889,7 @@ static SDValue lowerV4F32VectorShuffle(SDValue Op, SDValue V1, SDValue V2,
|
||||
if (Subtarget->hasAVX()) {
|
||||
// If we have AVX, we can use VPERMILPS which will allow folding a load
|
||||
// into the shuffle.
|
||||
return DAG.getNode(X86ISD::VPERMILP, DL, MVT::v4f32, V1,
|
||||
return DAG.getNode(X86ISD::VPERMILPI, DL, MVT::v4f32, V1,
|
||||
getV4X86ShuffleImm8ForMask(Mask, DAG));
|
||||
}
|
||||
|
||||
@ -9266,7 +9266,7 @@ static SDValue lowerV4F64VectorShuffle(SDValue Op, SDValue V1, SDValue V2,
|
||||
// interleaved permutation.
|
||||
unsigned VPERMILPMask = (Mask[0] == 1) | ((Mask[1] == 1) << 1) |
|
||||
((Mask[2] == 3) << 2) | ((Mask[3] == 3) << 3);
|
||||
return DAG.getNode(X86ISD::VPERMILP, DL, MVT::v4f64, V1,
|
||||
return DAG.getNode(X86ISD::VPERMILPI, DL, MVT::v4f64, V1,
|
||||
DAG.getConstant(VPERMILPMask, MVT::i8));
|
||||
}
|
||||
|
||||
@ -9376,7 +9376,7 @@ static SDValue lowerV8F32VectorShuffle(SDValue Op, SDValue V1, SDValue V2,
|
||||
if (is128BitLaneRepeatedShuffleMask(MVT::v8f32, Mask)) {
|
||||
ArrayRef<int> LoMask = Mask.slice(0, 4);
|
||||
if (isSingleInputShuffleMask(Mask))
|
||||
return DAG.getNode(X86ISD::VPERMILP, DL, MVT::v8f32, V1,
|
||||
return DAG.getNode(X86ISD::VPERMILPI, DL, MVT::v8f32, V1,
|
||||
getV4X86ShuffleImm8ForMask(LoMask, DAG));
|
||||
|
||||
// Use dedicated unpack instructions for masks that match their pattern.
|
||||
@ -9407,10 +9407,10 @@ static SDValue lowerV8F32VectorShuffle(SDValue Op, SDValue V1, SDValue V2,
|
||||
M -= 4;
|
||||
SDValue Lo = V1, Hi = V1;
|
||||
if (!isNoopShuffleMask(LoMask))
|
||||
Lo = DAG.getNode(X86ISD::VPERMILP, DL, MVT::v8f32, Lo,
|
||||
Lo = DAG.getNode(X86ISD::VPERMILPI, DL, MVT::v8f32, Lo,
|
||||
getV4X86ShuffleImm8ForMask(LoMask, DAG));
|
||||
if (!isNoopShuffleMask(HiMask))
|
||||
Hi = DAG.getNode(X86ISD::VPERMILP, DL, MVT::v8f32, Hi,
|
||||
Hi = DAG.getNode(X86ISD::VPERMILPI, DL, MVT::v8f32, Hi,
|
||||
getV4X86ShuffleImm8ForMask(HiMask, DAG));
|
||||
unsigned BlendMask = 1 << 4 | 1 << 5 | 1 << 6 | 1 << 7;
|
||||
return DAG.getNode(X86ISD::BLENDI, DL, MVT::v8f32, Lo, Hi,
|
||||
@ -11021,7 +11021,7 @@ X86TargetLowering::LowerVECTOR_SHUFFLE(SDValue Op, SelectionDAG &DAG) const {
|
||||
return getTargetShuffleNode(X86ISD::PSHUFD, dl, VT, V1, TargetMask, DAG);
|
||||
|
||||
if (HasFp256 && (VT == MVT::v4f32 || VT == MVT::v2f64))
|
||||
return getTargetShuffleNode(X86ISD::VPERMILP, dl, VT, V1, TargetMask,
|
||||
return getTargetShuffleNode(X86ISD::VPERMILPI, dl, VT, V1, TargetMask,
|
||||
DAG);
|
||||
|
||||
return getTargetShuffleNode(X86ISD::SHUFP, dl, VT, V1, V1,
|
||||
@ -11203,7 +11203,7 @@ X86TargetLowering::LowerVECTOR_SHUFFLE(SDValue Op, SelectionDAG &DAG) const {
|
||||
if ((HasInt256 && VT == MVT::v8i32) || VT == MVT::v16i32)
|
||||
return getTargetShuffleNode(X86ISD::PSHUFD, dl, VT, V1,
|
||||
getShuffleSHUFImmediate(SVOp), DAG);
|
||||
return getTargetShuffleNode(X86ISD::VPERMILP, dl, VT, V1,
|
||||
return getTargetShuffleNode(X86ISD::VPERMILPI, dl, VT, V1,
|
||||
getShuffleSHUFImmediate(SVOp), DAG);
|
||||
}
|
||||
|
||||
@ -18203,7 +18203,7 @@ const char *X86TargetLowering::getTargetNodeName(unsigned Opcode) const {
|
||||
case X86ISD::VBROADCAST: return "X86ISD::VBROADCAST";
|
||||
case X86ISD::VBROADCASTM: return "X86ISD::VBROADCASTM";
|
||||
case X86ISD::VEXTRACT: return "X86ISD::VEXTRACT";
|
||||
case X86ISD::VPERMILP: return "X86ISD::VPERMILP";
|
||||
case X86ISD::VPERMILPI: return "X86ISD::VPERMILPI";
|
||||
case X86ISD::VPERM2X128: return "X86ISD::VPERM2X128";
|
||||
case X86ISD::VPERMV: return "X86ISD::VPERMV";
|
||||
case X86ISD::VPERMV3: return "X86ISD::VPERMV3";
|
||||
@ -23889,7 +23889,7 @@ SDValue X86TargetLowering::PerformDAGCombine(SDNode *N,
|
||||
case X86ISD::PSHUFLW:
|
||||
case X86ISD::MOVSS:
|
||||
case X86ISD::MOVSD:
|
||||
case X86ISD::VPERMILP:
|
||||
case X86ISD::VPERMILPI:
|
||||
case X86ISD::VPERM2X128:
|
||||
case ISD::VECTOR_SHUFFLE: return PerformShuffleCombine(N, DAG, DCI,Subtarget);
|
||||
case ISD::FMA: return PerformFMACombine(N, DAG, Subtarget);
|
||||
|
@ -343,7 +343,7 @@ namespace llvm {
|
||||
MOVSS,
|
||||
UNPCKL,
|
||||
UNPCKH,
|
||||
VPERMILP,
|
||||
VPERMILPI,
|
||||
VPERMV,
|
||||
VPERMV3,
|
||||
VPERMIV3,
|
||||
|
@ -2843,17 +2843,17 @@ defm VPSHUFDZ : avx512_pshuf_imm<0x70, "vpshufd", VR512, X86PShufd, memopv16i32,
|
||||
i512mem, v16i32>, PD, EVEX_V512, EVEX_CD8<32, CD8VF>;
|
||||
|
||||
let ExeDomain = SSEPackedSingle in
|
||||
defm VPERMILPSZ : avx512_pshuf_imm<0x04, "vpermilps", VR512, X86VPermilp,
|
||||
defm VPERMILPSZ : avx512_pshuf_imm<0x04, "vpermilps", VR512, X86VPermilpi,
|
||||
memopv16f32, i512mem, v16f32>, TAPD, EVEX_V512,
|
||||
EVEX_CD8<32, CD8VF>;
|
||||
let ExeDomain = SSEPackedDouble in
|
||||
defm VPERMILPDZ : avx512_pshuf_imm<0x05, "vpermilpd", VR512, X86VPermilp,
|
||||
defm VPERMILPDZ : avx512_pshuf_imm<0x05, "vpermilpd", VR512, X86VPermilpi,
|
||||
memopv8f64, i512mem, v8f64>, TAPD, EVEX_V512,
|
||||
VEX_W, EVEX_CD8<32, CD8VF>;
|
||||
|
||||
def : Pat<(v16i32 (X86VPermilp VR512:$src1, (i8 imm:$imm))),
|
||||
def : Pat<(v16i32 (X86VPermilpi VR512:$src1, (i8 imm:$imm))),
|
||||
(VPERMILPSZri VR512:$src1, imm:$imm)>;
|
||||
def : Pat<(v8i64 (X86VPermilp VR512:$src1, (i8 imm:$imm))),
|
||||
def : Pat<(v8i64 (X86VPermilpi VR512:$src1, (i8 imm:$imm))),
|
||||
(VPERMILPDZri VR512:$src1, imm:$imm)>;
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
@ -232,10 +232,10 @@ def X86Packus : SDNode<"X86ISD::PACKUS", SDTPack>;
|
||||
def X86Unpckl : SDNode<"X86ISD::UNPCKL", SDTShuff2Op>;
|
||||
def X86Unpckh : SDNode<"X86ISD::UNPCKH", SDTShuff2Op>;
|
||||
|
||||
def X86VPermilp : SDNode<"X86ISD::VPERMILP", SDTShuff2OpI>;
|
||||
def X86VPermv : SDNode<"X86ISD::VPERMV", SDTShuff2Op>;
|
||||
def X86VPermi : SDNode<"X86ISD::VPERMI", SDTShuff2OpI>;
|
||||
def X86VPermv3 : SDNode<"X86ISD::VPERMV3", SDTShuff3Op>;
|
||||
def X86VPermilpi : SDNode<"X86ISD::VPERMILPI", SDTShuff2OpI>;
|
||||
def X86VPermv : SDNode<"X86ISD::VPERMV", SDTShuff2Op>;
|
||||
def X86VPermi : SDNode<"X86ISD::VPERMI", SDTShuff2OpI>;
|
||||
def X86VPermv3 : SDNode<"X86ISD::VPERMV3", SDTShuff3Op>;
|
||||
def X86VPermiv3 : SDNode<"X86ISD::VPERMIV3", SDTShuff3Op>;
|
||||
|
||||
def X86VPerm2x128 : SDNode<"X86ISD::VPERM2X128", SDTShuff3OpI>;
|
||||
|
@ -8394,13 +8394,13 @@ multiclass avx_permil<bits<8> opc_rm, bits<8> opc_rmi, string OpcodeStr,
|
||||
def ri : AVXAIi8<opc_rmi, MRMSrcReg, (outs RC:$dst),
|
||||
(ins RC:$src1, i8imm:$src2),
|
||||
!strconcat(OpcodeStr, "\t{$src2, $src1, $dst|$dst, $src1, $src2}"),
|
||||
[(set RC:$dst, (vt (X86VPermilp RC:$src1, (i8 imm:$src2))))]>, VEX,
|
||||
[(set RC:$dst, (vt (X86VPermilpi RC:$src1, (i8 imm:$src2))))]>, VEX,
|
||||
Sched<[WriteFShuffle]>;
|
||||
def mi : AVXAIi8<opc_rmi, MRMSrcMem, (outs RC:$dst),
|
||||
(ins x86memop_f:$src1, i8imm:$src2),
|
||||
!strconcat(OpcodeStr, "\t{$src2, $src1, $dst|$dst, $src1, $src2}"),
|
||||
[(set RC:$dst,
|
||||
(vt (X86VPermilp (memop addr:$src1), (i8 imm:$src2))))]>, VEX,
|
||||
(vt (X86VPermilpi (memop addr:$src1), (i8 imm:$src2))))]>, VEX,
|
||||
Sched<[WriteFShuffleLd]>;
|
||||
}
|
||||
|
||||
@ -8418,19 +8418,19 @@ let ExeDomain = SSEPackedDouble in {
|
||||
}
|
||||
|
||||
let Predicates = [HasAVX] in {
|
||||
def : Pat<(v8i32 (X86VPermilp VR256:$src1, (i8 imm:$imm))),
|
||||
def : Pat<(v8i32 (X86VPermilpi VR256:$src1, (i8 imm:$imm))),
|
||||
(VPERMILPSYri VR256:$src1, imm:$imm)>;
|
||||
def : Pat<(v4i64 (X86VPermilp VR256:$src1, (i8 imm:$imm))),
|
||||
def : Pat<(v4i64 (X86VPermilpi VR256:$src1, (i8 imm:$imm))),
|
||||
(VPERMILPDYri VR256:$src1, imm:$imm)>;
|
||||
def : Pat<(v8i32 (X86VPermilp (bc_v8i32 (loadv4i64 addr:$src1)),
|
||||
def : Pat<(v8i32 (X86VPermilpi (bc_v8i32 (loadv4i64 addr:$src1)),
|
||||
(i8 imm:$imm))),
|
||||
(VPERMILPSYmi addr:$src1, imm:$imm)>;
|
||||
def : Pat<(v4i64 (X86VPermilp (loadv4i64 addr:$src1), (i8 imm:$imm))),
|
||||
def : Pat<(v4i64 (X86VPermilpi (loadv4i64 addr:$src1), (i8 imm:$imm))),
|
||||
(VPERMILPDYmi addr:$src1, imm:$imm)>;
|
||||
|
||||
def : Pat<(v2i64 (X86VPermilp VR128:$src1, (i8 imm:$imm))),
|
||||
def : Pat<(v2i64 (X86VPermilpi VR128:$src1, (i8 imm:$imm))),
|
||||
(VPERMILPDri VR128:$src1, imm:$imm)>;
|
||||
def : Pat<(v2i64 (X86VPermilp (loadv2i64 addr:$src1), (i8 imm:$imm))),
|
||||
def : Pat<(v2i64 (X86VPermilpi (loadv2i64 addr:$src1), (i8 imm:$imm))),
|
||||
(VPERMILPDmi addr:$src1, imm:$imm)>;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user