From 1f3f9b9b1181feb559e85970155678c18a436711 Mon Sep 17 00:00:00 2001 From: Dmitri Mokhov Date: Sun, 19 Dec 2021 10:37:14 -0600 Subject: [PATCH] [SYCL] Widen (u)int8/16 to (u)int32 and half to float in group_broadcast (#5110) CPU device does not yet support the (u)int8/16 and half versions. - Add FIXMEs. - Bitcast half to int16_t (and then widen to int32_t) to keep the precision. - Refactor the widening code into a separate helper. - Add tests for all 3 group_broadcast overloads. --- sycl/include/CL/sycl/detail/spirv.hpp | 37 +- .../check_device_code/group_operations.cpp | 970 ++++++++++-------- 2 files changed, 569 insertions(+), 438 deletions(-) diff --git a/sycl/include/CL/sycl/detail/spirv.hpp b/sycl/include/CL/sycl/detail/spirv.hpp index 49f219f15abb1..40077923bfd8f 100644 --- a/sycl/include/CL/sycl/detail/spirv.hpp +++ b/sycl/include/CL/sycl/detail/spirv.hpp @@ -86,8 +86,10 @@ template bool GroupAny(bool pred) { } // Native broadcasts map directly to a SPIR-V GroupBroadcast intrinsic +// FIXME: Do not special-case for half once all backends support all data types. template -using is_native_broadcast = bool_constant::value>; +using is_native_broadcast = bool_constant::value && + !std::is_same::value>; template using EnableIfNativeBroadcast = detail::enable_if_t< @@ -121,6 +123,13 @@ template using EnableIfGenericBroadcast = detail::enable_if_t< is_generic_broadcast::value && std::is_integral::value, T>; +// FIXME: Disable widening once all backends support all data types. +template +using WidenOpenCLTypeTo32_t = conditional_t< + std::is_same() || std::is_same(), cl_int, + conditional_t() || std::is_same(), + cl_uint, T>>; + // Broadcast with scalar local index // Work-group supports any integral type // Sub-group currently supports only uint32_t @@ -133,21 +142,17 @@ EnableIfNativeBroadcast GroupBroadcast(T x, IdT local_id) { using GroupIdT = typename GroupId::type; GroupIdT GroupLocalId = static_cast(local_id); using OCLT = detail::ConvertToOpenCLType_t; + using WidenedT = WidenOpenCLTypeTo32_t; using OCLIdT = detail::ConvertToOpenCLType_t; - OCLT OCLX = detail::convertDataToType(x); + WidenedT OCLX = detail::convertDataToType(x); OCLIdT OCLId = detail::convertDataToType(GroupLocalId); return __spirv_GroupBroadcast(group_scope::value, OCLX, OCLId); } template EnableIfBitcastBroadcast GroupBroadcast(T x, IdT local_id) { - using GroupIdT = typename GroupId::type; - GroupIdT GroupLocalId = static_cast(local_id); using BroadcastT = ConvertToNativeBroadcastType_t; - using OCLIdT = detail::ConvertToOpenCLType_t; auto BroadcastX = bit_cast(x); - OCLIdT OCLId = detail::convertDataToType(GroupLocalId); - BroadcastT Result = - __spirv_GroupBroadcast(group_scope::value, BroadcastX, OCLId); + BroadcastT Result = GroupBroadcast(BroadcastX, local_id); return bit_cast(Result); } template @@ -173,31 +178,21 @@ EnableIfNativeBroadcast GroupBroadcast(T x, id local_id) { } using IdT = vec; using OCLT = detail::ConvertToOpenCLType_t; + using WidenedT = WidenOpenCLTypeTo32_t; using OCLIdT = detail::ConvertToOpenCLType_t; IdT VecId; for (int i = 0; i < Dimensions; ++i) { VecId[i] = local_id[Dimensions - i - 1]; } - OCLT OCLX = detail::convertDataToType(x); + WidenedT OCLX = detail::convertDataToType(x); OCLIdT OCLId = detail::convertDataToType(VecId); return __spirv_GroupBroadcast(group_scope::value, OCLX, OCLId); } template EnableIfBitcastBroadcast GroupBroadcast(T x, id local_id) { - if (Dimensions == 1) { - return GroupBroadcast(x, local_id[0]); - } - using IdT = vec; using BroadcastT = ConvertToNativeBroadcastType_t; - using OCLIdT = detail::ConvertToOpenCLType_t; - IdT VecId; - for (int i = 0; i < Dimensions; ++i) { - VecId[i] = local_id[Dimensions - i - 1]; - } auto BroadcastX = bit_cast(x); - OCLIdT OCLId = detail::convertDataToType(VecId); - BroadcastT Result = - __spirv_GroupBroadcast(group_scope::value, BroadcastX, OCLId); + BroadcastT Result = GroupBroadcast(BroadcastX, local_id); return bit_cast(Result); } template diff --git a/sycl/test/check_device_code/group_operations.cpp b/sycl/test/check_device_code/group_operations.cpp index 4fdf2df5e01ae..cf3926f5e1f29 100644 --- a/sycl/test/check_device_code/group_operations.cpp +++ b/sycl/test/check_device_code/group_operations.cpp @@ -1,4 +1,4 @@ -// RUN: %clangxx -I %sycl_include -S -emit-llvm -fsycl-device-only %s -o - -Xclang -disable-llvm-passes | FileCheck %s +// RUN: %clangxx -I %sycl_include -S -emit-llvm -fsycl-device-only %s -o - | FileCheck %s #include @@ -7,9 +7,9 @@ using namespace sycl; template class O, typename G> void group_operations(G g) { T res; - res = reduce_over_group(g, T{}, O{}); - res = inclusive_scan_over_group(g, T{}, O{}); - res = exclusive_scan_over_group(g, T{}, O{}); + res = reduce_over_group(g, T{1}, O{}); + res = inclusive_scan_over_group(g, T{1}, O{}); + res = exclusive_scan_over_group(g, T{1}, O{}); } template void binary_operations(G g) { @@ -26,7 +26,17 @@ template void binary_operations(G g) { template void signed_unsigned(G g) { binary_operations(g); - binary_operations>(g); + group_broadcast(g, T{1}); + group_broadcast(g, T{1}, typename G::linear_id_type{1}); + group_broadcast(g, T{1}, typename G::id_type{2}); + + if constexpr (!detail::is_floating_point::value) { + binary_operations>(g); + group_broadcast(g, detail::make_unsigned_t{1}); + group_broadcast(g, detail::make_unsigned_t{1}, + typename G::linear_id_type{1}); + group_broadcast(g, detail::make_unsigned_t{1}, typename G::id_type{2}); + } } template void test(G g) { @@ -41,456 +51,582 @@ template void test(G g) { SYCL_EXTERNAL void test_group(group<> g) { test(g); } +// +// Broadcast +// + +// int8_t +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupBroadcastji{{m|y}}(i32 2, i32 1, i64 0) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupBroadcastji{{m|y}}(i32 2, i32 1, i64 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupBroadcastji{{m|y}}(i32 2, i32 1, i64 2) + +// uint8_t +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupBroadcastjj{{m|y}}(i32 2, i32 1, i64 0) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupBroadcastjj{{m|y}}(i32 2, i32 1, i64 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupBroadcastjj{{m|y}}(i32 2, i32 1, i64 2) + +// int16_t +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupBroadcastji{{m|y}}(i32 2, i32 1, i64 0) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupBroadcastji{{m|y}}(i32 2, i32 1, i64 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupBroadcastji{{m|y}}(i32 2, i32 1, i64 2) + +// uint16_t +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupBroadcastjj{{m|y}}(i32 2, i32 1, i64 0) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupBroadcastjj{{m|y}}(i32 2, i32 1, i64 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupBroadcastjj{{m|y}}(i32 2, i32 1, i64 2) + +// int32_t +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupBroadcastji{{m|y}}(i32 2, i32 1, i64 0) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupBroadcastji{{m|y}}(i32 2, i32 1, i64 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupBroadcastji{{m|y}}(i32 2, i32 1, i64 2) + +// uint32_t +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupBroadcastjj{{m|y}}(i32 2, i32 1, i64 0) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupBroadcastjj{{m|y}}(i32 2, i32 1, i64 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupBroadcastjj{{m|y}}(i32 2, i32 1, i64 2) + +// int64_t (Linux: long, Windows: long long) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupBroadcastj{{l|x}}{{m|y}}(i32 2, i64 1, i64 0) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupBroadcastj{{l|x}}{{m|y}}(i32 2, i64 1, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupBroadcastj{{l|x}}{{m|y}}(i32 2, i64 1, i64 2) + +// uint64_t (Linux: long, Windows: long long) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupBroadcastj{{m|y}}{{m|y}}(i32 2, i64 1, i64 0) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupBroadcastj{{m|y}}{{m|y}}(i32 2, i64 1, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupBroadcastj{{m|y}}{{m|y}}(i32 2, i64 1, i64 2) + +// half (15360 = 0xH3C00 = 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupBroadcastjj{{m|y}}(i32 2, i32 15360, i64 0) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupBroadcastjj{{m|y}}(i32 2, i32 15360, i64 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupBroadcastjj{{m|y}}(i32 2, i32 15360, i64 2) + +// float +// CHECK: call spir_func float @_Z[[#]]__spirv_GroupBroadcastjf{{m|y}}(i32 2, float 1.000000e+00, i64 0) +// CHECK: call spir_func float @_Z[[#]]__spirv_GroupBroadcastjf{{m|y}}(i32 2, float 1.000000e+00, i64 1) +// CHECK: call spir_func float @_Z[[#]]__spirv_GroupBroadcastjf{{m|y}}(i32 2, float 1.000000e+00, i64 2) + +// double +// CHECK: call spir_func double @_Z[[#]]__spirv_GroupBroadcastjd{{m|y}}(i32 2, double 1.000000e+00, i64 0) +// CHECK: call spir_func double @_Z[[#]]__spirv_GroupBroadcastjd{{m|y}}(i32 2, double 1.000000e+00, i64 1) +// CHECK: call spir_func double @_Z[[#]]__spirv_GroupBroadcastjd{{m|y}}(i32 2, double 1.000000e+00, i64 2) + +// +// Binary operations +// + // int8_t -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjji(i32 2, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjji(i32 2, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjji(i32 2, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjji(i32 2, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjji(i32 2, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjji(i32 2, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjji(i32 2, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjji(i32 2, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjji(i32 2, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupSMaxjji(i32 2, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupSMaxjji(i32 2, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupSMaxjji(i32 2, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupSMinjji(i32 2, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupSMinjji(i32 2, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupSMinjji(i32 2, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljji(i32 2, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljji(i32 2, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljji(i32 2, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupIAddjji(i32 2, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupIAddjji(i32 2, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupIAddjji(i32 2, i32 2, i32 %[[#]]) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjji(i32 2, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjji(i32 2, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjji(i32 2, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjji(i32 2, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjji(i32 2, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjji(i32 2, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjji(i32 2, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjji(i32 2, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjji(i32 2, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupSMaxjji(i32 2, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupSMaxjji(i32 2, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupSMaxjji(i32 2, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupSMinjji(i32 2, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupSMinjji(i32 2, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupSMinjji(i32 2, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljji(i32 2, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljji(i32 2, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljji(i32 2, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupIAddjji(i32 2, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupIAddjji(i32 2, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupIAddjji(i32 2, i32 2, i32 1) // uint8_t -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjjj(i32 2, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjjj(i32 2, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjjj(i32 2, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjjj(i32 2, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjjj(i32 2, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjjj(i32 2, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjjj(i32 2, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjjj(i32 2, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjjj(i32 2, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupUMaxjjj(i32 2, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupUMaxjjj(i32 2, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupUMaxjjj(i32 2, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupUMinjjj(i32 2, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupUMinjjj(i32 2, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupUMinjjj(i32 2, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljjj(i32 2, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljjj(i32 2, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljjj(i32 2, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupIAddjjj(i32 2, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupIAddjjj(i32 2, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupIAddjjj(i32 2, i32 2, i32 %[[#]]) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjjj(i32 2, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjjj(i32 2, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjjj(i32 2, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjjj(i32 2, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjjj(i32 2, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjjj(i32 2, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjjj(i32 2, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjjj(i32 2, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjjj(i32 2, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupUMaxjjj(i32 2, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupUMaxjjj(i32 2, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupUMaxjjj(i32 2, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupUMinjjj(i32 2, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupUMinjjj(i32 2, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupUMinjjj(i32 2, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljjj(i32 2, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljjj(i32 2, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljjj(i32 2, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupIAddjjj(i32 2, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupIAddjjj(i32 2, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupIAddjjj(i32 2, i32 2, i32 1) // int16_t -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjji(i32 2, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjji(i32 2, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjji(i32 2, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjji(i32 2, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjji(i32 2, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjji(i32 2, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjji(i32 2, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjji(i32 2, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjji(i32 2, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupSMaxjji(i32 2, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupSMaxjji(i32 2, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupSMaxjji(i32 2, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupSMinjji(i32 2, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupSMinjji(i32 2, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupSMinjji(i32 2, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljji(i32 2, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljji(i32 2, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljji(i32 2, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupIAddjji(i32 2, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupIAddjji(i32 2, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupIAddjji(i32 2, i32 2, i32 %[[#]]) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjji(i32 2, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjji(i32 2, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjji(i32 2, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjji(i32 2, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjji(i32 2, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjji(i32 2, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjji(i32 2, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjji(i32 2, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjji(i32 2, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupSMaxjji(i32 2, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupSMaxjji(i32 2, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupSMaxjji(i32 2, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupSMinjji(i32 2, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupSMinjji(i32 2, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupSMinjji(i32 2, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljji(i32 2, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljji(i32 2, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljji(i32 2, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupIAddjji(i32 2, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupIAddjji(i32 2, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupIAddjji(i32 2, i32 2, i32 1) // uint16_t -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjjj(i32 2, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjjj(i32 2, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjjj(i32 2, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjjj(i32 2, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjjj(i32 2, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjjj(i32 2, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjjj(i32 2, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjjj(i32 2, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjjj(i32 2, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupUMaxjjj(i32 2, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupUMaxjjj(i32 2, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupUMaxjjj(i32 2, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupUMinjjj(i32 2, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupUMinjjj(i32 2, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupUMinjjj(i32 2, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljjj(i32 2, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljjj(i32 2, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljjj(i32 2, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupIAddjjj(i32 2, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupIAddjjj(i32 2, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupIAddjjj(i32 2, i32 2, i32 %[[#]]) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjjj(i32 2, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjjj(i32 2, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjjj(i32 2, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjjj(i32 2, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjjj(i32 2, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjjj(i32 2, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjjj(i32 2, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjjj(i32 2, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjjj(i32 2, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupUMaxjjj(i32 2, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupUMaxjjj(i32 2, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupUMaxjjj(i32 2, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupUMinjjj(i32 2, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupUMinjjj(i32 2, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupUMinjjj(i32 2, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljjj(i32 2, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljjj(i32 2, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljjj(i32 2, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupIAddjjj(i32 2, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupIAddjjj(i32 2, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupIAddjjj(i32 2, i32 2, i32 1) // int32_t -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjji(i32 2, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjji(i32 2, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjji(i32 2, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjji(i32 2, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjji(i32 2, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjji(i32 2, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjji(i32 2, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjji(i32 2, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjji(i32 2, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupSMaxjji(i32 2, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupSMaxjji(i32 2, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupSMaxjji(i32 2, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupSMinjji(i32 2, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupSMinjji(i32 2, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupSMinjji(i32 2, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljji(i32 2, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljji(i32 2, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljji(i32 2, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupIAddjji(i32 2, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupIAddjji(i32 2, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupIAddjji(i32 2, i32 2, i32 %[[#]]) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjji(i32 2, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjji(i32 2, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjji(i32 2, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjji(i32 2, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjji(i32 2, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjji(i32 2, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjji(i32 2, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjji(i32 2, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjji(i32 2, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupSMaxjji(i32 2, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupSMaxjji(i32 2, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupSMaxjji(i32 2, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupSMinjji(i32 2, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupSMinjji(i32 2, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupSMinjji(i32 2, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljji(i32 2, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljji(i32 2, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljji(i32 2, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupIAddjji(i32 2, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupIAddjji(i32 2, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupIAddjji(i32 2, i32 2, i32 1) // uint32_t -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjjj(i32 2, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjjj(i32 2, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjjj(i32 2, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjjj(i32 2, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjjj(i32 2, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjjj(i32 2, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjjj(i32 2, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjjj(i32 2, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjjj(i32 2, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupUMaxjjj(i32 2, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupUMaxjjj(i32 2, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupUMaxjjj(i32 2, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupUMinjjj(i32 2, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupUMinjjj(i32 2, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupUMinjjj(i32 2, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljjj(i32 2, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljjj(i32 2, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljjj(i32 2, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupIAddjjj(i32 2, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupIAddjjj(i32 2, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupIAddjjj(i32 2, i32 2, i32 %[[#]]) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjjj(i32 2, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjjj(i32 2, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjjj(i32 2, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjjj(i32 2, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjjj(i32 2, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjjj(i32 2, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjjj(i32 2, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjjj(i32 2, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjjj(i32 2, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupUMaxjjj(i32 2, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupUMaxjjj(i32 2, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupUMaxjjj(i32 2, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupUMinjjj(i32 2, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupUMinjjj(i32 2, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupUMinjjj(i32 2, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljjj(i32 2, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljjj(i32 2, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljjj(i32 2, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupIAddjjj(i32 2, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupIAddjjj(i32 2, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupIAddjjj(i32 2, i32 2, i32 1) // int64_t (Linux: long, Windows: long long) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjj{{l|x}}(i32 2, i32 0, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjj{{l|x}}(i32 2, i32 1, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjj{{l|x}}(i32 2, i32 2, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjj{{l|x}}(i32 2, i32 0, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjj{{l|x}}(i32 2, i32 1, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjj{{l|x}}(i32 2, i32 2, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjj{{l|x}}(i32 2, i32 0, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjj{{l|x}}(i32 2, i32 1, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjj{{l|x}}(i32 2, i32 2, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupSMaxjj{{l|x}}(i32 2, i32 0, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupSMaxjj{{l|x}}(i32 2, i32 1, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupSMaxjj{{l|x}}(i32 2, i32 2, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupSMinjj{{l|x}}(i32 2, i32 0, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupSMinjj{{l|x}}(i32 2, i32 1, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupSMinjj{{l|x}}(i32 2, i32 2, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformIMuljj{{l|x}}(i32 2, i32 0, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformIMuljj{{l|x}}(i32 2, i32 1, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformIMuljj{{l|x}}(i32 2, i32 2, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupIAddjj{{l|x}}(i32 2, i32 0, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupIAddjj{{l|x}}(i32 2, i32 1, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupIAddjj{{l|x}}(i32 2, i32 2, i64 %[[#]]) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjj{{l|x}}(i32 2, i32 0, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjj{{l|x}}(i32 2, i32 1, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjj{{l|x}}(i32 2, i32 2, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjj{{l|x}}(i32 2, i32 0, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjj{{l|x}}(i32 2, i32 1, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjj{{l|x}}(i32 2, i32 2, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjj{{l|x}}(i32 2, i32 0, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjj{{l|x}}(i32 2, i32 1, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjj{{l|x}}(i32 2, i32 2, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupSMaxjj{{l|x}}(i32 2, i32 0, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupSMaxjj{{l|x}}(i32 2, i32 1, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupSMaxjj{{l|x}}(i32 2, i32 2, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupSMinjj{{l|x}}(i32 2, i32 0, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupSMinjj{{l|x}}(i32 2, i32 1, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupSMinjj{{l|x}}(i32 2, i32 2, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformIMuljj{{l|x}}(i32 2, i32 0, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformIMuljj{{l|x}}(i32 2, i32 1, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformIMuljj{{l|x}}(i32 2, i32 2, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupIAddjj{{l|x}}(i32 2, i32 0, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupIAddjj{{l|x}}(i32 2, i32 1, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupIAddjj{{l|x}}(i32 2, i32 2, i64 1) // uint64_t (Linux: unsigned long, Windows: unsigned long long) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjj{{m|y}}(i32 2, i32 0, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjj{{m|y}}(i32 2, i32 1, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjj{{m|y}}(i32 2, i32 2, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjj{{m|y}}(i32 2, i32 0, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjj{{m|y}}(i32 2, i32 1, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjj{{m|y}}(i32 2, i32 2, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjj{{m|y}}(i32 2, i32 0, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjj{{m|y}}(i32 2, i32 1, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjj{{m|y}}(i32 2, i32 2, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupUMaxjj{{m|y}}(i32 2, i32 0, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupUMaxjj{{m|y}}(i32 2, i32 1, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupUMaxjj{{m|y}}(i32 2, i32 2, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupUMinjj{{m|y}}(i32 2, i32 0, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupUMinjj{{m|y}}(i32 2, i32 1, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupUMinjj{{m|y}}(i32 2, i32 2, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformIMuljj{{m|y}}(i32 2, i32 0, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformIMuljj{{m|y}}(i32 2, i32 1, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformIMuljj{{m|y}}(i32 2, i32 2, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupIAddjj{{m|y}}(i32 2, i32 0, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupIAddjj{{m|y}}(i32 2, i32 1, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupIAddjj{{m|y}}(i32 2, i32 2, i64 %[[#]]) - -// half -// CHECK: %{{.*}} = call spir_func half @_Z[[#]]__spirv_GroupFMaxjjDF16_(i32 2, i32 0, half %[[#]]) -// CHECK: %{{.*}} = call spir_func half @_Z[[#]]__spirv_GroupFMaxjjDF16_(i32 2, i32 1, half %[[#]]) -// CHECK: %{{.*}} = call spir_func half @_Z[[#]]__spirv_GroupFMaxjjDF16_(i32 2, i32 2, half %[[#]]) -// CHECK: %{{.*}} = call spir_func half @_Z[[#]]__spirv_GroupFMinjjDF16_(i32 2, i32 0, half %[[#]]) -// CHECK: %{{.*}} = call spir_func half @_Z[[#]]__spirv_GroupFMinjjDF16_(i32 2, i32 1, half %[[#]]) -// CHECK: %{{.*}} = call spir_func half @_Z[[#]]__spirv_GroupFMinjjDF16_(i32 2, i32 2, half %[[#]]) -// CHECK: %{{.*}} = call spir_func half @_Z[[#]]__spirv_GroupNonUniformFMuljjDF16_(i32 2, i32 0, half %[[#]]) -// CHECK: %{{.*}} = call spir_func half @_Z[[#]]__spirv_GroupNonUniformFMuljjDF16_(i32 2, i32 1, half %[[#]]) -// CHECK: %{{.*}} = call spir_func half @_Z[[#]]__spirv_GroupNonUniformFMuljjDF16_(i32 2, i32 2, half %[[#]]) -// CHECK: %{{.*}} = call spir_func half @_Z[[#]]__spirv_GroupFAddjjDF16_(i32 2, i32 0, half %[[#]]) -// CHECK: %{{.*}} = call spir_func half @_Z[[#]]__spirv_GroupFAddjjDF16_(i32 2, i32 1, half %[[#]]) -// CHECK: %{{.*}} = call spir_func half @_Z[[#]]__spirv_GroupFAddjjDF16_(i32 2, i32 2, half %[[#]]) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjj{{m|y}}(i32 2, i32 0, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjj{{m|y}}(i32 2, i32 1, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjj{{m|y}}(i32 2, i32 2, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjj{{m|y}}(i32 2, i32 0, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjj{{m|y}}(i32 2, i32 1, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjj{{m|y}}(i32 2, i32 2, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjj{{m|y}}(i32 2, i32 0, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjj{{m|y}}(i32 2, i32 1, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjj{{m|y}}(i32 2, i32 2, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupUMaxjj{{m|y}}(i32 2, i32 0, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupUMaxjj{{m|y}}(i32 2, i32 1, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupUMaxjj{{m|y}}(i32 2, i32 2, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupUMinjj{{m|y}}(i32 2, i32 0, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupUMinjj{{m|y}}(i32 2, i32 1, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupUMinjj{{m|y}}(i32 2, i32 2, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformIMuljj{{m|y}}(i32 2, i32 0, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformIMuljj{{m|y}}(i32 2, i32 1, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformIMuljj{{m|y}}(i32 2, i32 2, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupIAddjj{{m|y}}(i32 2, i32 0, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupIAddjj{{m|y}}(i32 2, i32 1, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupIAddjj{{m|y}}(i32 2, i32 2, i64 1) + +// half (0xH3C00 = 1) +// CHECK: call spir_func half @_Z[[#]]__spirv_GroupFMaxjjDF16_(i32 2, i32 0, half 0xH3C00) +// CHECK: call spir_func half @_Z[[#]]__spirv_GroupFMaxjjDF16_(i32 2, i32 1, half 0xH3C00) +// CHECK: call spir_func half @_Z[[#]]__spirv_GroupFMaxjjDF16_(i32 2, i32 2, half 0xH3C00) +// CHECK: call spir_func half @_Z[[#]]__spirv_GroupFMinjjDF16_(i32 2, i32 0, half 0xH3C00) +// CHECK: call spir_func half @_Z[[#]]__spirv_GroupFMinjjDF16_(i32 2, i32 1, half 0xH3C00) +// CHECK: call spir_func half @_Z[[#]]__spirv_GroupFMinjjDF16_(i32 2, i32 2, half 0xH3C00) +// CHECK: call spir_func half @_Z[[#]]__spirv_GroupNonUniformFMuljjDF16_(i32 2, i32 0, half 0xH3C00) +// CHECK: call spir_func half @_Z[[#]]__spirv_GroupNonUniformFMuljjDF16_(i32 2, i32 1, half 0xH3C00) +// CHECK: call spir_func half @_Z[[#]]__spirv_GroupNonUniformFMuljjDF16_(i32 2, i32 2, half 0xH3C00) +// CHECK: call spir_func half @_Z[[#]]__spirv_GroupFAddjjDF16_(i32 2, i32 0, half 0xH3C00) +// CHECK: call spir_func half @_Z[[#]]__spirv_GroupFAddjjDF16_(i32 2, i32 1, half 0xH3C00) +// CHECK: call spir_func half @_Z[[#]]__spirv_GroupFAddjjDF16_(i32 2, i32 2, half 0xH3C00) // float -// CHECK: %{{.*}} = call spir_func float @_Z[[#]]__spirv_GroupFMaxjjf(i32 2, i32 0, float %[[#]]) -// CHECK: %{{.*}} = call spir_func float @_Z[[#]]__spirv_GroupFMaxjjf(i32 2, i32 1, float %[[#]]) -// CHECK: %{{.*}} = call spir_func float @_Z[[#]]__spirv_GroupFMaxjjf(i32 2, i32 2, float %[[#]]) -// CHECK: %{{.*}} = call spir_func float @_Z[[#]]__spirv_GroupFMinjjf(i32 2, i32 0, float %[[#]]) -// CHECK: %{{.*}} = call spir_func float @_Z[[#]]__spirv_GroupFMinjjf(i32 2, i32 1, float %[[#]]) -// CHECK: %{{.*}} = call spir_func float @_Z[[#]]__spirv_GroupFMinjjf(i32 2, i32 2, float %[[#]]) -// CHECK: %{{.*}} = call spir_func float @_Z[[#]]__spirv_GroupNonUniformFMuljjf(i32 2, i32 0, float %[[#]]) -// CHECK: %{{.*}} = call spir_func float @_Z[[#]]__spirv_GroupNonUniformFMuljjf(i32 2, i32 1, float %[[#]]) -// CHECK: %{{.*}} = call spir_func float @_Z[[#]]__spirv_GroupNonUniformFMuljjf(i32 2, i32 2, float %[[#]]) -// CHECK: %{{.*}} = call spir_func float @_Z[[#]]__spirv_GroupFAddjjf(i32 2, i32 0, float %[[#]]) -// CHECK: %{{.*}} = call spir_func float @_Z[[#]]__spirv_GroupFAddjjf(i32 2, i32 1, float %[[#]]) -// CHECK: %{{.*}} = call spir_func float @_Z[[#]]__spirv_GroupFAddjjf(i32 2, i32 2, float %[[#]]) +// CHECK: call spir_func float @_Z[[#]]__spirv_GroupFMaxjjf(i32 2, i32 0, float 1.000000e+00) +// CHECK: call spir_func float @_Z[[#]]__spirv_GroupFMaxjjf(i32 2, i32 1, float 1.000000e+00) +// CHECK: call spir_func float @_Z[[#]]__spirv_GroupFMaxjjf(i32 2, i32 2, float 1.000000e+00) +// CHECK: call spir_func float @_Z[[#]]__spirv_GroupFMinjjf(i32 2, i32 0, float 1.000000e+00) +// CHECK: call spir_func float @_Z[[#]]__spirv_GroupFMinjjf(i32 2, i32 1, float 1.000000e+00) +// CHECK: call spir_func float @_Z[[#]]__spirv_GroupFMinjjf(i32 2, i32 2, float 1.000000e+00) +// CHECK: call spir_func float @_Z[[#]]__spirv_GroupNonUniformFMuljjf(i32 2, i32 0, float 1.000000e+00) +// CHECK: call spir_func float @_Z[[#]]__spirv_GroupNonUniformFMuljjf(i32 2, i32 1, float 1.000000e+00) +// CHECK: call spir_func float @_Z[[#]]__spirv_GroupNonUniformFMuljjf(i32 2, i32 2, float 1.000000e+00) +// CHECK: call spir_func float @_Z[[#]]__spirv_GroupFAddjjf(i32 2, i32 0, float 1.000000e+00) +// CHECK: call spir_func float @_Z[[#]]__spirv_GroupFAddjjf(i32 2, i32 1, float 1.000000e+00) +// CHECK: call spir_func float @_Z[[#]]__spirv_GroupFAddjjf(i32 2, i32 2, float 1.000000e+00) // double -// CHECK: %{{.*}} = call spir_func double @_Z[[#]]__spirv_GroupFMaxjjd(i32 2, i32 0, double %[[#]]) -// CHECK: %{{.*}} = call spir_func double @_Z[[#]]__spirv_GroupFMaxjjd(i32 2, i32 1, double %[[#]]) -// CHECK: %{{.*}} = call spir_func double @_Z[[#]]__spirv_GroupFMaxjjd(i32 2, i32 2, double %[[#]]) -// CHECK: %{{.*}} = call spir_func double @_Z[[#]]__spirv_GroupFMinjjd(i32 2, i32 0, double %[[#]]) -// CHECK: %{{.*}} = call spir_func double @_Z[[#]]__spirv_GroupFMinjjd(i32 2, i32 1, double %[[#]]) -// CHECK: %{{.*}} = call spir_func double @_Z[[#]]__spirv_GroupFMinjjd(i32 2, i32 2, double %[[#]]) -// CHECK: %{{.*}} = call spir_func double @_Z[[#]]__spirv_GroupNonUniformFMuljjd(i32 2, i32 0, double %[[#]]) -// CHECK: %{{.*}} = call spir_func double @_Z[[#]]__spirv_GroupNonUniformFMuljjd(i32 2, i32 1, double %[[#]]) -// CHECK: %{{.*}} = call spir_func double @_Z[[#]]__spirv_GroupNonUniformFMuljjd(i32 2, i32 2, double %[[#]]) -// CHECK: %{{.*}} = call spir_func double @_Z[[#]]__spirv_GroupFAddjjd(i32 2, i32 0, double %[[#]]) -// CHECK: %{{.*}} = call spir_func double @_Z[[#]]__spirv_GroupFAddjjd(i32 2, i32 1, double %[[#]]) -// CHECK: %{{.*}} = call spir_func double @_Z[[#]]__spirv_GroupFAddjjd(i32 2, i32 2, double %[[#]]) +// CHECK: call spir_func double @_Z[[#]]__spirv_GroupFMaxjjd(i32 2, i32 0, double 1.000000e+00) +// CHECK: call spir_func double @_Z[[#]]__spirv_GroupFMaxjjd(i32 2, i32 1, double 1.000000e+00) +// CHECK: call spir_func double @_Z[[#]]__spirv_GroupFMaxjjd(i32 2, i32 2, double 1.000000e+00) +// CHECK: call spir_func double @_Z[[#]]__spirv_GroupFMinjjd(i32 2, i32 0, double 1.000000e+00) +// CHECK: call spir_func double @_Z[[#]]__spirv_GroupFMinjjd(i32 2, i32 1, double 1.000000e+00) +// CHECK: call spir_func double @_Z[[#]]__spirv_GroupFMinjjd(i32 2, i32 2, double 1.000000e+00) +// CHECK: call spir_func double @_Z[[#]]__spirv_GroupNonUniformFMuljjd(i32 2, i32 0, double 1.000000e+00) +// CHECK: call spir_func double @_Z[[#]]__spirv_GroupNonUniformFMuljjd(i32 2, i32 1, double 1.000000e+00) +// CHECK: call spir_func double @_Z[[#]]__spirv_GroupNonUniformFMuljjd(i32 2, i32 2, double 1.000000e+00) +// CHECK: call spir_func double @_Z[[#]]__spirv_GroupFAddjjd(i32 2, i32 0, double 1.000000e+00) +// CHECK: call spir_func double @_Z[[#]]__spirv_GroupFAddjjd(i32 2, i32 1, double 1.000000e+00) +// CHECK: call spir_func double @_Z[[#]]__spirv_GroupFAddjjd(i32 2, i32 2, double 1.000000e+00) SYCL_EXTERNAL void test_sub_group(sub_group g) { test(g); } +// +// Broadcast +// + +// int8_t +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupBroadcastjij(i32 3, i32 1, i32 0) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupBroadcastjij(i32 3, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupBroadcastjij(i32 3, i32 1, i32 2) + +// uint8_t +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupBroadcastjjj(i32 3, i32 1, i32 0) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupBroadcastjjj(i32 3, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupBroadcastjjj(i32 3, i32 1, i32 2) + +// int16_t +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupBroadcastjij(i32 3, i32 1, i32 0) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupBroadcastjij(i32 3, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupBroadcastjij(i32 3, i32 1, i32 2) + +// uint16_t +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupBroadcastjjj(i32 3, i32 1, i32 0) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupBroadcastjjj(i32 3, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupBroadcastjjj(i32 3, i32 1, i32 2) + +// int32_t +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupBroadcastjij(i32 3, i32 1, i32 0) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupBroadcastjij(i32 3, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupBroadcastjij(i32 3, i32 1, i32 2) + +// uint32_t +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupBroadcastjjj(i32 3, i32 1, i32 0) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupBroadcastjjj(i32 3, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupBroadcastjjj(i32 3, i32 1, i32 2) + +// int64_t (Linux: long, Windows: long long) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupBroadcastj{{l|x}}j(i32 3, i64 1, i32 0) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupBroadcastj{{l|x}}j(i32 3, i64 1, i32 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupBroadcastj{{l|x}}j(i32 3, i64 1, i32 2) + +// uint64_t (Linux: long, Windows: long long) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupBroadcastj{{m|y}}j(i32 3, i64 1, i32 0) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupBroadcastj{{m|y}}j(i32 3, i64 1, i32 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupBroadcastj{{m|y}}j(i32 3, i64 1, i32 2) + +// half (15360 = 0xH3C00 = 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupBroadcastjjj(i32 3, i32 15360, i32 0) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupBroadcastjjj(i32 3, i32 15360, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupBroadcastjjj(i32 3, i32 15360, i32 2) + +// float +// CHECK: call spir_func float @_Z[[#]]__spirv_GroupBroadcastjfj(i32 3, float 1.000000e+00, i32 0) +// CHECK: call spir_func float @_Z[[#]]__spirv_GroupBroadcastjfj(i32 3, float 1.000000e+00, i32 1) +// CHECK: call spir_func float @_Z[[#]]__spirv_GroupBroadcastjfj(i32 3, float 1.000000e+00, i32 2) + +// double +// CHECK: call spir_func double @_Z[[#]]__spirv_GroupBroadcastjdj(i32 3, double 1.000000e+00, i32 0) +// CHECK: call spir_func double @_Z[[#]]__spirv_GroupBroadcastjdj(i32 3, double 1.000000e+00, i32 1) +// CHECK: call spir_func double @_Z[[#]]__spirv_GroupBroadcastjdj(i32 3, double 1.000000e+00, i32 2) + +// +// Binary operations +// + // int8_t -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjji(i32 3, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjji(i32 3, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjji(i32 3, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjji(i32 3, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjji(i32 3, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjji(i32 3, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjji(i32 3, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjji(i32 3, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjji(i32 3, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupSMaxjji(i32 3, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupSMaxjji(i32 3, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupSMaxjji(i32 3, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupSMinjji(i32 3, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupSMinjji(i32 3, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupSMinjji(i32 3, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljji(i32 3, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljji(i32 3, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljji(i32 3, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupIAddjji(i32 3, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupIAddjji(i32 3, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupIAddjji(i32 3, i32 2, i32 %[[#]]) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjji(i32 3, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjji(i32 3, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjji(i32 3, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjji(i32 3, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjji(i32 3, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjji(i32 3, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjji(i32 3, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjji(i32 3, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjji(i32 3, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupSMaxjji(i32 3, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupSMaxjji(i32 3, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupSMaxjji(i32 3, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupSMinjji(i32 3, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupSMinjji(i32 3, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupSMinjji(i32 3, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljji(i32 3, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljji(i32 3, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljji(i32 3, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupIAddjji(i32 3, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupIAddjji(i32 3, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupIAddjji(i32 3, i32 2, i32 1) // uint8_t -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjjj(i32 3, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjjj(i32 3, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjjj(i32 3, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjjj(i32 3, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjjj(i32 3, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjjj(i32 3, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjjj(i32 3, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjjj(i32 3, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjjj(i32 3, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupUMaxjjj(i32 3, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupUMaxjjj(i32 3, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupUMaxjjj(i32 3, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupUMinjjj(i32 3, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupUMinjjj(i32 3, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupUMinjjj(i32 3, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljjj(i32 3, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljjj(i32 3, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljjj(i32 3, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupIAddjjj(i32 3, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupIAddjjj(i32 3, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupIAddjjj(i32 3, i32 2, i32 %[[#]]) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjjj(i32 3, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjjj(i32 3, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjjj(i32 3, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjjj(i32 3, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjjj(i32 3, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjjj(i32 3, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjjj(i32 3, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjjj(i32 3, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjjj(i32 3, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupUMaxjjj(i32 3, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupUMaxjjj(i32 3, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupUMaxjjj(i32 3, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupUMinjjj(i32 3, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupUMinjjj(i32 3, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupUMinjjj(i32 3, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljjj(i32 3, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljjj(i32 3, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljjj(i32 3, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupIAddjjj(i32 3, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupIAddjjj(i32 3, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupIAddjjj(i32 3, i32 2, i32 1) // int16_t -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjji(i32 3, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjji(i32 3, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjji(i32 3, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjji(i32 3, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjji(i32 3, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjji(i32 3, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjji(i32 3, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjji(i32 3, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjji(i32 3, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupSMaxjji(i32 3, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupSMaxjji(i32 3, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupSMaxjji(i32 3, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupSMinjji(i32 3, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupSMinjji(i32 3, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupSMinjji(i32 3, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljji(i32 3, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljji(i32 3, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljji(i32 3, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupIAddjji(i32 3, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupIAddjji(i32 3, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupIAddjji(i32 3, i32 2, i32 %[[#]]) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjji(i32 3, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjji(i32 3, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjji(i32 3, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjji(i32 3, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjji(i32 3, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjji(i32 3, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjji(i32 3, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjji(i32 3, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjji(i32 3, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupSMaxjji(i32 3, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupSMaxjji(i32 3, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupSMaxjji(i32 3, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupSMinjji(i32 3, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupSMinjji(i32 3, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupSMinjji(i32 3, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljji(i32 3, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljji(i32 3, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljji(i32 3, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupIAddjji(i32 3, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupIAddjji(i32 3, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupIAddjji(i32 3, i32 2, i32 1) // uint16_t -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjjj(i32 3, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjjj(i32 3, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjjj(i32 3, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjjj(i32 3, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjjj(i32 3, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjjj(i32 3, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjjj(i32 3, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjjj(i32 3, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjjj(i32 3, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupUMaxjjj(i32 3, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupUMaxjjj(i32 3, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupUMaxjjj(i32 3, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupUMinjjj(i32 3, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupUMinjjj(i32 3, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupUMinjjj(i32 3, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljjj(i32 3, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljjj(i32 3, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljjj(i32 3, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupIAddjjj(i32 3, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupIAddjjj(i32 3, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupIAddjjj(i32 3, i32 2, i32 %[[#]]) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjjj(i32 3, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjjj(i32 3, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjjj(i32 3, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjjj(i32 3, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjjj(i32 3, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjjj(i32 3, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjjj(i32 3, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjjj(i32 3, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjjj(i32 3, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupUMaxjjj(i32 3, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupUMaxjjj(i32 3, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupUMaxjjj(i32 3, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupUMinjjj(i32 3, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupUMinjjj(i32 3, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupUMinjjj(i32 3, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljjj(i32 3, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljjj(i32 3, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljjj(i32 3, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupIAddjjj(i32 3, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupIAddjjj(i32 3, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupIAddjjj(i32 3, i32 2, i32 1) // int32_t -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjji(i32 3, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjji(i32 3, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjji(i32 3, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjji(i32 3, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjji(i32 3, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjji(i32 3, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjji(i32 3, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjji(i32 3, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjji(i32 3, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupSMaxjji(i32 3, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupSMaxjji(i32 3, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupSMaxjji(i32 3, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupSMinjji(i32 3, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupSMinjji(i32 3, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupSMinjji(i32 3, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljji(i32 3, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljji(i32 3, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljji(i32 3, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupIAddjji(i32 3, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupIAddjji(i32 3, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupIAddjji(i32 3, i32 2, i32 %[[#]]) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjji(i32 3, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjji(i32 3, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjji(i32 3, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjji(i32 3, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjji(i32 3, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjji(i32 3, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjji(i32 3, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjji(i32 3, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjji(i32 3, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupSMaxjji(i32 3, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupSMaxjji(i32 3, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupSMaxjji(i32 3, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupSMinjji(i32 3, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupSMinjji(i32 3, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupSMinjji(i32 3, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljji(i32 3, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljji(i32 3, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljji(i32 3, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupIAddjji(i32 3, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupIAddjji(i32 3, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupIAddjji(i32 3, i32 2, i32 1) // uint32_t -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjjj(i32 3, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjjj(i32 3, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjjj(i32 3, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjjj(i32 3, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjjj(i32 3, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjjj(i32 3, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjjj(i32 3, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjjj(i32 3, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjjj(i32 3, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupUMaxjjj(i32 3, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupUMaxjjj(i32 3, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupUMaxjjj(i32 3, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupUMinjjj(i32 3, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupUMinjjj(i32 3, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupUMinjjj(i32 3, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljjj(i32 3, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljjj(i32 3, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljjj(i32 3, i32 2, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupIAddjjj(i32 3, i32 0, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupIAddjjj(i32 3, i32 1, i32 %[[#]]) -// CHECK: %{{.*}} = call spir_func i32 @_Z[[#]]__spirv_GroupIAddjjj(i32 3, i32 2, i32 %[[#]]) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjjj(i32 3, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjjj(i32 3, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjjj(i32 3, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjjj(i32 3, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjjj(i32 3, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjjj(i32 3, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjjj(i32 3, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjjj(i32 3, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjjj(i32 3, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupUMaxjjj(i32 3, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupUMaxjjj(i32 3, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupUMaxjjj(i32 3, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupUMinjjj(i32 3, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupUMinjjj(i32 3, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupUMinjjj(i32 3, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljjj(i32 3, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljjj(i32 3, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupNonUniformIMuljjj(i32 3, i32 2, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupIAddjjj(i32 3, i32 0, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupIAddjjj(i32 3, i32 1, i32 1) +// CHECK: call spir_func i32 @_Z[[#]]__spirv_GroupIAddjjj(i32 3, i32 2, i32 1) // int64_t (Linux: long, Windows: long long) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjj{{l|x}}(i32 3, i32 0, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjj{{l|x}}(i32 3, i32 1, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjj{{l|x}}(i32 3, i32 2, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjj{{l|x}}(i32 3, i32 0, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjj{{l|x}}(i32 3, i32 1, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjj{{l|x}}(i32 3, i32 2, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjj{{l|x}}(i32 3, i32 0, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjj{{l|x}}(i32 3, i32 1, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjj{{l|x}}(i32 3, i32 2, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupSMaxjj{{l|x}}(i32 3, i32 0, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupSMaxjj{{l|x}}(i32 3, i32 1, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupSMaxjj{{l|x}}(i32 3, i32 2, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupSMinjj{{l|x}}(i32 3, i32 0, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupSMinjj{{l|x}}(i32 3, i32 1, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupSMinjj{{l|x}}(i32 3, i32 2, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformIMuljj{{l|x}}(i32 3, i32 0, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformIMuljj{{l|x}}(i32 3, i32 1, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformIMuljj{{l|x}}(i32 3, i32 2, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupIAddjj{{l|x}}(i32 3, i32 0, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupIAddjj{{l|x}}(i32 3, i32 1, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupIAddjj{{l|x}}(i32 3, i32 2, i64 %[[#]]) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjj{{l|x}}(i32 3, i32 0, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjj{{l|x}}(i32 3, i32 1, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjj{{l|x}}(i32 3, i32 2, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjj{{l|x}}(i32 3, i32 0, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjj{{l|x}}(i32 3, i32 1, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjj{{l|x}}(i32 3, i32 2, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjj{{l|x}}(i32 3, i32 0, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjj{{l|x}}(i32 3, i32 1, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjj{{l|x}}(i32 3, i32 2, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupSMaxjj{{l|x}}(i32 3, i32 0, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupSMaxjj{{l|x}}(i32 3, i32 1, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupSMaxjj{{l|x}}(i32 3, i32 2, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupSMinjj{{l|x}}(i32 3, i32 0, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupSMinjj{{l|x}}(i32 3, i32 1, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupSMinjj{{l|x}}(i32 3, i32 2, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformIMuljj{{l|x}}(i32 3, i32 0, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformIMuljj{{l|x}}(i32 3, i32 1, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformIMuljj{{l|x}}(i32 3, i32 2, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupIAddjj{{l|x}}(i32 3, i32 0, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupIAddjj{{l|x}}(i32 3, i32 1, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupIAddjj{{l|x}}(i32 3, i32 2, i64 1) // uint64_t (Linux: unsigned long, Windows: unsigned long long) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjj{{m|y}}(i32 3, i32 0, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjj{{m|y}}(i32 3, i32 1, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjj{{m|y}}(i32 3, i32 2, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjj{{m|y}}(i32 3, i32 0, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjj{{m|y}}(i32 3, i32 1, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjj{{m|y}}(i32 3, i32 2, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjj{{m|y}}(i32 3, i32 0, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjj{{m|y}}(i32 3, i32 1, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjj{{m|y}}(i32 3, i32 2, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupUMaxjj{{m|y}}(i32 3, i32 0, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupUMaxjj{{m|y}}(i32 3, i32 1, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupUMaxjj{{m|y}}(i32 3, i32 2, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupUMinjj{{m|y}}(i32 3, i32 0, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupUMinjj{{m|y}}(i32 3, i32 1, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupUMinjj{{m|y}}(i32 3, i32 2, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformIMuljj{{m|y}}(i32 3, i32 0, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformIMuljj{{m|y}}(i32 3, i32 1, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformIMuljj{{m|y}}(i32 3, i32 2, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupIAddjj{{m|y}}(i32 3, i32 0, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupIAddjj{{m|y}}(i32 3, i32 1, i64 %[[#]]) -// CHECK: %{{.*}} = call spir_func i64 @_Z[[#]]__spirv_GroupIAddjj{{m|y}}(i32 3, i32 2, i64 %[[#]]) - -// half -// CHECK: %{{.*}} = call spir_func half @_Z[[#]]__spirv_GroupFMaxjjDF16_(i32 3, i32 0, half %[[#]]) -// CHECK: %{{.*}} = call spir_func half @_Z[[#]]__spirv_GroupFMaxjjDF16_(i32 3, i32 1, half %[[#]]) -// CHECK: %{{.*}} = call spir_func half @_Z[[#]]__spirv_GroupFMaxjjDF16_(i32 3, i32 2, half %[[#]]) -// CHECK: %{{.*}} = call spir_func half @_Z[[#]]__spirv_GroupFMinjjDF16_(i32 3, i32 0, half %[[#]]) -// CHECK: %{{.*}} = call spir_func half @_Z[[#]]__spirv_GroupFMinjjDF16_(i32 3, i32 1, half %[[#]]) -// CHECK: %{{.*}} = call spir_func half @_Z[[#]]__spirv_GroupFMinjjDF16_(i32 3, i32 2, half %[[#]]) -// CHECK: %{{.*}} = call spir_func half @_Z[[#]]__spirv_GroupNonUniformFMuljjDF16_(i32 3, i32 0, half %[[#]]) -// CHECK: %{{.*}} = call spir_func half @_Z[[#]]__spirv_GroupNonUniformFMuljjDF16_(i32 3, i32 1, half %[[#]]) -// CHECK: %{{.*}} = call spir_func half @_Z[[#]]__spirv_GroupNonUniformFMuljjDF16_(i32 3, i32 2, half %[[#]]) -// CHECK: %{{.*}} = call spir_func half @_Z[[#]]__spirv_GroupFAddjjDF16_(i32 3, i32 0, half %[[#]]) -// CHECK: %{{.*}} = call spir_func half @_Z[[#]]__spirv_GroupFAddjjDF16_(i32 3, i32 1, half %[[#]]) -// CHECK: %{{.*}} = call spir_func half @_Z[[#]]__spirv_GroupFAddjjDF16_(i32 3, i32 2, half %[[#]]) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjj{{m|y}}(i32 3, i32 0, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjj{{m|y}}(i32 3, i32 1, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseAndjj{{m|y}}(i32 3, i32 2, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjj{{m|y}}(i32 3, i32 0, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjj{{m|y}}(i32 3, i32 1, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseOrjj{{m|y}}(i32 3, i32 2, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjj{{m|y}}(i32 3, i32 0, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjj{{m|y}}(i32 3, i32 1, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformBitwiseXorjj{{m|y}}(i32 3, i32 2, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupUMaxjj{{m|y}}(i32 3, i32 0, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupUMaxjj{{m|y}}(i32 3, i32 1, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupUMaxjj{{m|y}}(i32 3, i32 2, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupUMinjj{{m|y}}(i32 3, i32 0, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupUMinjj{{m|y}}(i32 3, i32 1, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupUMinjj{{m|y}}(i32 3, i32 2, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformIMuljj{{m|y}}(i32 3, i32 0, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformIMuljj{{m|y}}(i32 3, i32 1, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupNonUniformIMuljj{{m|y}}(i32 3, i32 2, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupIAddjj{{m|y}}(i32 3, i32 0, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupIAddjj{{m|y}}(i32 3, i32 1, i64 1) +// CHECK: call spir_func i64 @_Z[[#]]__spirv_GroupIAddjj{{m|y}}(i32 3, i32 2, i64 1) + +// half (0xH3C00 = 1) +// CHECK: call spir_func half @_Z[[#]]__spirv_GroupFMaxjjDF16_(i32 3, i32 0, half 0xH3C00) +// CHECK: call spir_func half @_Z[[#]]__spirv_GroupFMaxjjDF16_(i32 3, i32 1, half 0xH3C00) +// CHECK: call spir_func half @_Z[[#]]__spirv_GroupFMaxjjDF16_(i32 3, i32 2, half 0xH3C00) +// CHECK: call spir_func half @_Z[[#]]__spirv_GroupFMinjjDF16_(i32 3, i32 0, half 0xH3C00) +// CHECK: call spir_func half @_Z[[#]]__spirv_GroupFMinjjDF16_(i32 3, i32 1, half 0xH3C00) +// CHECK: call spir_func half @_Z[[#]]__spirv_GroupFMinjjDF16_(i32 3, i32 2, half 0xH3C00) +// CHECK: call spir_func half @_Z[[#]]__spirv_GroupNonUniformFMuljjDF16_(i32 3, i32 0, half 0xH3C00) +// CHECK: call spir_func half @_Z[[#]]__spirv_GroupNonUniformFMuljjDF16_(i32 3, i32 1, half 0xH3C00) +// CHECK: call spir_func half @_Z[[#]]__spirv_GroupNonUniformFMuljjDF16_(i32 3, i32 2, half 0xH3C00) +// CHECK: call spir_func half @_Z[[#]]__spirv_GroupFAddjjDF16_(i32 3, i32 0, half 0xH3C00) +// CHECK: call spir_func half @_Z[[#]]__spirv_GroupFAddjjDF16_(i32 3, i32 1, half 0xH3C00) +// CHECK: call spir_func half @_Z[[#]]__spirv_GroupFAddjjDF16_(i32 3, i32 2, half 0xH3C00) // float -// CHECK: %{{.*}} = call spir_func float @_Z[[#]]__spirv_GroupFMaxjjf(i32 3, i32 0, float %[[#]]) -// CHECK: %{{.*}} = call spir_func float @_Z[[#]]__spirv_GroupFMaxjjf(i32 3, i32 1, float %[[#]]) -// CHECK: %{{.*}} = call spir_func float @_Z[[#]]__spirv_GroupFMaxjjf(i32 3, i32 2, float %[[#]]) -// CHECK: %{{.*}} = call spir_func float @_Z[[#]]__spirv_GroupFMinjjf(i32 3, i32 0, float %[[#]]) -// CHECK: %{{.*}} = call spir_func float @_Z[[#]]__spirv_GroupFMinjjf(i32 3, i32 1, float %[[#]]) -// CHECK: %{{.*}} = call spir_func float @_Z[[#]]__spirv_GroupFMinjjf(i32 3, i32 2, float %[[#]]) -// CHECK: %{{.*}} = call spir_func float @_Z[[#]]__spirv_GroupNonUniformFMuljjf(i32 3, i32 0, float %[[#]]) -// CHECK: %{{.*}} = call spir_func float @_Z[[#]]__spirv_GroupNonUniformFMuljjf(i32 3, i32 1, float %[[#]]) -// CHECK: %{{.*}} = call spir_func float @_Z[[#]]__spirv_GroupNonUniformFMuljjf(i32 3, i32 2, float %[[#]]) -// CHECK: %{{.*}} = call spir_func float @_Z[[#]]__spirv_GroupFAddjjf(i32 3, i32 0, float %[[#]]) -// CHECK: %{{.*}} = call spir_func float @_Z[[#]]__spirv_GroupFAddjjf(i32 3, i32 1, float %[[#]]) -// CHECK: %{{.*}} = call spir_func float @_Z[[#]]__spirv_GroupFAddjjf(i32 3, i32 2, float %[[#]]) +// CHECK: call spir_func float @_Z[[#]]__spirv_GroupFMaxjjf(i32 3, i32 0, float 1.000000e+00) +// CHECK: call spir_func float @_Z[[#]]__spirv_GroupFMaxjjf(i32 3, i32 1, float 1.000000e+00) +// CHECK: call spir_func float @_Z[[#]]__spirv_GroupFMaxjjf(i32 3, i32 2, float 1.000000e+00) +// CHECK: call spir_func float @_Z[[#]]__spirv_GroupFMinjjf(i32 3, i32 0, float 1.000000e+00) +// CHECK: call spir_func float @_Z[[#]]__spirv_GroupFMinjjf(i32 3, i32 1, float 1.000000e+00) +// CHECK: call spir_func float @_Z[[#]]__spirv_GroupFMinjjf(i32 3, i32 2, float 1.000000e+00) +// CHECK: call spir_func float @_Z[[#]]__spirv_GroupNonUniformFMuljjf(i32 3, i32 0, float 1.000000e+00) +// CHECK: call spir_func float @_Z[[#]]__spirv_GroupNonUniformFMuljjf(i32 3, i32 1, float 1.000000e+00) +// CHECK: call spir_func float @_Z[[#]]__spirv_GroupNonUniformFMuljjf(i32 3, i32 2, float 1.000000e+00) +// CHECK: call spir_func float @_Z[[#]]__spirv_GroupFAddjjf(i32 3, i32 0, float 1.000000e+00) +// CHECK: call spir_func float @_Z[[#]]__spirv_GroupFAddjjf(i32 3, i32 1, float 1.000000e+00) +// CHECK: call spir_func float @_Z[[#]]__spirv_GroupFAddjjf(i32 3, i32 2, float 1.000000e+00) // double -// CHECK: %{{.*}} = call spir_func double @_Z[[#]]__spirv_GroupFMaxjjd(i32 3, i32 0, double %[[#]]) -// CHECK: %{{.*}} = call spir_func double @_Z[[#]]__spirv_GroupFMaxjjd(i32 3, i32 1, double %[[#]]) -// CHECK: %{{.*}} = call spir_func double @_Z[[#]]__spirv_GroupFMaxjjd(i32 3, i32 2, double %[[#]]) -// CHECK: %{{.*}} = call spir_func double @_Z[[#]]__spirv_GroupFMinjjd(i32 3, i32 0, double %[[#]]) -// CHECK: %{{.*}} = call spir_func double @_Z[[#]]__spirv_GroupFMinjjd(i32 3, i32 1, double %[[#]]) -// CHECK: %{{.*}} = call spir_func double @_Z[[#]]__spirv_GroupFMinjjd(i32 3, i32 2, double %[[#]]) -// CHECK: %{{.*}} = call spir_func double @_Z[[#]]__spirv_GroupNonUniformFMuljjd(i32 3, i32 0, double %[[#]]) -// CHECK: %{{.*}} = call spir_func double @_Z[[#]]__spirv_GroupNonUniformFMuljjd(i32 3, i32 1, double %[[#]]) -// CHECK: %{{.*}} = call spir_func double @_Z[[#]]__spirv_GroupNonUniformFMuljjd(i32 3, i32 2, double %[[#]]) -// CHECK: %{{.*}} = call spir_func double @_Z[[#]]__spirv_GroupFAddjjd(i32 3, i32 0, double %[[#]]) -// CHECK: %{{.*}} = call spir_func double @_Z[[#]]__spirv_GroupFAddjjd(i32 3, i32 1, double %[[#]]) -// CHECK: %{{.*}} = call spir_func double @_Z[[#]]__spirv_GroupFAddjjd(i32 3, i32 2, double %[[#]]) +// CHECK: call spir_func double @_Z[[#]]__spirv_GroupFMaxjjd(i32 3, i32 0, double 1.000000e+00) +// CHECK: call spir_func double @_Z[[#]]__spirv_GroupFMaxjjd(i32 3, i32 1, double 1.000000e+00) +// CHECK: call spir_func double @_Z[[#]]__spirv_GroupFMaxjjd(i32 3, i32 2, double 1.000000e+00) +// CHECK: call spir_func double @_Z[[#]]__spirv_GroupFMinjjd(i32 3, i32 0, double 1.000000e+00) +// CHECK: call spir_func double @_Z[[#]]__spirv_GroupFMinjjd(i32 3, i32 1, double 1.000000e+00) +// CHECK: call spir_func double @_Z[[#]]__spirv_GroupFMinjjd(i32 3, i32 2, double 1.000000e+00) +// CHECK: call spir_func double @_Z[[#]]__spirv_GroupNonUniformFMuljjd(i32 3, i32 0, double 1.000000e+00) +// CHECK: call spir_func double @_Z[[#]]__spirv_GroupNonUniformFMuljjd(i32 3, i32 1, double 1.000000e+00) +// CHECK: call spir_func double @_Z[[#]]__spirv_GroupNonUniformFMuljjd(i32 3, i32 2, double 1.000000e+00) +// CHECK: call spir_func double @_Z[[#]]__spirv_GroupFAddjjd(i32 3, i32 0, double 1.000000e+00) +// CHECK: call spir_func double @_Z[[#]]__spirv_GroupFAddjjd(i32 3, i32 1, double 1.000000e+00) +// CHECK: call spir_func double @_Z[[#]]__spirv_GroupFAddjjd(i32 3, i32 2, double 1.000000e+00)