// AVX2 special nodes
// masked gather of AVX2 where mask elements are i32
-def avx2_x86_masked_gather_32 : SDNode<"X86ISD::MGATHER",
+def avx2_x86_masked_gather : SDNode<"X86ISD::MGATHER",
SDTypeProfile<2, 3, [
SDTCisVec<0>, SDTCisVec<1>, SDTCisSameAs<0, 2>, SDTCisSameAs<1, 3>,
- SDTCisPtrTy<4>, SDTCVecEltisVT<1, i32>, SDTCisSameNumEltsAs<0, 1>]>,
+ SDTCisPtrTy<4>, SDTCisInt<1>, SDTCisSameSizeAs<0, 1>,
+ SDTCisSameNumEltsAs<0, 1>]>,
[SDNPHasChain, SDNPMayLoad, SDNPMemOperand]>;
-def avx2_masked_gather_32 : SDNode<"ISD::MGATHER",
+def avx2_masked_gather : SDNode<"ISD::MGATHER",
SDTypeProfile<2, 3, [
SDTCisVec<0>, SDTCisVec<1>, SDTCisSameAs<0, 2>, SDTCisSameAs<1, 3>,
- SDTCisPtrTy<4>, SDTCVecEltisVT<1, i32>, SDTCisSameNumEltsAs<0, 1>]>,
- [SDNPHasChain, SDNPMayLoad, SDNPMemOperand]>;
-
-// masked gather of AVX2 where mask elements are i64
-def avx2_masked_gather_64 : SDNode<"ISD::MGATHER",
- SDTypeProfile<2, 3, [
- SDTCisVec<0>, SDTCisVec<1>, SDTCisSameAs<0, 2>, SDTCisSameAs<1, 3>,
- SDTCisPtrTy<4>, SDTCVecEltisVT<1, i64>, SDTCisSameNumEltsAs<0, 1>]>,
+ SDTCisPtrTy<4>, SDTCisInt<1>, SDTCisSameSizeAs<0, 1>,
+ SDTCisSameNumEltsAs<0, 1>]>,
[SDNPHasChain, SDNPMayLoad, SDNPMemOperand]>;
// dword gathers
def avx2_mvpgatherdd_ps_xmm : PatFrag<(ops node:$src1, node:$src2, node:$src3),
- (avx2_masked_gather_32 node:$src1, node:$src2, node:$src3) , [{
+ (avx2_masked_gather node:$src1, node:$src2, node:$src3) , [{
MaskedGatherSDNode *Mgt = cast<MaskedGatherSDNode>(N);
return Mgt->getIndex().getValueType() == MVT::v4i32;
}]>;
def avx2_mvpgatherqd_ps_xmm : PatFrag<(ops node:$src1, node:$src2, node:$src3),
- (avx2_x86_masked_gather_32 node:$src1, node:$src2, node:$src3) , [{
+ (avx2_x86_masked_gather node:$src1, node:$src2, node:$src3) , [{
X86MaskedGatherSDNode *Mgt = cast<X86MaskedGatherSDNode>(N);
return Mgt->getIndex().getValueType() == MVT::v2i64;
}]>;
def avx2_mvpgatherdd_ps_ymm : PatFrag<(ops node:$src1, node:$src2, node:$src3),
- (avx2_masked_gather_32 node:$src1, node:$src2, node:$src3) , [{
+ (avx2_masked_gather node:$src1, node:$src2, node:$src3) , [{
MaskedGatherSDNode *Mgt = cast<MaskedGatherSDNode>(N);
return Mgt->getIndex().getValueType() == MVT::v8i32;
}]>;
def avx2_mvpgatherqd_ps_ymm : PatFrag<(ops node:$src1, node:$src2, node:$src3),
- (avx2_masked_gather_32 node:$src1, node:$src2, node:$src3) , [{
+ (avx2_masked_gather node:$src1, node:$src2, node:$src3) , [{
MaskedGatherSDNode *Mgt = cast<MaskedGatherSDNode>(N);
return Mgt->getIndex().getValueType() == MVT::v4i64;
}]>;
// qwords
def avx2_mvpgatherdq_pd_xmm : PatFrag<(ops node:$src1, node:$src2, node:$src3),
- (avx2_masked_gather_64 node:$src1, node:$src2, node:$src3) , [{
+ (avx2_masked_gather node:$src1, node:$src2, node:$src3) , [{
MaskedGatherSDNode *Mgt = cast<MaskedGatherSDNode>(N);
return Mgt->getIndex().getValueType() == MVT::v2i32;
}]>;
def avx2_mvpgatherqq_pd_xmm : PatFrag<(ops node:$src1, node:$src2, node:$src3),
- (avx2_masked_gather_64 node:$src1, node:$src2, node:$src3) , [{
+ (avx2_masked_gather node:$src1, node:$src2, node:$src3) , [{
MaskedGatherSDNode *Mgt = dyn_cast<MaskedGatherSDNode>(N);
return Mgt->getIndex().getValueType() == MVT::v2i64 &&
Mgt->getMemoryVT().is128BitVector();
}]>;
def avx2_mvpgatherdq_pd_ymm : PatFrag<(ops node:$src1, node:$src2, node:$src3),
- (avx2_masked_gather_64 node:$src1, node:$src2, node:$src3) , [{
+ (avx2_masked_gather node:$src1, node:$src2, node:$src3) , [{
MaskedGatherSDNode *Mgt = cast<MaskedGatherSDNode>(N);
return Mgt->getIndex().getValueType() == MVT::v4i32;
}]>;
def avx2_mvpgatherqq_pd_ymm : PatFrag<(ops node:$src1, node:$src2, node:$src3),
- (avx2_masked_gather_64 node:$src1, node:$src2, node:$src3) , [{
+ (avx2_masked_gather node:$src1, node:$src2, node:$src3) , [{
MaskedGatherSDNode *Mgt = cast<MaskedGatherSDNode>(N);
return Mgt->getIndex().getValueType() == MVT::v4i64;
}]>;