@@ -2675,11 +2675,23 @@ X86InstrInfo::X86InstrInfo(X86Subtarget &STI)
2675
2675
{ X86::VPANDQZrrk, X86::VPANDQZrmk, 0 },
2676
2676
{ X86::VPERMBZrrk, X86::VPERMBZrmk, 0 },
2677
2677
{ X86::VPERMDZrrk, X86::VPERMDZrmk, 0 },
2678
+ { X86::VPERMI2Brrk, X86::VPERMI2Brmk, 0 },
2679
+ { X86::VPERMI2Drrk, X86::VPERMI2Drmk, 0 },
2680
+ { X86::VPERMI2PSrrk, X86::VPERMI2PSrmk, 0 },
2681
+ { X86::VPERMI2PDrrk, X86::VPERMI2PDrmk, 0 },
2682
+ { X86::VPERMI2Qrrk, X86::VPERMI2Qrmk, 0 },
2683
+ { X86::VPERMI2Wrrk, X86::VPERMI2Wrmk, 0 },
2678
2684
{ X86::VPERMILPDZrrk, X86::VPERMILPDZrmk, 0 },
2679
2685
{ X86::VPERMILPSZrrk, X86::VPERMILPSZrmk, 0 },
2680
2686
{ X86::VPERMPDZrrk, X86::VPERMPDZrmk, 0 },
2681
2687
{ X86::VPERMPSZrrk, X86::VPERMPSZrmk, 0 },
2682
2688
{ X86::VPERMQZrrk, X86::VPERMQZrmk, 0 },
2689
+ { X86::VPERMT2Brrk, X86::VPERMT2Brmk, 0 },
2690
+ { X86::VPERMT2Drrk, X86::VPERMT2Drmk, 0 },
2691
+ { X86::VPERMT2PSrrk, X86::VPERMT2PSrmk, 0 },
2692
+ { X86::VPERMT2PDrrk, X86::VPERMT2PDrmk, 0 },
2693
+ { X86::VPERMT2Qrrk, X86::VPERMT2Qrmk, 0 },
2694
+ { X86::VPERMT2Wrrk, X86::VPERMT2Wrmk, 0 },
2683
2695
{ X86::VPERMWZrrk, X86::VPERMWZrmk, 0 },
2684
2696
{ X86::VPMADDUBSWZrrk, X86::VPMADDUBSWZrmk, 0 },
2685
2697
{ X86::VPMADDWDZrrk, X86::VPMADDWDZrmk, 0 },
@@ -2694,9 +2706,7 @@ X86InstrInfo::X86InstrInfo(X86Subtarget &STI)
2694
2706
{ X86::VPSUBUSBZrrk, X86::VPSUBUSBZrmk, 0 },
2695
2707
{ X86::VPSUBUSWZrrk, X86::VPSUBUSWZrmk, 0 },
2696
2708
{ X86::VPTERNLOGDZrrik, X86::VPTERNLOGDZrmik, 0 },
2697
- { X86::VPTERNLOGDZrrikz, X86::VPTERNLOGDZrmikz, 0 },
2698
2709
{ X86::VPTERNLOGQZrrik, X86::VPTERNLOGQZrmik, 0 },
2699
- { X86::VPTERNLOGQZrrikz, X86::VPTERNLOGQZrmikz, 0 },
2700
2710
{ X86::VPUNPCKHBWZrrk, X86::VPUNPCKHBWZrmk, 0 },
2701
2711
{ X86::VPUNPCKHDQZrrk, X86::VPUNPCKHDQZrmk, 0 },
2702
2712
{ X86::VPUNPCKHQDQZrrk, X86::VPUNPCKHQDQZrmk, 0 },
@@ -2755,11 +2765,23 @@ X86InstrInfo::X86InstrInfo(X86Subtarget &STI)
2755
2765
{ X86::VPANDQZ256rrk, X86::VPANDQZ256rmk, 0 },
2756
2766
{ X86::VPERMBZ256rrk, X86::VPERMBZ256rmk, 0 },
2757
2767
{ X86::VPERMDZ256rrk, X86::VPERMDZ256rmk, 0 },
2768
+ { X86::VPERMI2B256rrk, X86::VPERMI2B256rmk, 0 },
2769
+ { X86::VPERMI2D256rrk, X86::VPERMI2D256rmk, 0 },
2770
+ { X86::VPERMI2PD256rrk, X86::VPERMI2PD256rmk, 0 },
2771
+ { X86::VPERMI2PS256rrk, X86::VPERMI2PS256rmk, 0 },
2772
+ { X86::VPERMI2Q256rrk, X86::VPERMI2Q256rmk, 0 },
2773
+ { X86::VPERMI2W256rrk, X86::VPERMI2W256rmk, 0 },
2758
2774
{ X86::VPERMILPDZ256rrk, X86::VPERMILPDZ256rmk, 0 },
2759
2775
{ X86::VPERMILPSZ256rrk, X86::VPERMILPSZ256rmk, 0 },
2760
2776
{ X86::VPERMPDZ256rrk, X86::VPERMPDZ256rmk, 0 },
2761
2777
{ X86::VPERMPSZ256rrk, X86::VPERMPSZ256rmk, 0 },
2762
2778
{ X86::VPERMQZ256rrk, X86::VPERMQZ256rmk, 0 },
2779
+ { X86::VPERMT2B256rrk, X86::VPERMT2B256rmk, 0 },
2780
+ { X86::VPERMT2D256rrk, X86::VPERMT2D256rmk, 0 },
2781
+ { X86::VPERMT2PD256rrk, X86::VPERMT2PD256rmk, 0 },
2782
+ { X86::VPERMT2PS256rrk, X86::VPERMT2PS256rmk, 0 },
2783
+ { X86::VPERMT2Q256rrk, X86::VPERMT2Q256rmk, 0 },
2784
+ { X86::VPERMT2W256rrk, X86::VPERMT2W256rmk, 0 },
2763
2785
{ X86::VPERMWZ256rrk, X86::VPERMWZ256rmk, 0 },
2764
2786
{ X86::VPMADDUBSWZ256rrk, X86::VPMADDUBSWZ256rmk, 0 },
2765
2787
{ X86::VPMADDWDZ256rrk, X86::VPMADDWDZ256rmk, 0 },
@@ -2775,9 +2797,7 @@ X86InstrInfo::X86InstrInfo(X86Subtarget &STI)
2775
2797
{ X86::VPSUBUSWZ256rrk, X86::VPSUBUSWZ256rmk, 0 },
2776
2798
{ X86::VPSUBWZ256rrk, X86::VPSUBWZ256rmk, 0 },
2777
2799
{ X86::VPTERNLOGDZ256rrik, X86::VPTERNLOGDZ256rmik, 0 },
2778
- { X86::VPTERNLOGDZ256rrikz,X86::VPTERNLOGDZ256rmikz, 0 },
2779
2800
{ X86::VPTERNLOGQZ256rrik, X86::VPTERNLOGQZ256rmik, 0 },
2780
- { X86::VPTERNLOGQZ256rrikz,X86::VPTERNLOGQZ256rmikz, 0 },
2781
2801
{ X86::VPUNPCKHBWZ256rrk, X86::VPUNPCKHBWZ256rmk, 0 },
2782
2802
{ X86::VPUNPCKHDQZ256rrk, X86::VPUNPCKHDQZ256rmk, 0 },
2783
2803
{ X86::VPUNPCKHQDQZ256rrk, X86::VPUNPCKHQDQZ256rmk, 0 },
@@ -2831,8 +2851,20 @@ X86InstrInfo::X86InstrInfo(X86Subtarget &STI)
2831
2851
{ X86::VPANDNQZ128rrk, X86::VPANDNQZ128rmk, 0 },
2832
2852
{ X86::VPANDQZ128rrk, X86::VPANDQZ128rmk, 0 },
2833
2853
{ X86::VPERMBZ128rrk, X86::VPERMBZ128rmk, 0 },
2854
+ { X86::VPERMI2B128rrk, X86::VPERMI2B128rmk, 0 },
2855
+ { X86::VPERMI2D128rrk, X86::VPERMI2D128rmk, 0 },
2856
+ { X86::VPERMI2PD128rrk, X86::VPERMI2PD128rmk, 0 },
2857
+ { X86::VPERMI2PS128rrk, X86::VPERMI2PS128rmk, 0 },
2858
+ { X86::VPERMI2Q128rrk, X86::VPERMI2Q128rmk, 0 },
2859
+ { X86::VPERMI2W128rrk, X86::VPERMI2W128rmk, 0 },
2834
2860
{ X86::VPERMILPDZ128rrk, X86::VPERMILPDZ128rmk, 0 },
2835
2861
{ X86::VPERMILPSZ128rrk, X86::VPERMILPSZ128rmk, 0 },
2862
+ { X86::VPERMT2B128rrk, X86::VPERMT2B128rmk, 0 },
2863
+ { X86::VPERMT2D128rrk, X86::VPERMT2D128rmk, 0 },
2864
+ { X86::VPERMT2PD128rrk, X86::VPERMT2PD128rmk, 0 },
2865
+ { X86::VPERMT2PS128rrk, X86::VPERMT2PS128rmk, 0 },
2866
+ { X86::VPERMT2Q128rrk, X86::VPERMT2Q128rmk, 0 },
2867
+ { X86::VPERMT2W128rrk, X86::VPERMT2W128rmk, 0 },
2836
2868
{ X86::VPERMWZ128rrk, X86::VPERMWZ128rmk, 0 },
2837
2869
{ X86::VPMADDUBSWZ128rrk, X86::VPMADDUBSWZ128rmk, 0 },
2838
2870
{ X86::VPMADDWDZ128rrk, X86::VPMADDWDZ128rmk, 0 },
@@ -2848,9 +2880,7 @@ X86InstrInfo::X86InstrInfo(X86Subtarget &STI)
2848
2880
{ X86::VPSUBUSWZ128rrk, X86::VPSUBUSWZ128rmk, 0 },
2849
2881
{ X86::VPSUBWZ128rrk, X86::VPSUBWZ128rmk, 0 },
2850
2882
{ X86::VPTERNLOGDZ128rrik, X86::VPTERNLOGDZ128rmik, 0 },
2851
- { X86::VPTERNLOGDZ128rrikz,X86::VPTERNLOGDZ128rmikz, 0 },
2852
2883
{ X86::VPTERNLOGQZ128rrik, X86::VPTERNLOGQZ128rmik, 0 },
2853
- { X86::VPTERNLOGQZ128rrikz,X86::VPTERNLOGQZ128rmikz, 0 },
2854
2884
{ X86::VPUNPCKHBWZ128rrk, X86::VPUNPCKHBWZ128rmk, 0 },
2855
2885
{ X86::VPUNPCKHDQZ128rrk, X86::VPUNPCKHDQZ128rmk, 0 },
2856
2886
{ X86::VPUNPCKHQDQZ128rrk, X86::VPUNPCKHQDQZ128rmk, 0 },
@@ -2869,6 +2899,54 @@ X86InstrInfo::X86InstrInfo(X86Subtarget &STI)
2869
2899
{ X86::VUNPCKLPSZ128rrk, X86::VUNPCKLPSZ128rmk, 0 },
2870
2900
{ X86::VXORPDZ128rrk, X86::VXORPDZ128rmk, 0 },
2871
2901
{ X86::VXORPSZ128rrk, X86::VXORPSZ128rmk, 0 },
2902
+
2903
+ // 512-bit three source instructions with zero masking.
2904
+ { X86::VPERMI2Brrkz, X86::VPERMI2Brmkz, 0 },
2905
+ { X86::VPERMI2Drrkz, X86::VPERMI2Drmkz, 0 },
2906
+ { X86::VPERMI2PSrrkz, X86::VPERMI2PSrmkz, 0 },
2907
+ { X86::VPERMI2PDrrkz, X86::VPERMI2PDrmkz, 0 },
2908
+ { X86::VPERMI2Qrrkz, X86::VPERMI2Qrmkz, 0 },
2909
+ { X86::VPERMI2Wrrkz, X86::VPERMI2Wrmkz, 0 },
2910
+ { X86::VPERMT2Brrkz, X86::VPERMT2Brmkz, 0 },
2911
+ { X86::VPERMT2Drrkz, X86::VPERMT2Drmkz, 0 },
2912
+ { X86::VPERMT2PSrrkz, X86::VPERMT2PSrmkz, 0 },
2913
+ { X86::VPERMT2PDrrkz, X86::VPERMT2PDrmkz, 0 },
2914
+ { X86::VPERMT2Qrrkz, X86::VPERMT2Qrmkz, 0 },
2915
+ { X86::VPERMT2Wrrkz, X86::VPERMT2Wrmkz, 0 },
2916
+ { X86::VPTERNLOGDZrrikz, X86::VPTERNLOGDZrmikz, 0 },
2917
+ { X86::VPTERNLOGQZrrikz, X86::VPTERNLOGQZrmikz, 0 },
2918
+
2919
+ // 256-bit three source instructions with zero masking.
2920
+ { X86::VPERMI2B256rrkz, X86::VPERMI2B256rmkz, 0 },
2921
+ { X86::VPERMI2D256rrkz, X86::VPERMI2D256rmkz, 0 },
2922
+ { X86::VPERMI2PD256rrkz, X86::VPERMI2PD256rmkz, 0 },
2923
+ { X86::VPERMI2PS256rrkz, X86::VPERMI2PS256rmkz, 0 },
2924
+ { X86::VPERMI2Q256rrkz, X86::VPERMI2Q256rmkz, 0 },
2925
+ { X86::VPERMI2W256rrkz, X86::VPERMI2W256rmkz, 0 },
2926
+ { X86::VPERMT2B256rrkz, X86::VPERMT2B256rmkz, 0 },
2927
+ { X86::VPERMT2D256rrkz, X86::VPERMT2D256rmkz, 0 },
2928
+ { X86::VPERMT2PD256rrkz, X86::VPERMT2PD256rmkz, 0 },
2929
+ { X86::VPERMT2PS256rrkz, X86::VPERMT2PS256rmkz, 0 },
2930
+ { X86::VPERMT2Q256rrkz, X86::VPERMT2Q256rmkz, 0 },
2931
+ { X86::VPERMT2W256rrkz, X86::VPERMT2W256rmkz, 0 },
2932
+ { X86::VPTERNLOGDZ256rrikz,X86::VPTERNLOGDZ256rmikz, 0 },
2933
+ { X86::VPTERNLOGQZ256rrikz,X86::VPTERNLOGQZ256rmikz, 0 },
2934
+
2935
+ // 128-bit three source instructions with zero masking.
2936
+ { X86::VPERMI2B128rrkz, X86::VPERMI2B128rmkz, 0 },
2937
+ { X86::VPERMI2D128rrkz, X86::VPERMI2D128rmkz, 0 },
2938
+ { X86::VPERMI2PD128rrkz, X86::VPERMI2PD128rmkz, 0 },
2939
+ { X86::VPERMI2PS128rrkz, X86::VPERMI2PS128rmkz, 0 },
2940
+ { X86::VPERMI2Q128rrkz, X86::VPERMI2Q128rmkz, 0 },
2941
+ { X86::VPERMI2W128rrkz, X86::VPERMI2W128rmkz, 0 },
2942
+ { X86::VPERMT2B128rrkz, X86::VPERMT2B128rmkz, 0 },
2943
+ { X86::VPERMT2D128rrkz, X86::VPERMT2D128rmkz, 0 },
2944
+ { X86::VPERMT2PD128rrkz, X86::VPERMT2PD128rmkz, 0 },
2945
+ { X86::VPERMT2PS128rrkz, X86::VPERMT2PS128rmkz, 0 },
2946
+ { X86::VPERMT2Q128rrkz, X86::VPERMT2Q128rmkz, 0 },
2947
+ { X86::VPERMT2W128rrkz, X86::VPERMT2W128rmkz, 0 },
2948
+ { X86::VPTERNLOGDZ128rrikz,X86::VPTERNLOGDZ128rmikz, 0 },
2949
+ { X86::VPTERNLOGQZ128rrikz,X86::VPTERNLOGQZ128rmikz, 0 },
2872
2950
};
2873
2951
2874
2952
for (X86MemoryFoldTableEntry Entry : MemoryFoldTable4) {
0 commit comments