[AVX-512] Mark EVEX encoded vpcmpeq as commutable just like its AVX and SSE equivalent.
llvm-svn: 280592
This commit is contained in:
		
							parent
							
								
									bb18e91cdf
								
							
						
					
					
						commit
						392cd0300d
					
				| 
						 | 
				
			
			@ -1540,7 +1540,8 @@ let Predicates = [HasAVX512] in {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
multiclass avx512_icmp_packed<bits<8> opc, string OpcodeStr, SDNode OpNode,
 | 
			
		||||
              X86VectorVTInfo _> {
 | 
			
		||||
              X86VectorVTInfo _, bit IsCommutable> {
 | 
			
		||||
  let isCommutable = IsCommutable in
 | 
			
		||||
  def rr : AVX512BI<opc, MRMSrcReg,
 | 
			
		||||
             (outs _.KRC:$dst), (ins _.RC:$src1, _.RC:$src2),
 | 
			
		||||
             !strconcat(OpcodeStr, "\t{$src2, $src1, $dst|$dst, $src1, $src2}"),
 | 
			
		||||
| 
						 | 
				
			
			@ -1571,8 +1572,8 @@ multiclass avx512_icmp_packed<bits<8> opc, string OpcodeStr, SDNode OpNode,
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
multiclass avx512_icmp_packed_rmb<bits<8> opc, string OpcodeStr, SDNode OpNode,
 | 
			
		||||
              X86VectorVTInfo _> :
 | 
			
		||||
           avx512_icmp_packed<opc, OpcodeStr, OpNode, _> {
 | 
			
		||||
              X86VectorVTInfo _, bit IsCommutable> :
 | 
			
		||||
           avx512_icmp_packed<opc, OpcodeStr, OpNode, _, IsCommutable> {
 | 
			
		||||
  def rmb : AVX512BI<opc, MRMSrcMem,
 | 
			
		||||
              (outs _.KRC:$dst), (ins _.RC:$src1, _.ScalarMemOp:$src2),
 | 
			
		||||
              !strconcat(OpcodeStr, "\t{${src2}", _.BroadcastStr, ", $src1, $dst",
 | 
			
		||||
| 
						 | 
				
			
			@ -1594,48 +1595,49 @@ multiclass avx512_icmp_packed_rmb<bits<8> opc, string OpcodeStr, SDNode OpNode,
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
multiclass avx512_icmp_packed_vl<bits<8> opc, string OpcodeStr, SDNode OpNode,
 | 
			
		||||
                                 AVX512VLVectorVTInfo VTInfo, Predicate prd> {
 | 
			
		||||
                                 AVX512VLVectorVTInfo VTInfo, Predicate prd,
 | 
			
		||||
                                 bit IsCommutable = 0> {
 | 
			
		||||
  let Predicates = [prd] in
 | 
			
		||||
  defm Z : avx512_icmp_packed<opc, OpcodeStr, OpNode, VTInfo.info512>,
 | 
			
		||||
           EVEX_V512;
 | 
			
		||||
  defm Z : avx512_icmp_packed<opc, OpcodeStr, OpNode, VTInfo.info512,
 | 
			
		||||
                              IsCommutable>, EVEX_V512;
 | 
			
		||||
 | 
			
		||||
  let Predicates = [prd, HasVLX] in {
 | 
			
		||||
    defm Z256 : avx512_icmp_packed<opc, OpcodeStr, OpNode, VTInfo.info256>,
 | 
			
		||||
                EVEX_V256;
 | 
			
		||||
    defm Z128 : avx512_icmp_packed<opc, OpcodeStr, OpNode, VTInfo.info128>,
 | 
			
		||||
                EVEX_V128;
 | 
			
		||||
    defm Z256 : avx512_icmp_packed<opc, OpcodeStr, OpNode, VTInfo.info256,
 | 
			
		||||
                                   IsCommutable>, EVEX_V256;
 | 
			
		||||
    defm Z128 : avx512_icmp_packed<opc, OpcodeStr, OpNode, VTInfo.info128,
 | 
			
		||||
                                   IsCommutable>, EVEX_V128;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
multiclass avx512_icmp_packed_rmb_vl<bits<8> opc, string OpcodeStr,
 | 
			
		||||
                                  SDNode OpNode, AVX512VLVectorVTInfo VTInfo,
 | 
			
		||||
                                  Predicate prd> {
 | 
			
		||||
                                  Predicate prd, bit IsCommutable = 0> {
 | 
			
		||||
  let Predicates = [prd] in
 | 
			
		||||
  defm Z : avx512_icmp_packed_rmb<opc, OpcodeStr, OpNode, VTInfo.info512>,
 | 
			
		||||
           EVEX_V512;
 | 
			
		||||
  defm Z : avx512_icmp_packed_rmb<opc, OpcodeStr, OpNode, VTInfo.info512,
 | 
			
		||||
                                  IsCommutable>, EVEX_V512;
 | 
			
		||||
 | 
			
		||||
  let Predicates = [prd, HasVLX] in {
 | 
			
		||||
    defm Z256 : avx512_icmp_packed_rmb<opc, OpcodeStr, OpNode, VTInfo.info256>,
 | 
			
		||||
                EVEX_V256;
 | 
			
		||||
    defm Z128 : avx512_icmp_packed_rmb<opc, OpcodeStr, OpNode, VTInfo.info128>,
 | 
			
		||||
                EVEX_V128;
 | 
			
		||||
    defm Z256 : avx512_icmp_packed_rmb<opc, OpcodeStr, OpNode, VTInfo.info256,
 | 
			
		||||
                                       IsCommutable>, EVEX_V256;
 | 
			
		||||
    defm Z128 : avx512_icmp_packed_rmb<opc, OpcodeStr, OpNode, VTInfo.info128,
 | 
			
		||||
                                       IsCommutable>, EVEX_V128;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
defm VPCMPEQB : avx512_icmp_packed_vl<0x74, "vpcmpeqb", X86pcmpeqm,
 | 
			
		||||
                      avx512vl_i8_info, HasBWI>,
 | 
			
		||||
                      avx512vl_i8_info, HasBWI, 1>,
 | 
			
		||||
                EVEX_CD8<8, CD8VF>;
 | 
			
		||||
 | 
			
		||||
defm VPCMPEQW : avx512_icmp_packed_vl<0x75, "vpcmpeqw", X86pcmpeqm,
 | 
			
		||||
                      avx512vl_i16_info, HasBWI>,
 | 
			
		||||
                      avx512vl_i16_info, HasBWI, 1>,
 | 
			
		||||
                EVEX_CD8<16, CD8VF>;
 | 
			
		||||
 | 
			
		||||
defm VPCMPEQD : avx512_icmp_packed_rmb_vl<0x76, "vpcmpeqd", X86pcmpeqm,
 | 
			
		||||
                      avx512vl_i32_info, HasAVX512>,
 | 
			
		||||
                      avx512vl_i32_info, HasAVX512, 1>,
 | 
			
		||||
                EVEX_CD8<32, CD8VF>;
 | 
			
		||||
 | 
			
		||||
defm VPCMPEQQ : avx512_icmp_packed_rmb_vl<0x29, "vpcmpeqq", X86pcmpeqm,
 | 
			
		||||
                      avx512vl_i64_info, HasAVX512>,
 | 
			
		||||
                      avx512vl_i64_info, HasAVX512, 1>,
 | 
			
		||||
                T8PD, VEX_W, EVEX_CD8<64, CD8VF>;
 | 
			
		||||
 | 
			
		||||
defm VPCMPGTB : avx512_icmp_packed_vl<0x64, "vpcmpgtb", X86pcmpgtm,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue