forked from OSchip/llvm-project
				
			Change type profile for vpermv back to using operand type for the mask argument to match intrinsic behavior. Add a bitcast to the lowering code to convert mask from v8i32 to v8f32 for vpermps.
llvm-svn: 154798
This commit is contained in:
		
							parent
							
								
									c0075aa7ff
								
							
						
					
					
						commit
						26d7a94981
					
				| 
						 | 
				
			
			@ -6655,9 +6655,11 @@ X86TargetLowering::LowerVECTOR_SHUFFLE(SDValue Op, SelectionDAG &DAG) const {
 | 
			
		|||
    for (unsigned i = 0; i != 8; ++i) {
 | 
			
		||||
      permclMask.push_back(DAG.getConstant((M[i]>=0) ? M[i] : 0, MVT::i32));
 | 
			
		||||
    }
 | 
			
		||||
    SDValue Mask = DAG.getNode(ISD::BUILD_VECTOR, dl, MVT::v8i32,
 | 
			
		||||
                               &permclMask[0], 8);
 | 
			
		||||
    // Bitcast is for VPERMPS since mask is v8i32 but node takes v8f32
 | 
			
		||||
    return DAG.getNode(X86ISD::VPERMV, dl, VT,
 | 
			
		||||
                       DAG.getNode(ISD::BUILD_VECTOR, dl, MVT::v8i32,
 | 
			
		||||
                                   &permclMask[0], 8), V1);
 | 
			
		||||
                       DAG.getNode(ISD::BITCAST, dl, VT, Mask), V1);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (V2IsUndef && HasAVX2 && (VT == MVT::v4i64 || VT == MVT::v4f64))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -124,8 +124,6 @@ def SDTShuff2OpI : SDTypeProfile<1, 2, [SDTCisVec<0>,
 | 
			
		|||
                                 SDTCisSameAs<0,1>, SDTCisInt<2>]>;
 | 
			
		||||
def SDTShuff3OpI : SDTypeProfile<1, 3, [SDTCisVec<0>, SDTCisSameAs<0,1>,
 | 
			
		||||
                                 SDTCisSameAs<0,2>, SDTCisInt<3>]>;
 | 
			
		||||
def SDTVPermv : SDTypeProfile<1, 2, [SDTCisVec<0>, SDTCisVT<1, v8i32>,
 | 
			
		||||
                              SDTCisSameAs<0,2>]>;
 | 
			
		||||
 | 
			
		||||
def SDTVBroadcast : SDTypeProfile<1, 1, [SDTCisVec<0>]>;
 | 
			
		||||
def SDTBlend : SDTypeProfile<1, 3, [SDTCisVec<0>, SDTCisSameAs<0,1>,
 | 
			
		||||
| 
						 | 
				
			
			@ -157,7 +155,7 @@ def X86Unpckl : SDNode<"X86ISD::UNPCKL", SDTShuff2Op>;
 | 
			
		|||
def X86Unpckh : SDNode<"X86ISD::UNPCKH", SDTShuff2Op>;
 | 
			
		||||
 | 
			
		||||
def X86VPermilp  : SDNode<"X86ISD::VPERMILP", SDTShuff2OpI>;
 | 
			
		||||
def X86VPermv    : SDNode<"X86ISD::VPERMV",   SDTVPermv>;
 | 
			
		||||
def X86VPermv    : SDNode<"X86ISD::VPERMV",   SDTShuff2Op>;
 | 
			
		||||
def X86VPermi    : SDNode<"X86ISD::VPERMI",   SDTShuff2OpI>;
 | 
			
		||||
 | 
			
		||||
def X86VPerm2x128 : SDNode<"X86ISD::VPERM2X128", SDTShuff3OpI>;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue