diff options
author | Igor Breger <igor.breger@intel.com> | 2016-05-24 11:06:22 +0000 |
---|---|---|
committer | Igor Breger <igor.breger@intel.com> | 2016-05-24 11:06:22 +0000 |
commit | 23c20906064ce4e0150f8a5bcf8aaf876d43a459 (patch) | |
tree | 408916cdcf7695d23438d2803f4e3375eb71330e /llvm/lib | |
parent | f059dd4f76d57bcaf4389dd5b776eca4c07d7668 (diff) | |
download | bcm5719-llvm-23c20906064ce4e0150f8a5bcf8aaf876d43a459.tar.gz bcm5719-llvm-23c20906064ce4e0150f8a5bcf8aaf876d43a459.zip |
[llvm][AVX512][intrinsics] Fix vperm{b|w|d|q|ps|pd} intrinsics. Index is second argument to buildin function but it is first instruction operand.
Differential Revision: http://reviews.llvm.org/D20515
llvm-svn: 270548
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Target/X86/X86ISelLowering.cpp | 10 | ||||
-rw-r--r-- | llvm/lib/Target/X86/X86IntrinsicsInfo.h | 44 |
2 files changed, 39 insertions, 15 deletions
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp index 844614290ad..5dd79ef311e 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -17249,6 +17249,16 @@ static SDValue LowerINTRINSIC_WO_CHAIN(SDValue Op, const X86Subtarget &Subtarget Src1, Src2, Src3), Mask, PassThru, Subtarget, DAG); } + case VPERM_2OP_MASK : { + SDValue Src1 = Op.getOperand(1); + SDValue Src2 = Op.getOperand(2); + SDValue PassThru = Op.getOperand(3); + SDValue Mask = Op.getOperand(4); + + // Swap Src1 and Src2 in the node creation + return getVectorMaskingNode(DAG.getNode(IntrData->Opc0, dl, VT,Src2, Src1), + Mask, PassThru, Subtarget, DAG); + } case VPERM_3OP_MASKZ: case VPERM_3OP_MASK:{ // Src2 is the PassThru diff --git a/llvm/lib/Target/X86/X86IntrinsicsInfo.h b/llvm/lib/Target/X86/X86IntrinsicsInfo.h index f9e27ce6f0c..93d1e94d1ca 100644 --- a/llvm/lib/Target/X86/X86IntrinsicsInfo.h +++ b/llvm/lib/Target/X86/X86IntrinsicsInfo.h @@ -29,7 +29,7 @@ enum IntrinsicType { INTR_TYPE_3OP_MASK, INTR_TYPE_3OP_MASK_RM, INTR_TYPE_3OP_IMM8_MASK, FMA_OP_MASK, FMA_OP_MASKZ, FMA_OP_MASK3, FMA_OP_SCALAR_MASK, FMA_OP_SCALAR_MASKZ, FMA_OP_SCALAR_MASK3, - VPERM_3OP_MASK, VPERM_3OP_MASKZ, INTR_TYPE_SCALAR_MASK, + VPERM_2OP_MASK, VPERM_3OP_MASK, VPERM_3OP_MASKZ, INTR_TYPE_SCALAR_MASK, INTR_TYPE_SCALAR_MASK_RM, INTR_TYPE_3OP_SCALAR_MASK_RM, COMPRESS_EXPAND_IN_REG, COMPRESS_TO_MEM, BRCST_SUBVEC_TO_VEC, TRUNCATE_TO_MEM_VI8, TRUNCATE_TO_MEM_VI16, TRUNCATE_TO_MEM_VI32, @@ -1099,20 +1099,34 @@ static const IntrinsicData IntrinsicsWithoutChain[] = { X86_INTRINSIC_DATA(avx512_mask_perm_df_512, INTR_TYPE_2OP_IMM8_MASK, X86ISD::VPERMI, 0), X86_INTRINSIC_DATA(avx512_mask_perm_di_256, INTR_TYPE_2OP_IMM8_MASK, X86ISD::VPERMI, 0), X86_INTRINSIC_DATA(avx512_mask_perm_di_512, INTR_TYPE_2OP_IMM8_MASK, X86ISD::VPERMI, 0), - X86_INTRINSIC_DATA(avx512_mask_permvar_df_256, INTR_TYPE_2OP_MASK, X86ISD::VPERMV, 0), - X86_INTRINSIC_DATA(avx512_mask_permvar_df_512, INTR_TYPE_2OP_MASK, X86ISD::VPERMV, 0), - X86_INTRINSIC_DATA(avx512_mask_permvar_di_256, INTR_TYPE_2OP_MASK, X86ISD::VPERMV, 0), - X86_INTRINSIC_DATA(avx512_mask_permvar_di_512, INTR_TYPE_2OP_MASK, X86ISD::VPERMV, 0), - X86_INTRINSIC_DATA(avx512_mask_permvar_hi_128, INTR_TYPE_2OP_MASK, X86ISD::VPERMV, 0), - X86_INTRINSIC_DATA(avx512_mask_permvar_hi_256, INTR_TYPE_2OP_MASK, X86ISD::VPERMV, 0), - X86_INTRINSIC_DATA(avx512_mask_permvar_hi_512, INTR_TYPE_2OP_MASK, X86ISD::VPERMV, 0), - X86_INTRINSIC_DATA(avx512_mask_permvar_qi_128, INTR_TYPE_2OP_MASK, X86ISD::VPERMV, 0), - X86_INTRINSIC_DATA(avx512_mask_permvar_qi_256, INTR_TYPE_2OP_MASK, X86ISD::VPERMV, 0), - X86_INTRINSIC_DATA(avx512_mask_permvar_qi_512, INTR_TYPE_2OP_MASK, X86ISD::VPERMV, 0), - X86_INTRINSIC_DATA(avx512_mask_permvar_sf_256, INTR_TYPE_2OP_MASK, X86ISD::VPERMV, 0), - X86_INTRINSIC_DATA(avx512_mask_permvar_sf_512, INTR_TYPE_2OP_MASK, X86ISD::VPERMV, 0), - X86_INTRINSIC_DATA(avx512_mask_permvar_si_256, INTR_TYPE_2OP_MASK, X86ISD::VPERMV, 0), - X86_INTRINSIC_DATA(avx512_mask_permvar_si_512, INTR_TYPE_2OP_MASK, X86ISD::VPERMV, 0), + X86_INTRINSIC_DATA(avx512_mask_permvar_df_256, VPERM_2OP_MASK, + X86ISD::VPERMV, 0), + X86_INTRINSIC_DATA(avx512_mask_permvar_df_512, VPERM_2OP_MASK, + X86ISD::VPERMV, 0), + X86_INTRINSIC_DATA(avx512_mask_permvar_di_256, VPERM_2OP_MASK, + X86ISD::VPERMV, 0), + X86_INTRINSIC_DATA(avx512_mask_permvar_di_512, VPERM_2OP_MASK, + X86ISD::VPERMV, 0), + X86_INTRINSIC_DATA(avx512_mask_permvar_hi_128, VPERM_2OP_MASK, + X86ISD::VPERMV, 0), + X86_INTRINSIC_DATA(avx512_mask_permvar_hi_256, VPERM_2OP_MASK, + X86ISD::VPERMV, 0), + X86_INTRINSIC_DATA(avx512_mask_permvar_hi_512, VPERM_2OP_MASK, + X86ISD::VPERMV, 0), + X86_INTRINSIC_DATA(avx512_mask_permvar_qi_128, VPERM_2OP_MASK, + X86ISD::VPERMV, 0), + X86_INTRINSIC_DATA(avx512_mask_permvar_qi_256, VPERM_2OP_MASK, + X86ISD::VPERMV, 0), + X86_INTRINSIC_DATA(avx512_mask_permvar_qi_512, VPERM_2OP_MASK, + X86ISD::VPERMV, 0), + X86_INTRINSIC_DATA(avx512_mask_permvar_sf_256, VPERM_2OP_MASK, + X86ISD::VPERMV, 0), + X86_INTRINSIC_DATA(avx512_mask_permvar_sf_512, VPERM_2OP_MASK, + X86ISD::VPERMV, 0), + X86_INTRINSIC_DATA(avx512_mask_permvar_si_256, VPERM_2OP_MASK, + X86ISD::VPERMV, 0), + X86_INTRINSIC_DATA(avx512_mask_permvar_si_512, VPERM_2OP_MASK, + X86ISD::VPERMV, 0), X86_INTRINSIC_DATA(avx512_mask_pmaddubs_w_128, INTR_TYPE_2OP_MASK, X86ISD::VPMADDUBSW, 0), X86_INTRINSIC_DATA(avx512_mask_pmaddubs_w_256, INTR_TYPE_2OP_MASK, |