@@ -4733,7 +4733,8 @@ defm VPMULLD : avx512_binop_rm_vl_d<0x40, "vpmulld", mul,
4733
4733
defm VPMULLW : avx512_binop_rm_vl_w<0xD5, "vpmullw", mul,
4734
4734
SchedWriteVecIMul, HasBWI, 1>;
4735
4735
defm VPMULLQ : avx512_binop_rm_vl_q<0x40, "vpmullq", mul,
4736
- SchedWriteVecIMul, HasDQI, 1>, T8PD;
4736
+ SchedWriteVecIMul, HasDQI, 1>, T8PD,
4737
+ NotEVEX2VEXConvertible;
4737
4738
defm VPMULHW : avx512_binop_rm_vl_w<0xE5, "vpmulhw", mulhs, SchedWriteVecIMul,
4738
4739
HasBWI, 1>;
4739
4740
defm VPMULHUW : avx512_binop_rm_vl_w<0xE4, "vpmulhuw", mulhu, SchedWriteVecIMul,
@@ -4875,29 +4876,41 @@ defm VPMAXSB : avx512_binop_rm_vl_b<0x3C, "vpmaxsb", smax,
4875
4876
SchedWriteVecALU, HasBWI, 1>, T8PD;
4876
4877
defm VPMAXSW : avx512_binop_rm_vl_w<0xEE, "vpmaxsw", smax,
4877
4878
SchedWriteVecALU, HasBWI, 1>;
4878
- defm VPMAXS : avx512_binop_rm_vl_dq <0x3D, 0x3D, "vpmaxs ", smax,
4879
+ defm VPMAXSD : avx512_binop_rm_vl_d <0x3D, "vpmaxsd ", smax,
4879
4880
SchedWriteVecALU, HasAVX512, 1>, T8PD;
4881
+ defm VPMAXSQ : avx512_binop_rm_vl_q<0x3D, "vpmaxsq", smax,
4882
+ SchedWriteVecALU, HasAVX512, 1>, T8PD,
4883
+ NotEVEX2VEXConvertible;
4880
4884
4881
4885
defm VPMAXUB : avx512_binop_rm_vl_b<0xDE, "vpmaxub", umax,
4882
4886
SchedWriteVecALU, HasBWI, 1>;
4883
4887
defm VPMAXUW : avx512_binop_rm_vl_w<0x3E, "vpmaxuw", umax,
4884
4888
SchedWriteVecALU, HasBWI, 1>, T8PD;
4885
- defm VPMAXU : avx512_binop_rm_vl_dq <0x3F, 0x3F, "vpmaxu ", umax,
4889
+ defm VPMAXUD : avx512_binop_rm_vl_d <0x3F, "vpmaxud ", umax,
4886
4890
SchedWriteVecALU, HasAVX512, 1>, T8PD;
4891
+ defm VPMAXUQ : avx512_binop_rm_vl_q<0x3F, "vpmaxuq", umax,
4892
+ SchedWriteVecALU, HasAVX512, 1>, T8PD,
4893
+ NotEVEX2VEXConvertible;
4887
4894
4888
4895
defm VPMINSB : avx512_binop_rm_vl_b<0x38, "vpminsb", smin,
4889
4896
SchedWriteVecALU, HasBWI, 1>, T8PD;
4890
4897
defm VPMINSW : avx512_binop_rm_vl_w<0xEA, "vpminsw", smin,
4891
4898
SchedWriteVecALU, HasBWI, 1>;
4892
- defm VPMINS : avx512_binop_rm_vl_dq <0x39, 0x39, "vpmins ", smin,
4899
+ defm VPMINSD : avx512_binop_rm_vl_d <0x39, "vpminsd ", smin,
4893
4900
SchedWriteVecALU, HasAVX512, 1>, T8PD;
4901
+ defm VPMINSQ : avx512_binop_rm_vl_q<0x39, "vpminsq", smin,
4902
+ SchedWriteVecALU, HasAVX512, 1>, T8PD,
4903
+ NotEVEX2VEXConvertible;
4894
4904
4895
4905
defm VPMINUB : avx512_binop_rm_vl_b<0xDA, "vpminub", umin,
4896
4906
SchedWriteVecALU, HasBWI, 1>;
4897
4907
defm VPMINUW : avx512_binop_rm_vl_w<0x3A, "vpminuw", umin,
4898
4908
SchedWriteVecALU, HasBWI, 1>, T8PD;
4899
- defm VPMINU : avx512_binop_rm_vl_dq <0x3B, 0x3B, "vpminu ", umin,
4909
+ defm VPMINUD : avx512_binop_rm_vl_d <0x3B, "vpminud ", umin,
4900
4910
SchedWriteVecALU, HasAVX512, 1>, T8PD;
4911
+ defm VPMINUQ : avx512_binop_rm_vl_q<0x3B, "vpminuq", umin,
4912
+ SchedWriteVecALU, HasAVX512, 1>, T8PD,
4913
+ NotEVEX2VEXConvertible;
4901
4914
4902
4915
// PMULLQ: Use 512bit version to implement 128/256 bit in case NoVLX.
4903
4916
let Predicates = [HasDQI, NoVLX] in {
@@ -5523,7 +5536,7 @@ multiclass avx512_fp_scalef_all<bits<8> opc, bits<8> opcScaler, string OpcodeStr
5523
5536
}
5524
5537
}
5525
5538
defm VSCALEF : avx512_fp_scalef_all<0x2C, 0x2D, "vscalef", X86scalef, X86scalefs,
5526
- SchedWriteFAdd>, T8PD;
5539
+ SchedWriteFAdd>, T8PD, NotEVEX2VEXConvertible ;
5527
5540
5528
5541
//===----------------------------------------------------------------------===//
5529
5542
// AVX-512 VPTESTM instructions
@@ -5765,9 +5778,11 @@ multiclass avx512_shift_sizes<bits<8> opc, string OpcodeStr, SDNode OpNode,
5765
5778
5766
5779
multiclass avx512_shift_types<bits<8> opcd, bits<8> opcq, bits<8> opcw,
5767
5780
string OpcodeStr, SDNode OpNode,
5768
- X86SchedWriteWidths sched> {
5781
+ X86SchedWriteWidths sched,
5782
+ bit NotEVEX2VEXConvertibleQ = 0> {
5769
5783
defm D : avx512_shift_sizes<opcd, OpcodeStr#"d", OpNode, sched, v4i32,
5770
5784
bc_v4i32, avx512vl_i32_info, HasAVX512>;
5785
+ let notEVEX2VEXConvertible = NotEVEX2VEXConvertibleQ in
5771
5786
defm Q : avx512_shift_sizes<opcq, OpcodeStr#"q", OpNode, sched, v2i64,
5772
5787
bc_v2i64, avx512vl_i64_info, HasAVX512>, VEX_W;
5773
5788
defm W : avx512_shift_sizes<opcw, OpcodeStr#"w", OpNode, sched, v8i16,
@@ -5812,9 +5827,11 @@ multiclass avx512_shift_rmi_w<bits<8> opcw, Format ImmFormR, Format ImmFormM,
5812
5827
multiclass avx512_shift_rmi_dq<bits<8> opcd, bits<8> opcq,
5813
5828
Format ImmFormR, Format ImmFormM,
5814
5829
string OpcodeStr, SDNode OpNode,
5815
- X86SchedWriteWidths sched> {
5830
+ X86SchedWriteWidths sched,
5831
+ bit NotEVEX2VEXConvertibleQ = 0> {
5816
5832
defm D: avx512_shift_rmi_sizes<opcd, ImmFormR, ImmFormM, OpcodeStr#"d", OpNode,
5817
5833
sched, avx512vl_i32_info>, EVEX_CD8<32, CD8VF>;
5834
+ let notEVEX2VEXConvertible = NotEVEX2VEXConvertibleQ in
5818
5835
defm Q: avx512_shift_rmi_sizes<opcq, ImmFormR, ImmFormM, OpcodeStr#"q", OpNode,
5819
5836
sched, avx512vl_i64_info>, EVEX_CD8<64, CD8VF>, VEX_W;
5820
5837
}
@@ -5830,7 +5847,7 @@ defm VPSLL : avx512_shift_rmi_dq<0x72, 0x73, MRM6r, MRM6m, "vpsll", X86vshli,
5830
5847
SchedWriteVecShiftImm>, AVX512BIi8Base, EVEX_4V;
5831
5848
5832
5849
defm VPSRA : avx512_shift_rmi_dq<0x72, 0x72, MRM4r, MRM4m, "vpsra", X86vsrai,
5833
- SchedWriteVecShiftImm>,
5850
+ SchedWriteVecShiftImm, 1 >,
5834
5851
avx512_shift_rmi_w<0x71, MRM4r, MRM4m, "vpsraw", X86vsrai,
5835
5852
SchedWriteVecShiftImm>, AVX512BIi8Base, EVEX_4V;
5836
5853
@@ -5842,7 +5859,7 @@ defm VPROL : avx512_shift_rmi_dq<0x72, 0x72, MRM1r, MRM1m, "vprol", X86vrotli,
5842
5859
defm VPSLL : avx512_shift_types<0xF2, 0xF3, 0xF1, "vpsll", X86vshl,
5843
5860
SchedWriteVecShift>;
5844
5861
defm VPSRA : avx512_shift_types<0xE2, 0xE2, 0xE1, "vpsra", X86vsra,
5845
- SchedWriteVecShift>;
5862
+ SchedWriteVecShift, 1 >;
5846
5863
defm VPSRL : avx512_shift_types<0xD2, 0xD3, 0xD1, "vpsrl", X86vsrl,
5847
5864
SchedWriteVecShift>;
5848
5865
@@ -7701,9 +7718,9 @@ multiclass avx512_cvtqq2pd<bits<8> opc, string OpcodeStr, SDNode OpNode,
7701
7718
}
7702
7719
let Predicates = [HasDQI, HasVLX] in {
7703
7720
defm Z128 : avx512_vcvt_fp<opc, OpcodeStr, v2f64x_info, v2i64x_info, OpNode,
7704
- sched.XMM>, EVEX_V128;
7721
+ sched.XMM>, EVEX_V128, NotEVEX2VEXConvertible ;
7705
7722
defm Z256 : avx512_vcvt_fp<opc, OpcodeStr, v4f64x_info, v4i64x_info, OpNode,
7706
- sched.YMM>, EVEX_V256;
7723
+ sched.YMM>, EVEX_V256, NotEVEX2VEXConvertible ;
7707
7724
}
7708
7725
}
7709
7726
@@ -7760,9 +7777,11 @@ multiclass avx512_cvtqq2ps<bits<8> opc, string OpcodeStr, SDNode OpNode,
7760
7777
// dest type - 'v4i32x_info'. We also specify the broadcast string explicitly
7761
7778
// due to the same reason.
7762
7779
defm Z128 : avx512_vcvt_fp<opc, OpcodeStr, v4f32x_info, v2i64x_info, OpNode128,
7763
- sched.XMM, "{1to2}", "{x}">, EVEX_V128;
7780
+ sched.XMM, "{1to2}", "{x}">, EVEX_V128,
7781
+ NotEVEX2VEXConvertible;
7764
7782
defm Z256 : avx512_vcvt_fp<opc, OpcodeStr, v4f32x_info, v4i64x_info, OpNode,
7765
- sched.YMM, "{1to4}", "{y}">, EVEX_V256;
7783
+ sched.YMM, "{1to4}", "{y}">, EVEX_V256,
7784
+ NotEVEX2VEXConvertible;
7766
7785
7767
7786
def : InstAlias<OpcodeStr##"x\t{$src, $dst|$dst, $src}",
7768
7787
(!cast<Instruction>(NAME # "Z128rr") VR128X:$dst, VR128X:$src), 0>;
@@ -10263,7 +10282,7 @@ let Predicates = [HasVLX, HasBWI] in {
10263
10282
10264
10283
defm VDBPSADBW: avx512_common_3Op_rm_imm8<0x42, X86dbpsadbw, "vdbpsadbw",
10265
10284
SchedWritePSADBW, avx512vl_i16_info, avx512vl_i8_info>,
10266
- EVEX_CD8<8, CD8VF>;
10285
+ EVEX_CD8<8, CD8VF>, NotEVEX2VEXConvertible ;
10267
10286
10268
10287
multiclass avx512_unary_rm<bits<8> opc, string OpcodeStr, SDNode OpNode,
10269
10288
X86FoldableSchedWrite sched, X86VectorVTInfo _> {
0 commit comments