[AVX512] Correct isExtractSubvectorCheap so that it will return the correct answers for extracting 128-bits from a 512-bit vector and for mask registers.
Previously it would not return true for extracting either of the upper quarters of a 512-bit registers. For mask registers we support extracting anything from index 0. And otherwise we only support extracting the upper half of a register. Differential Revision: https://reviews.llvm.org/D36638 llvm-svn: 310794
This commit is contained in:
		
							parent
							
								
									2251ef95a3
								
							
						
					
					
						commit
						43e3b788f4
					
				| 
						 | 
				
			
			@ -4579,7 +4579,13 @@ bool X86TargetLowering::isExtractSubvectorCheap(EVT ResVT, EVT SrcVT,
 | 
			
		|||
  if (!isOperationLegalOrCustom(ISD::EXTRACT_SUBVECTOR, ResVT))
 | 
			
		||||
    return false;
 | 
			
		||||
 | 
			
		||||
  return (Index == 0 || Index == ResVT.getVectorNumElements());
 | 
			
		||||
  // Mask vectors support all subregister combinations and operations that
 | 
			
		||||
  // extract half of vector.
 | 
			
		||||
  if (ResVT.getVectorElementType() == MVT::i1)
 | 
			
		||||
    return Index = 0 || ((ResVT.getSizeInBits() == SrcVT.getSizeInBits() * 2) &&
 | 
			
		||||
                         (Index == ResVT.getVectorNumElements()));
 | 
			
		||||
 | 
			
		||||
  return (Index % ResVT.getVectorNumElements()) == 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool X86TargetLowering::isCheapToSpeculateCttz() const {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue