@@ -4011,6 +4011,7 @@ namespace IGC
4011
4011
4012
4012
Value* data = I.getOperand (0 );
4013
4013
Value* source = I.getOperand (1 );
4014
+ uint typeByteSize = data->getType ()->getScalarSizeInBits () / 8 ;
4014
4015
bool isMatch = false ;
4015
4016
int subReg = 0 ;
4016
4017
uint verticalStride = 1 ; // Default value for special case Shuffle( data, (laneID << x) + y ) when x = 0
@@ -4063,21 +4064,27 @@ namespace IGC
4063
4064
// Finally check for simLaneID intrisic
4064
4065
if (intrin && (intrin->getIntrinsicID () == GenISAIntrinsic::GenISA_simdLaneId))
4065
4066
{
4066
- MatchRegionPattern* pattern = new (m_allocator) MatchRegionPattern ();
4067
- pattern->source .elementOffset = subReg;
4068
-
4069
- // Set Region Parameters <VerString;Width,HorzString>
4070
- pattern->source .region_set = true ;
4071
- pattern->source .region [0 ] = verticalStride;
4072
- pattern->source .region [1 ] = 1 ;
4073
- pattern->source .region [2 ] = 0 ;
4074
-
4075
- pattern->source .value = data;
4076
- MarkAsSource (data);
4077
- HandleSubspanUse (data);
4078
- AddPattern (pattern);
4067
+ // To avoid compiler crash, pattern match with direct mov will be disable
4068
+ // Conservetively, we assum simd16 for 32 bytes GRF platforms and simd32 for 64 bytes GRF platforms
4069
+ bool cross2GRFs = typeByteSize * (subReg + verticalStride * (m_Platform.getGRFSize () > 32 ? 32 : 16 )) > (2 * m_Platform.getGRFSize ());
4070
+ if (!cross2GRFs)
4071
+ {
4072
+ MatchRegionPattern* pattern = new (m_allocator) MatchRegionPattern ();
4073
+ pattern->source .elementOffset = subReg;
4074
+
4075
+ // Set Region Parameters <VerString;Width,HorzString>
4076
+ pattern->source .region_set = true ;
4077
+ pattern->source .region [0 ] = verticalStride;
4078
+ pattern->source .region [1 ] = 1 ;
4079
+ pattern->source .region [2 ] = 0 ;
4080
+
4081
+ pattern->source .value = data;
4082
+ MarkAsSource (data);
4083
+ HandleSubspanUse (data);
4084
+ AddPattern (pattern);
4079
4085
4080
- isMatch = true ;
4086
+ isMatch = true ;
4087
+ }
4081
4088
}
4082
4089
4083
4090
return isMatch;
0 commit comments