@@ -2229,6 +2229,10 @@ short SPIRV_OVERLOADABLE SPIRV_BUILTIN(GroupNonUniformBroadcast, _i32_i16_i32, )
22292229{
22302230 if (Execution == Subgroup )
22312231 {
2232+ if (BIF_FLAG_CTRL_GET (UseOOBChecks ))
2233+ {
2234+ Id = Id & (get_max_sub_group_size () - 1 );
2235+ }
22322236 return as_ushort (__builtin_IB_simd_shuffle_h (as_half (Value ), Id ));
22332237 }
22342238 else
@@ -2292,6 +2296,10 @@ double SPIRV_OVERLOADABLE SPIRV_BUILTIN(GroupNonUniformBroadcast, _i32_f64_i32,
22922296{
22932297 if (Execution == Subgroup )
22942298 {
2299+ if (BIF_FLAG_CTRL_GET (UseOOBChecks ))
2300+ {
2301+ Id = Id & (get_max_sub_group_size () - 1 );
2302+ }
22952303 return __builtin_IB_simd_shuffle_df ( Value , Id );
22962304 }
22972305 else
@@ -3221,6 +3229,10 @@ double SPIRV_OVERLOADABLE SPIRV_BUILTIN(GroupNonUniformShuffle, _i32_f64_i32, )(
32213229{
32223230 if (Execution == Subgroup )
32233231 {
3232+ if (BIF_FLAG_CTRL_GET (UseOOBChecks ))
3233+ {
3234+ c = c & (get_max_sub_group_size () - 1 );
3235+ }
32243236 return __builtin_IB_simd_shuffle_df (x , c );
32253237 }
32263238 return 0 ;
@@ -3232,6 +3244,10 @@ half SPIRV_OVERLOADABLE SPIRV_BUILTIN(GroupNonUniformShuffle, _i32_f16_i32, )(in
32323244{
32333245 if (Execution == Subgroup )
32343246 {
3247+ if (BIF_FLAG_CTRL_GET (UseOOBChecks ))
3248+ {
3249+ c = c & (get_max_sub_group_size () - 1 );
3250+ }
32353251 return __builtin_IB_simd_shuffle_h (x , c );
32363252 }
32373253 return 0 ;
@@ -3264,6 +3280,10 @@ char SPIRV_OVERLOADABLE SPIRV_BUILTIN(GroupNonUniformShuffleDown, _i32_i8_i32, )
32643280{
32653281 if (Execution == Subgroup )
32663282 {
3283+ if (BIF_FLAG_CTRL_GET (UseOOBChecks ))
3284+ {
3285+ c = c & (get_max_sub_group_size () - 1 );
3286+ }
32673287 return __builtin_IB_simd_shuffle_down_uc (x , 0 , c );
32683288 }
32693289 return 0 ;
@@ -3273,6 +3293,10 @@ short SPIRV_OVERLOADABLE SPIRV_BUILTIN(GroupNonUniformShuffleDown, _i32_i16_i32,
32733293{
32743294 if (Execution == Subgroup )
32753295 {
3296+ if (BIF_FLAG_CTRL_GET (UseOOBChecks ))
3297+ {
3298+ c = c & (get_max_sub_group_size () - 1 );
3299+ }
32763300 return __builtin_IB_simd_shuffle_down_us (x , 0 , c );
32773301 }
32783302 return 0 ;
@@ -3282,6 +3306,10 @@ int SPIRV_OVERLOADABLE SPIRV_BUILTIN(GroupNonUniformShuffleDown, _i32_i32_i32, )
32823306{
32833307 if (Execution == Subgroup )
32843308 {
3309+ if (BIF_FLAG_CTRL_GET (UseOOBChecks ))
3310+ {
3311+ c = c & (get_max_sub_group_size () - 1 );
3312+ }
32853313 return __builtin_IB_simd_shuffle_down (x , 0 , c );
32863314 }
32873315 return 0 ;
@@ -3291,6 +3319,10 @@ long SPIRV_OVERLOADABLE SPIRV_BUILTIN(GroupNonUniformShuffleDown, _i32_i64_i32,
32913319{
32923320 if (Execution == Subgroup )
32933321 {
3322+ if (BIF_FLAG_CTRL_GET (UseOOBChecks ))
3323+ {
3324+ c = c & (get_max_sub_group_size () - 1 );
3325+ }
32943326 uint2 X = as_uint2 (x );
32953327 uint2 result = (uint2 )(__builtin_IB_simd_shuffle_down (X .s0 , 0 , c ),
32963328 __builtin_IB_simd_shuffle_down (X .s1 , 0 , c ));
@@ -3303,6 +3335,10 @@ float SPIRV_OVERLOADABLE SPIRV_BUILTIN(GroupNonUniformShuffleDown, _i32_f32_i32,
33033335{
33043336 if (Execution == Subgroup )
33053337 {
3338+ if (BIF_FLAG_CTRL_GET (UseOOBChecks ))
3339+ {
3340+ c = c & (get_max_sub_group_size () - 1 );
3341+ }
33063342 return as_float (__builtin_IB_simd_shuffle_down (as_uint (x ), 0 , c ));
33073343 }
33083344 return 0 ;
@@ -3313,6 +3349,10 @@ double SPIRV_OVERLOADABLE SPIRV_BUILTIN(GroupNonUniformShuffleDown, _i32_f64_i32
33133349{
33143350 if (Execution == Subgroup )
33153351 {
3352+ if (BIF_FLAG_CTRL_GET (UseOOBChecks ))
3353+ {
3354+ c = c & (get_max_sub_group_size () - 1 );
3355+ }
33163356 uint2 X = as_uint2 (x );
33173357 uint2 result = (uint2 )(__builtin_IB_simd_shuffle_down (X .s0 , 0 , c ),
33183358 __builtin_IB_simd_shuffle_down (X .s1 , 0 , c ));
@@ -3327,6 +3367,10 @@ half SPIRV_OVERLOADABLE SPIRV_BUILTIN(GroupNonUniformShuffleDown, _i32_f16_i32,
33273367{
33283368 if (Execution == Subgroup )
33293369 {
3370+ if (BIF_FLAG_CTRL_GET (UseOOBChecks ))
3371+ {
3372+ c = c & (get_max_sub_group_size () - 1 );
3373+ }
33303374 return as_half (__builtin_IB_simd_shuffle_down_us (as_ushort (x ), 0 , c ));
33313375 }
33323376 return 0 ;
@@ -3339,6 +3383,10 @@ TYPE SPIRV_OVERLOADABLE SPIRV_BUILTIN(GroupNonUniformShuffleUp, _i32_##TYPE_ABBR
33393383{ \
33403384 if (Execution == Subgroup) \
33413385 { \
3386+ if(BIF_FLAG_CTRL_GET(UseOOBChecks)) \
3387+ { \
3388+ c = c & (get_max_sub_group_size() - 1); \
3389+ } \
33423390 return intel_sub_group_shuffle_up((TYPE) 0, x, c); \
33433391 } \
33443392 return 0; \
0 commit comments