From ebf9322a50a799aa4bddd97e979fb272fa368cf5 Mon Sep 17 00:00:00 2001 From: Wenju He Date: Tue, 25 Mar 2025 01:33:59 -0700 Subject: [PATCH 1/2] [SYCL] Move GroupNonUniform SPIR-V built-in declarations to clang SPIRVBuiltins.td This PR changes scope parameter type from enum to int, aligning with SPV-IR. Mangling becomes more portable for targets that bypass SPIR-V. This PR constrains Id or Index type to be either uint32_t or uint64_t. --- clang/lib/Sema/SPIRVBuiltins.td | 108 +++++ ...spirv-builtin-lookup-group-non-uniform.cpp | 387 ++++++++++++++++++ .../spirv-builtin-lookup-group.cl | 6 +- .../lib/amdgcn-amdhsa/group/group_ballot.cl | 4 +- .../ptx-nvidiacl/group/group_non_uniform.cl | 8 +- sycl/include/sycl/__spirv/spirv_ops.hpp | 151 ------- 6 files changed, 504 insertions(+), 160 deletions(-) create mode 100644 clang/test/CodeGenSPIRV/spirv-builtin-lookup-group-non-uniform.cpp diff --git a/clang/lib/Sema/SPIRVBuiltins.td b/clang/lib/Sema/SPIRVBuiltins.td index 2e46b37cf6974..5acfeeb9f1e50 100644 --- a/clang/lib/Sema/SPIRVBuiltins.td +++ b/clang/lib/Sema/SPIRVBuiltins.td @@ -358,10 +358,13 @@ def Vec1234 : IntList<"Vec1234", [1, 2, 3, 4]>; // Type lists. def TLAll : TypeList<[Char, UChar, Short, UShort, Int, UInt, Long, ULong, Float, Double, Half]>; def TLAllUnsigned : TypeList<[UChar, UChar, UShort, UShort, UInt, UInt, ULong, ULong, UInt, ULong, UShort]>; +def TLAllWithBool : TypeList<[Bool, Char, UChar, Short, UShort, Int, UInt, Long, + ULong, Float, Double, Half]>; def TLFloat : TypeList<[Float, Double, Half]>; // FIXME: handle properly char (signed or unsigned depending on host) def TLSignedInts : TypeList<[Char, Short, Int, Long]>; def TLUnsignedInts : TypeList<[UChar, UShort, UInt, ULong]>; +def TLUnsignedIntLong : TypeList<[UInt, ULong]>; // Signed to Unsigned conversion // FIXME: handle properly char (signed or unsigned depending on host) @@ -383,6 +386,9 @@ def TLAllInts : TypeList<[Char, UChar, Short, UShort, Int, UInt, Long, ULo def AGenType1 : GenericType<"AGenType1", TLAll, Vec1>; def AGenTypeN : GenericType<"AGenTypeN", TLAll, VecAndScalar>; def AGenTypeNNoScalar : GenericType<"AGenTypeNNoScalar", TLAll, VecNoScalar>; +def AGenTypeNWithBool + : GenericType<"AGenTypeNWithBool", TLAllWithBool, VecAndScalar>; +def BoolGenTypeN : GenericType<"BoolGenTypeN", TypeList<[Bool]>, VecAndScalar>; // All integer def AIGenType1 : GenericType<"AIGenType1", TLAllInts, Vec1>; def AIGenTypeN : GenericType<"AIGenTypeN", TLAllInts, VecAndScalar>; @@ -395,6 +401,7 @@ def AI2UGenTypeN : GenericType<"AI2UGenTypeN", TLAllUIntsTwice, VecAnd def SGenTypeN : GenericType<"SGenTypeN", TLSignedInts, VecAndScalar>; // Unsigned integer def UGenTypeN : GenericType<"UGenTypeN", TLUnsignedInts, VecAndScalar>; +def UInt4 : GenericType<"UInt4", TypeList<[UInt]>, Vec4>; // Float def FGenTypeN : GenericType<"FGenTypeN", TLFloat, VecAndScalar>; // (u)int, (u)long, and all floats @@ -976,3 +983,104 @@ foreach name = ["GroupSMin", "GroupSMax"] in { foreach name = ["GroupLogicalAndKHR", "GroupLogicalOrKHR"] in { def : SPVBuiltin; } + +// 3.56.24. Non-Uniform Instructions + +foreach name = ["GroupNonUniformElect"] in { + def : SPVBuiltin; +} + +foreach name = ["GroupNonUniformAll", "GroupNonUniformAny"] in { + def : SPVBuiltin; +} + +foreach name = ["GroupNonUniformAllEqual"] in { + def : SPVBuiltin; +} + +foreach name = ["GroupNonUniformBroadcast", + "GroupNonUniformBroadcastFirst"] in { + foreach IDType = TLUnsignedIntLong.List in { + def : SPVBuiltin; + } +} + +foreach name = ["GroupNonUniformBallot"] in { + def : SPVBuiltin; +} + +foreach name = ["GroupNonUniformInverseBallot"] in { + def : SPVBuiltin; +} + +foreach name = ["GroupNonUniformBallotBitExtract"] in { + foreach IDType = TLUnsignedIntLong.List in { + def : SPVBuiltin; + } +} + +foreach name = ["GroupNonUniformBallotBitCount", "GroupNonUniformBallotFindLSB", + "GroupNonUniformBallotFindMSB"] in { + def : SPVBuiltin; +} + +foreach name = ["GroupNonUniformShuffle", "GroupNonUniformShuffleXor", + "GroupNonUniformShuffleUp", "GroupNonUniformShuffleDown"] in { + foreach IDType = TLUnsignedIntLong.List in { + def : SPVBuiltin; + } +} + +foreach name = ["GroupNonUniformIAdd", "GroupNonUniformIMul"] in { + def : SPVBuiltin; + foreach IDType = TLUnsignedIntLong.List in { + def : SPVBuiltin; + } +} + +foreach name = ["GroupNonUniformSMin", "GroupNonUniformSMax"] in { + def : SPVBuiltin; + foreach IDType = TLUnsignedIntLong.List in { + def : SPVBuiltin; + } +} + +foreach name = ["GroupNonUniformUMin", "GroupNonUniformUMax"] in { + def : SPVBuiltin; + foreach IDType = TLUnsignedIntLong.List in { + def : SPVBuiltin; + } +} + +foreach name = ["GroupNonUniformFAdd", "GroupNonUniformFMul", + "GroupNonUniformFMin", "GroupNonUniformFMax"] in { + def : SPVBuiltin; + foreach IDType = TLUnsignedIntLong.List in { + def : SPVBuiltin; + } +} + +foreach name = ["GroupNonUniformBitwiseAnd", "GroupNonUniformBitwiseOr", + "GroupNonUniformBitwiseXor"] in { + def : SPVBuiltin; + foreach IDType = TLUnsignedIntLong.List in { + def : SPVBuiltin; + } +} + +foreach name = ["GroupNonUniformLogicalAnd", "GroupNonUniformLogicalOr", + "GroupNonUniformLogicalXor"] in { + def : SPVBuiltin; + foreach IDType = TLUnsignedIntLong.List in { + def : SPVBuiltin; + } +} diff --git a/clang/test/CodeGenSPIRV/spirv-builtin-lookup-group-non-uniform.cpp b/clang/test/CodeGenSPIRV/spirv-builtin-lookup-group-non-uniform.cpp new file mode 100644 index 0000000000000..b85265fc4c84f --- /dev/null +++ b/clang/test/CodeGenSPIRV/spirv-builtin-lookup-group-non-uniform.cpp @@ -0,0 +1,387 @@ +// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -fdeclare-spirv-builtins -emit-llvm %s -o - | FileCheck %s + +bool group_elect() { return __spirv_GroupNonUniformElect(2); } + +bool group_all(bool predicate) { + return __spirv_GroupNonUniformAll(2, predicate); +} + +bool group_any(bool predicate) { + return __spirv_GroupNonUniformAny(2, predicate); +} + +template bool group_all_equal(T v) { + return __spirv_GroupNonUniformAllEqual(2, v); +} + +template T group_broad_cast(T v, unsigned int id) { + return __spirv_GroupNonUniformBroadcast(2, v, id); +} + +template T group_broad_cast_first(T v, unsigned int id) { + return __spirv_GroupNonUniformBroadcastFirst(2, v, id); +} + +typedef unsigned int uint4 __attribute__((ext_vector_type(4))); + +uint4 group_ballot(char v) { return __spirv_GroupNonUniformBallot(2, false); } + +bool group_inverse_ballot(uint4 v) { + return __spirv_GroupNonUniformInverseBallot(2, v); +} + +bool group_ballot_bit_extract(uint4 v, unsigned int id) { + return __spirv_GroupNonUniformBallotBitExtract(2, v, id); +} + +unsigned int group_ballot_bit_count(uint4 v) { + return __spirv_GroupNonUniformBallotBitCount(2, 0, v); +} + +unsigned int group_ballot_find_lsb(uint4 v) { + return __spirv_GroupNonUniformBallotFindLSB(2, 0, v); +} + +unsigned int group_ballot_find_msb(uint4 v) { + return __spirv_GroupNonUniformBallotFindMSB(2, 0, v); +} + +template T group_shuffle(T v, unsigned int id) { + return __spirv_GroupNonUniformShuffle(2, v, id); +} + +template T group_shuffle_xor(T v, unsigned int id) { + return __spirv_GroupNonUniformShuffleXor(2, v, id); +} + +template T group_shuffle_up(T v, unsigned int id) { + return __spirv_GroupNonUniformShuffleUp(2, v, id); +} + +template T group_shuffle_down(T v, unsigned int id) { + return __spirv_GroupNonUniformShuffleDown(2, v, id); +} + +template T group_iadd(T v, unsigned int id) { + return __spirv_GroupNonUniformIAdd(2, 0, v) + + __spirv_GroupNonUniformIAdd(2, 0, v, id); +} + +template T group_imul(T v, unsigned int id) { + return __spirv_GroupNonUniformIMul(2, 0, v) + + __spirv_GroupNonUniformIMul(2, 0, v, id); +} + +template T group_fadd(T v, unsigned int id) { + return __spirv_GroupNonUniformFAdd(2, 1, v) + + __spirv_GroupNonUniformFAdd(2, 1, v, id); +} + +template T group_fmin(T v, unsigned int id) { + return __spirv_GroupNonUniformFMin(2, 0, v) + + __spirv_GroupNonUniformFMin(2, 0, v, id); +} + +template T group_fmax(T v, unsigned int id) { + return __spirv_GroupNonUniformFMax(2, 0, v) + + __spirv_GroupNonUniformFMax(2, 0, v, id); +} + +template T group_fmul(T v, unsigned int id) { + return __spirv_GroupNonUniformFMul(2, 0, v) + + __spirv_GroupNonUniformFMul(2, 0, v, id); +} + +template T group_umin(T v, unsigned int id) { + return __spirv_GroupNonUniformUMin(2, 0, v) + + __spirv_GroupNonUniformUMin(2, 0, v, id); +} + +template T group_umax(T v, unsigned int id) { + return __spirv_GroupNonUniformUMax(2, 0, v) + + __spirv_GroupNonUniformUMax(2, 0, v, id); +} + +template T group_smin(T v, unsigned int id) { + return __spirv_GroupNonUniformSMin(2, 0, v) + + __spirv_GroupNonUniformSMin(2, 0, v, id); +} + +template T group_smax(T v, unsigned int id) { + return __spirv_GroupNonUniformSMax(2, 0, v) + + __spirv_GroupNonUniformSMax(2, 0, v, id); +} + +template T group_bitwise_and(T v, unsigned int id) { + return __spirv_GroupNonUniformBitwiseAnd(2, 0, v) + + __spirv_GroupNonUniformBitwiseAnd(2, 0, v, id); +} + +template T group_bitwise_or(T v, unsigned int id) { + return __spirv_GroupNonUniformBitwiseOr(2, 0, v) + + __spirv_GroupNonUniformBitwiseOr(2, 0, v, id); +} + +template T group_bitwise_xor(T v, unsigned int id) { + return __spirv_GroupNonUniformBitwiseXor(2, 0, v) + + __spirv_GroupNonUniformBitwiseXor(2, 0, v, id); +} + +template bool group_logical_and(bool v, unsigned int id) { + return __spirv_GroupNonUniformLogicalAnd(2, 0, v) + + __spirv_GroupNonUniformLogicalAnd(2, 0, v, id); +} + +template bool group_logical_or(bool v, unsigned int id) { + return __spirv_GroupNonUniformLogicalOr(2, 0, v) + + __spirv_GroupNonUniformLogicalOr(2, 0, v, id); +} + +template bool group_logical_xor(bool v, unsigned int id) { + return __spirv_GroupNonUniformLogicalXor(2, 0, v) + + __spirv_GroupNonUniformLogicalXor(2, 0, v, id); +} + +template void test_with_bool() { + T v = 0; + unsigned int id = 0; + group_all_equal(v); + group_broad_cast(v, id); + group_broad_cast_first(v, id); + group_shuffle(v, id); + group_shuffle_xor(v, id); + group_shuffle_up(v, id); + group_shuffle_down(v, id); +} + +template void test_integer() { + T v = 0; + unsigned int id = 0; + group_iadd(v, id); + group_imul(v, id); + group_bitwise_and(v, id); + group_bitwise_or(v, id); + group_bitwise_xor(v, id); +} + +template void test_signed() { + T v = 0; + unsigned int id = 0; + group_smin(v, id); + group_smax(v, id); +} + +template void test_unsigned() { + T v = 0; + unsigned int id = 0; + group_umin(v, id); + group_umax(v, id); +} + +template void test_logical() { + T v = 0; + unsigned int id = 0; + group_logical_and(v, id); + group_logical_or(v, id); + group_logical_xor(v, id); +} + +void test() { + test_with_bool(); + test_with_bool(); + test_with_bool(); + test_with_bool(); + test_with_bool(); + test_with_bool(); + test_with_bool(); + test_with_bool<_Float16>(); + test_with_bool(); + test_with_bool(); + + test_integer(); + test_integer(); + test_integer(); + test_integer(); + test_integer(); + test_integer(); + + test_signed(); + test_signed(); + test_signed(); + + test_unsigned(); + test_unsigned(); + test_unsigned(); + + test_logical(); +} + +// CHECK: call noundef zeroext i1 @_Z28__spirv_GroupNonUniformElecti +// CHECK: call noundef zeroext i1 @_Z26__spirv_GroupNonUniformAllib +// CHECK: call noundef zeroext i1 @_Z26__spirv_GroupNonUniformAnyib +// CHECK: call noundef <4 x i32> @_Z29__spirv_GroupNonUniformBallotib +// CHECK: call noundef zeroext i1 @_Z36__spirv_GroupNonUniformInverseBallotiDv4_j +// CHECK: call noundef zeroext i1 @_Z39__spirv_GroupNonUniformBallotBitExtractiDv4_jj +// CHECK: call noundef i32 @_Z37__spirv_GroupNonUniformBallotBitCountiiDv4_j +// CHECK: call noundef i32 @_Z36__spirv_GroupNonUniformBallotFindLSBiiDv4_j +// CHECK: call noundef i32 @_Z36__spirv_GroupNonUniformBallotFindMSBiiDv4_j +// CHECK: call noundef zeroext i1 @_Z31__spirv_GroupNonUniformAllEqualib +// CHECK: call noundef zeroext i1 @_Z32__spirv_GroupNonUniformBroadcastibj +// CHECK: call noundef zeroext i1 @_Z37__spirv_GroupNonUniformBroadcastFirstibj +// CHECK: call noundef zeroext i1 @_Z30__spirv_GroupNonUniformShuffleibj +// CHECK: call noundef zeroext i1 @_Z33__spirv_GroupNonUniformShuffleXoribj +// CHECK: call noundef zeroext i1 @_Z32__spirv_GroupNonUniformShuffleUpibj +// CHECK: call noundef zeroext i1 @_Z34__spirv_GroupNonUniformShuffleDownibj +// CHECK: call noundef zeroext i1 @_Z31__spirv_GroupNonUniformAllEqualii +// CHECK: call noundef i32 @_Z32__spirv_GroupNonUniformBroadcastiij +// CHECK: call noundef i32 @_Z37__spirv_GroupNonUniformBroadcastFirstiij +// CHECK: call noundef i32 @_Z30__spirv_GroupNonUniformShuffleiij +// CHECK: call noundef i32 @_Z33__spirv_GroupNonUniformShuffleXoriij +// CHECK: call noundef i32 @_Z32__spirv_GroupNonUniformShuffleUpiij +// CHECK: call noundef i32 @_Z34__spirv_GroupNonUniformShuffleDowniij +// CHECK: call noundef zeroext i1 @_Z31__spirv_GroupNonUniformAllEqualih +// CHECK: call noundef zeroext i8 @_Z32__spirv_GroupNonUniformBroadcastihj +// CHECK: call noundef zeroext i8 @_Z37__spirv_GroupNonUniformBroadcastFirstihj +// CHECK: call noundef zeroext i8 @_Z30__spirv_GroupNonUniformShuffleihj +// CHECK: call noundef zeroext i8 @_Z33__spirv_GroupNonUniformShuffleXorihj +// CHECK: call noundef zeroext i8 @_Z32__spirv_GroupNonUniformShuffleUpihj +// CHECK: call noundef zeroext i8 @_Z34__spirv_GroupNonUniformShuffleDownihj +// CHECK: call noundef zeroext i1 @_Z31__spirv_GroupNonUniformAllEqualis +// CHECK: call noundef signext i16 @_Z32__spirv_GroupNonUniformBroadcastisj +// CHECK: call noundef signext i16 @_Z37__spirv_GroupNonUniformBroadcastFirstisj +// CHECK: call noundef signext i16 @_Z30__spirv_GroupNonUniformShuffleisj +// CHECK: call noundef signext i16 @_Z33__spirv_GroupNonUniformShuffleXorisj +// CHECK: call noundef signext i16 @_Z32__spirv_GroupNonUniformShuffleUpisj +// CHECK: call noundef signext i16 @_Z34__spirv_GroupNonUniformShuffleDownisj +// CHECK: call noundef zeroext i1 @_Z31__spirv_GroupNonUniformAllEqualit +// CHECK: call noundef zeroext i16 @_Z32__spirv_GroupNonUniformBroadcastitj +// CHECK: call noundef zeroext i16 @_Z37__spirv_GroupNonUniformBroadcastFirstitj +// CHECK: call noundef zeroext i16 @_Z30__spirv_GroupNonUniformShuffleitj +// CHECK: call noundef zeroext i16 @_Z33__spirv_GroupNonUniformShuffleXoritj +// CHECK: call noundef zeroext i16 @_Z32__spirv_GroupNonUniformShuffleUpitj +// CHECK: call noundef zeroext i16 @_Z34__spirv_GroupNonUniformShuffleDownitj +// CHECK: call noundef zeroext i1 @_Z31__spirv_GroupNonUniformAllEqualii +// CHECK: call noundef i32 @_Z32__spirv_GroupNonUniformBroadcastiij +// CHECK: call noundef i32 @_Z37__spirv_GroupNonUniformBroadcastFirstiij +// CHECK: call noundef i32 @_Z30__spirv_GroupNonUniformShuffleiij +// CHECK: call noundef i32 @_Z33__spirv_GroupNonUniformShuffleXoriij +// CHECK: call noundef i32 @_Z32__spirv_GroupNonUniformShuffleUpiij +// CHECK: call noundef i32 @_Z34__spirv_GroupNonUniformShuffleDowniij +// CHECK: call noundef zeroext i1 @_Z31__spirv_GroupNonUniformAllEqualij +// CHECK: call noundef i32 @_Z32__spirv_GroupNonUniformBroadcastijj +// CHECK: call noundef i32 @_Z37__spirv_GroupNonUniformBroadcastFirstijj +// CHECK: call noundef i32 @_Z30__spirv_GroupNonUniformShuffleijj +// CHECK: call noundef i32 @_Z33__spirv_GroupNonUniformShuffleXorijj +// CHECK: call noundef i32 @_Z32__spirv_GroupNonUniformShuffleUpijj +// CHECK: call noundef i32 @_Z34__spirv_GroupNonUniformShuffleDownijj +// CHECK: call noundef zeroext i1 @_Z31__spirv_GroupNonUniformAllEqualiDF16_ +// CHECK: call noundef half @_Z32__spirv_GroupNonUniformBroadcastiDF16_j +// CHECK: call noundef half @_Z37__spirv_GroupNonUniformBroadcastFirstiDF16_j +// CHECK: call noundef half @_Z30__spirv_GroupNonUniformShuffleiDF16_j +// CHECK: call noundef half @_Z33__spirv_GroupNonUniformShuffleXoriDF16_j +// CHECK: call noundef half @_Z32__spirv_GroupNonUniformShuffleUpiDF16_j +// CHECK: call noundef half @_Z34__spirv_GroupNonUniformShuffleDowniDF16_j +// CHECK: call noundef zeroext i1 @_Z31__spirv_GroupNonUniformAllEqualif +// CHECK: call noundef float @_Z32__spirv_GroupNonUniformBroadcastifj +// CHECK: call noundef float @_Z37__spirv_GroupNonUniformBroadcastFirstifj +// CHECK: call noundef float @_Z30__spirv_GroupNonUniformShuffleifj +// CHECK: call noundef float @_Z33__spirv_GroupNonUniformShuffleXorifj +// CHECK: call noundef float @_Z32__spirv_GroupNonUniformShuffleUpifj +// CHECK: call noundef float @_Z34__spirv_GroupNonUniformShuffleDownifj +// CHECK: call noundef zeroext i1 @_Z31__spirv_GroupNonUniformAllEqualid +// CHECK: call noundef double @_Z32__spirv_GroupNonUniformBroadcastidj +// CHECK: call noundef double @_Z37__spirv_GroupNonUniformBroadcastFirstidj +// CHECK: call noundef double @_Z30__spirv_GroupNonUniformShuffleidj +// CHECK: call noundef double @_Z33__spirv_GroupNonUniformShuffleXoridj +// CHECK: call noundef double @_Z32__spirv_GroupNonUniformShuffleUpidj +// CHECK: call noundef double @_Z34__spirv_GroupNonUniformShuffleDownidj +// CHECK: call noundef i32 @_Z27__spirv_GroupNonUniformIAddiii +// CHECK: call noundef i32 @_Z27__spirv_GroupNonUniformIAddiiij +// CHECK: call noundef i32 @_Z27__spirv_GroupNonUniformIMuliii +// CHECK: call noundef i32 @_Z27__spirv_GroupNonUniformIMuliiij +// CHECK: call noundef i32 @_Z33__spirv_GroupNonUniformBitwiseAndiii +// CHECK: call noundef i32 @_Z33__spirv_GroupNonUniformBitwiseAndiiij +// CHECK: call noundef i32 @_Z32__spirv_GroupNonUniformBitwiseOriii +// CHECK: call noundef i32 @_Z32__spirv_GroupNonUniformBitwiseOriiij +// CHECK: call noundef i32 @_Z33__spirv_GroupNonUniformBitwiseXoriii +// CHECK: call noundef i32 @_Z33__spirv_GroupNonUniformBitwiseXoriiij +// CHECK: call noundef zeroext i8 @_Z27__spirv_GroupNonUniformIAddiih +// CHECK: call noundef zeroext i8 @_Z27__spirv_GroupNonUniformIAddiihj +// CHECK: call noundef zeroext i8 @_Z27__spirv_GroupNonUniformIMuliih +// CHECK: call noundef zeroext i8 @_Z27__spirv_GroupNonUniformIMuliihj +// CHECK: call noundef zeroext i8 @_Z33__spirv_GroupNonUniformBitwiseAndiih +// CHECK: call noundef zeroext i8 @_Z33__spirv_GroupNonUniformBitwiseAndiihj +// CHECK: call noundef zeroext i8 @_Z32__spirv_GroupNonUniformBitwiseOriih +// CHECK: call noundef zeroext i8 @_Z32__spirv_GroupNonUniformBitwiseOriihj +// CHECK: call noundef zeroext i8 @_Z33__spirv_GroupNonUniformBitwiseXoriih +// CHECK: call noundef zeroext i8 @_Z33__spirv_GroupNonUniformBitwiseXoriihj +// CHECK: call noundef signext i16 @_Z27__spirv_GroupNonUniformIAddiis +// CHECK: call noundef signext i16 @_Z27__spirv_GroupNonUniformIAddiisj +// CHECK: call noundef signext i16 @_Z27__spirv_GroupNonUniformIMuliis +// CHECK: call noundef signext i16 @_Z27__spirv_GroupNonUniformIMuliisj +// CHECK: call noundef signext i16 @_Z33__spirv_GroupNonUniformBitwiseAndiis +// CHECK: call noundef signext i16 @_Z33__spirv_GroupNonUniformBitwiseAndiisj +// CHECK: call noundef signext i16 @_Z32__spirv_GroupNonUniformBitwiseOriis +// CHECK: call noundef signext i16 @_Z32__spirv_GroupNonUniformBitwiseOriisj +// CHECK: call noundef signext i16 @_Z33__spirv_GroupNonUniformBitwiseXoriis +// CHECK: call noundef signext i16 @_Z33__spirv_GroupNonUniformBitwiseXoriisj +// CHECK: call noundef zeroext i16 @_Z27__spirv_GroupNonUniformIAddiit +// CHECK: call noundef zeroext i16 @_Z27__spirv_GroupNonUniformIAddiitj +// CHECK: call noundef zeroext i16 @_Z27__spirv_GroupNonUniformIMuliit +// CHECK: call noundef zeroext i16 @_Z27__spirv_GroupNonUniformIMuliitj +// CHECK: call noundef zeroext i16 @_Z33__spirv_GroupNonUniformBitwiseAndiit +// CHECK: call noundef zeroext i16 @_Z33__spirv_GroupNonUniformBitwiseAndiitj +// CHECK: call noundef zeroext i16 @_Z32__spirv_GroupNonUniformBitwiseOriit +// CHECK: call noundef zeroext i16 @_Z32__spirv_GroupNonUniformBitwiseOriitj +// CHECK: call noundef zeroext i16 @_Z33__spirv_GroupNonUniformBitwiseXoriit +// CHECK: call noundef zeroext i16 @_Z33__spirv_GroupNonUniformBitwiseXoriitj +// CHECK: call noundef i32 @_Z27__spirv_GroupNonUniformIAddiii +// CHECK: call noundef i32 @_Z27__spirv_GroupNonUniformIAddiiij +// CHECK: call noundef i32 @_Z27__spirv_GroupNonUniformIMuliii +// CHECK: call noundef i32 @_Z27__spirv_GroupNonUniformIMuliiij +// CHECK: call noundef i32 @_Z33__spirv_GroupNonUniformBitwiseAndiii +// CHECK: call noundef i32 @_Z33__spirv_GroupNonUniformBitwiseAndiiij +// CHECK: call noundef i32 @_Z32__spirv_GroupNonUniformBitwiseOriii +// CHECK: call noundef i32 @_Z32__spirv_GroupNonUniformBitwiseOriiij +// CHECK: call noundef i32 @_Z33__spirv_GroupNonUniformBitwiseXoriii +// CHECK: call noundef i32 @_Z33__spirv_GroupNonUniformBitwiseXoriiij +// CHECK: call noundef i32 @_Z27__spirv_GroupNonUniformIAddiij +// CHECK: call noundef i32 @_Z27__spirv_GroupNonUniformIAddiijj +// CHECK: call noundef i32 @_Z27__spirv_GroupNonUniformIMuliij +// CHECK: call noundef i32 @_Z27__spirv_GroupNonUniformIMuliijj +// CHECK: call noundef i32 @_Z33__spirv_GroupNonUniformBitwiseAndiij +// CHECK: call noundef i32 @_Z33__spirv_GroupNonUniformBitwiseAndiijj +// CHECK: call noundef i32 @_Z32__spirv_GroupNonUniformBitwiseOriij +// CHECK: call noundef i32 @_Z32__spirv_GroupNonUniformBitwiseOriijj +// CHECK: call noundef i32 @_Z33__spirv_GroupNonUniformBitwiseXoriij +// CHECK: call noundef i32 @_Z33__spirv_GroupNonUniformBitwiseXoriijj +// CHECK: call noundef i32 @_Z27__spirv_GroupNonUniformSMiniii +// CHECK: call noundef i32 @_Z27__spirv_GroupNonUniformSMiniiij +// CHECK: call noundef i32 @_Z27__spirv_GroupNonUniformSMaxiii +// CHECK: call noundef i32 @_Z27__spirv_GroupNonUniformSMaxiiij +// CHECK: call noundef signext i16 @_Z27__spirv_GroupNonUniformSMiniis +// CHECK: call noundef signext i16 @_Z27__spirv_GroupNonUniformSMiniisj +// CHECK: call noundef signext i16 @_Z27__spirv_GroupNonUniformSMaxiis +// CHECK: call noundef signext i16 @_Z27__spirv_GroupNonUniformSMaxiisj +// CHECK: call noundef i32 @_Z27__spirv_GroupNonUniformSMiniii +// CHECK: call noundef i32 @_Z27__spirv_GroupNonUniformSMiniiij +// CHECK: call noundef i32 @_Z27__spirv_GroupNonUniformSMaxiii +// CHECK: call noundef i32 @_Z27__spirv_GroupNonUniformSMaxiiij +// CHECK: call noundef zeroext i8 @_Z27__spirv_GroupNonUniformUMiniih +// CHECK: call noundef zeroext i8 @_Z27__spirv_GroupNonUniformUMiniihj +// CHECK: call noundef zeroext i8 @_Z27__spirv_GroupNonUniformUMaxiih +// CHECK: call noundef zeroext i8 @_Z27__spirv_GroupNonUniformUMaxiihj +// CHECK: call noundef zeroext i16 @_Z27__spirv_GroupNonUniformUMiniit +// CHECK: call noundef zeroext i16 @_Z27__spirv_GroupNonUniformUMiniitj +// CHECK: call noundef zeroext i16 @_Z27__spirv_GroupNonUniformUMaxiit +// CHECK: call noundef zeroext i16 @_Z27__spirv_GroupNonUniformUMaxiitj +// CHECK: call noundef i32 @_Z27__spirv_GroupNonUniformUMiniij +// CHECK: call noundef i32 @_Z27__spirv_GroupNonUniformUMiniijj +// CHECK: call noundef i32 @_Z27__spirv_GroupNonUniformUMaxiij +// CHECK: call noundef i32 @_Z27__spirv_GroupNonUniformUMaxiijj +// CHECK: call noundef zeroext i1 @_Z33__spirv_GroupNonUniformLogicalAndiib +// CHECK: call noundef zeroext i1 @_Z33__spirv_GroupNonUniformLogicalAndiibj +// CHECK: call noundef zeroext i1 @_Z32__spirv_GroupNonUniformLogicalOriib +// CHECK: call noundef zeroext i1 @_Z32__spirv_GroupNonUniformLogicalOriibj +// CHECK: call noundef zeroext i1 @_Z33__spirv_GroupNonUniformLogicalXoriib +// CHECK: call noundef zeroext i1 @_Z33__spirv_GroupNonUniformLogicalXoriibj diff --git a/clang/test/CodeGenSPIRV/spirv-builtin-lookup-group.cl b/clang/test/CodeGenSPIRV/spirv-builtin-lookup-group.cl index 0a31736f04122..52872bf7ac3b9 100644 --- a/clang/test/CodeGenSPIRV/spirv-builtin-lookup-group.cl +++ b/clang/test/CodeGenSPIRV/spirv-builtin-lookup-group.cl @@ -43,7 +43,7 @@ int group_imul_khr(short a) { return __spirv_GroupIMulKHR(2, 0, a); } -bool group_bitwise_or_khr(long a) { +long group_bitwise_or_khr(long a) { // CHECK-LABEL: @group_bitwise_or_khr( // CHECK: call spir_func i64 @_Z25__spirv_GroupBitwiseOrKHRiil( return __spirv_GroupBitwiseOrKHR(2, 0, a); @@ -67,8 +67,8 @@ float group_fmax(float a) { return __spirv_GroupFMax(2, 2, a); } -float group_ful_khr(float a) { - // CHECK-LABEL: @group_ful_khr( +float group_fmul_khr(float a) { + // CHECK-LABEL: @group_fmul_khr( // CHECK: call spir_func float @_Z20__spirv_GroupFMulKHRiif( return __spirv_GroupFMulKHR(2, 2, a); } diff --git a/libclc/libspirv/lib/amdgcn-amdhsa/group/group_ballot.cl b/libclc/libspirv/lib/amdgcn-amdhsa/group/group_ballot.cl index 49fa34a8cd7ab..f3cfa38615510 100644 --- a/libclc/libspirv/lib/amdgcn-amdhsa/group/group_ballot.cl +++ b/libclc/libspirv/lib/amdgcn-amdhsa/group/group_ballot.cl @@ -12,8 +12,8 @@ // from llvm/include/llvm/IR/InstrTypes.h #define ICMP_NE 33 -_CLC_DEF _CLC_CONVERGENT __clc_vec4_uint32_t -_Z29__spirv_GroupNonUniformBallotib(int flag, bool predicate) { +_CLC_OVERLOAD _CLC_DEF _CLC_CONVERGENT __clc_vec4_uint32_t +__spirv_GroupNonUniformBallot(int flag, bool predicate) { // only support subgroup for now if (flag != Subgroup) { __builtin_trap(); diff --git a/libclc/libspirv/lib/ptx-nvidiacl/group/group_non_uniform.cl b/libclc/libspirv/lib/ptx-nvidiacl/group/group_non_uniform.cl index 3474f17666080..afc1f3d8df81f 100644 --- a/libclc/libspirv/lib/ptx-nvidiacl/group/group_non_uniform.cl +++ b/libclc/libspirv/lib/ptx-nvidiacl/group/group_non_uniform.cl @@ -12,8 +12,8 @@ #include #include -_CLC_DEF _CLC_CONVERGENT __clc_vec4_uint32_t -_Z29__spirv_GroupNonUniformBallotib(int flag, bool predicate) { +_CLC_OVERLOAD _CLC_DEF _CLC_CONVERGENT __clc_vec4_uint32_t +__spirv_GroupNonUniformBallot(int flag, bool predicate) { // only support subgroup for now if (flag != Subgroup) { __builtin_trap(); @@ -36,8 +36,8 @@ _Z29__spirv_GroupNonUniformBallotib(int flag, bool predicate) { return res; } -_CLC_DEF _CLC_CONVERGENT uint -_Z37__spirv_GroupNonUniformBallotBitCountN5__spv5Scope4FlagEiDv4_j( +_CLC_OVERLOAD _CLC_DEF _CLC_CONVERGENT uint +__spirv_GroupNonUniformBallotBitCount( int scope, int flag, __clc_vec4_uint32_t mask) { // here we assume scope == __spv::Scope::Subgroup // flag == InclusiveScan is not yet implemented diff --git a/sycl/include/sycl/__spirv/spirv_ops.hpp b/sycl/include/sycl/__spirv/spirv_ops.hpp index 04cfec68e7679..4003b02485b87 100644 --- a/sycl/include/sycl/__spirv/spirv_ops.hpp +++ b/sycl/include/sycl/__spirv/spirv_ops.hpp @@ -881,157 +881,6 @@ template extern __DPCPP_SYCL_EXTERNAL __ocl_vec_t __spirv_ConvertFToBF16INTEL(__ocl_vec_t) noexcept; -__SYCL_CONVERGENT__ extern __DPCPP_SYCL_EXTERNAL - __SYCL_EXPORT __ocl_vec_t - __spirv_GroupNonUniformBallot(int32_t Execution, bool Predicate) noexcept; - -// TODO: I'm not 100% sure that these NonUniform instructions should be -// convergent Following precedent set for GroupNonUniformBallot above -__SYCL_CONVERGENT__ extern __DPCPP_SYCL_EXTERNAL __SYCL_EXPORT uint32_t -__spirv_GroupNonUniformBallotBitCount(__spv::Scope::Flag, int, - __ocl_vec_t) noexcept; - -__SYCL_CONVERGENT__ extern __DPCPP_SYCL_EXTERNAL __SYCL_EXPORT int - __spirv_GroupNonUniformBallotFindLSB(__spv::Scope::Flag, - __ocl_vec_t) noexcept; - -template -__SYCL_CONVERGENT__ extern __DPCPP_SYCL_EXTERNAL __SYCL_EXPORT ValueT - __spirv_GroupNonUniformBroadcast(__spv::Scope::Flag, ValueT, IdT); - -template -__SYCL_CONVERGENT__ extern __DPCPP_SYCL_EXTERNAL __SYCL_EXPORT ValueT - __spirv_GroupNonUniformShuffle(__spv::Scope::Flag, ValueT, IdT) noexcept; - -__SYCL_CONVERGENT__ extern __DPCPP_SYCL_EXTERNAL __SYCL_EXPORT bool -__spirv_GroupNonUniformAll(__spv::Scope::Flag, bool); - -__SYCL_CONVERGENT__ extern __DPCPP_SYCL_EXTERNAL __SYCL_EXPORT bool -__spirv_GroupNonUniformAny(__spv::Scope::Flag, bool); - -template -__SYCL_CONVERGENT__ extern __DPCPP_SYCL_EXTERNAL __SYCL_EXPORT ValueT -__spirv_GroupNonUniformSMin(__spv::Scope::Flag, int, ValueT); - -template -__SYCL_CONVERGENT__ extern __DPCPP_SYCL_EXTERNAL __SYCL_EXPORT ValueT -__spirv_GroupNonUniformUMin(__spv::Scope::Flag, int, ValueT); - -template -__SYCL_CONVERGENT__ extern __DPCPP_SYCL_EXTERNAL __SYCL_EXPORT ValueT -__spirv_GroupNonUniformFMin(__spv::Scope::Flag, int, ValueT); - -template -__SYCL_CONVERGENT__ extern __DPCPP_SYCL_EXTERNAL __SYCL_EXPORT ValueT -__spirv_GroupNonUniformSMax(__spv::Scope::Flag, int, ValueT); - -template -__SYCL_CONVERGENT__ extern __DPCPP_SYCL_EXTERNAL __SYCL_EXPORT ValueT -__spirv_GroupNonUniformUMax(__spv::Scope::Flag, int, ValueT); - -template -__SYCL_CONVERGENT__ extern __DPCPP_SYCL_EXTERNAL __SYCL_EXPORT ValueT -__spirv_GroupNonUniformFMax(__spv::Scope::Flag, int, ValueT); - -template -__SYCL_CONVERGENT__ extern __DPCPP_SYCL_EXTERNAL __SYCL_EXPORT ValueT -__spirv_GroupNonUniformIAdd(__spv::Scope::Flag, int, ValueT); - -template -__SYCL_CONVERGENT__ extern __DPCPP_SYCL_EXTERNAL __SYCL_EXPORT ValueT -__spirv_GroupNonUniformFAdd(__spv::Scope::Flag, int, ValueT); - -template -__SYCL_CONVERGENT__ extern __DPCPP_SYCL_EXTERNAL __SYCL_EXPORT ValueT -__spirv_GroupNonUniformIMul(__spv::Scope::Flag, int, ValueT); - -template -__SYCL_CONVERGENT__ extern __DPCPP_SYCL_EXTERNAL __SYCL_EXPORT ValueT -__spirv_GroupNonUniformFMul(__spv::Scope::Flag, int, ValueT); - -template -__SYCL_CONVERGENT__ extern __DPCPP_SYCL_EXTERNAL __SYCL_EXPORT ValueT -__spirv_GroupNonUniformBitwiseOr(__spv::Scope::Flag, int, ValueT); - -template -__SYCL_CONVERGENT__ extern __DPCPP_SYCL_EXTERNAL __SYCL_EXPORT ValueT -__spirv_GroupNonUniformBitwiseXor(__spv::Scope::Flag, int, ValueT); - -template -__SYCL_CONVERGENT__ extern __DPCPP_SYCL_EXTERNAL __SYCL_EXPORT ValueT -__spirv_GroupNonUniformBitwiseAnd(__spv::Scope::Flag, int, ValueT); - -template -__SYCL_CONVERGENT__ extern __DPCPP_SYCL_EXTERNAL __SYCL_EXPORT ValueT -__spirv_GroupNonUniformLogicalOr(__spv::Scope::Flag, int, ValueT); - -template -__SYCL_CONVERGENT__ extern __DPCPP_SYCL_EXTERNAL __SYCL_EXPORT ValueT -__spirv_GroupNonUniformLogicalAnd(__spv::Scope::Flag, int, ValueT); - -template -__SYCL_CONVERGENT__ extern __DPCPP_SYCL_EXTERNAL __SYCL_EXPORT ValueT -__spirv_GroupNonUniformSMin(__spv::Scope::Flag, int, ValueT, unsigned int); - -template -__SYCL_CONVERGENT__ extern __DPCPP_SYCL_EXTERNAL __SYCL_EXPORT ValueT -__spirv_GroupNonUniformUMin(__spv::Scope::Flag, int, ValueT, unsigned int); - -template -__SYCL_CONVERGENT__ extern __DPCPP_SYCL_EXTERNAL __SYCL_EXPORT ValueT -__spirv_GroupNonUniformFMin(__spv::Scope::Flag, int, ValueT, unsigned int); - -template -__SYCL_CONVERGENT__ extern __DPCPP_SYCL_EXTERNAL __SYCL_EXPORT ValueT -__spirv_GroupNonUniformSMax(__spv::Scope::Flag, int, ValueT, unsigned int); - -template -__SYCL_CONVERGENT__ extern __DPCPP_SYCL_EXTERNAL __SYCL_EXPORT ValueT -__spirv_GroupNonUniformUMax(__spv::Scope::Flag, int, ValueT, unsigned int); - -template -__SYCL_CONVERGENT__ extern __DPCPP_SYCL_EXTERNAL __SYCL_EXPORT ValueT -__spirv_GroupNonUniformFMax(__spv::Scope::Flag, int, ValueT, unsigned int); - -template -__SYCL_CONVERGENT__ extern __DPCPP_SYCL_EXTERNAL __SYCL_EXPORT ValueT -__spirv_GroupNonUniformIAdd(__spv::Scope::Flag, int, ValueT, unsigned int); - -template -__SYCL_CONVERGENT__ extern __DPCPP_SYCL_EXTERNAL __SYCL_EXPORT ValueT -__spirv_GroupNonUniformFAdd(__spv::Scope::Flag, int, ValueT, unsigned int); - -template -__SYCL_CONVERGENT__ extern __DPCPP_SYCL_EXTERNAL __SYCL_EXPORT ValueT -__spirv_GroupNonUniformIMul(__spv::Scope::Flag, int, ValueT, unsigned int); - -template -__SYCL_CONVERGENT__ extern __DPCPP_SYCL_EXTERNAL __SYCL_EXPORT ValueT -__spirv_GroupNonUniformFMul(__spv::Scope::Flag, int, ValueT, unsigned int); - -template -__SYCL_CONVERGENT__ extern __DPCPP_SYCL_EXTERNAL __SYCL_EXPORT ValueT -__spirv_GroupNonUniformBitwiseOr(__spv::Scope::Flag, int, ValueT, unsigned int); - -template -__SYCL_CONVERGENT__ extern __DPCPP_SYCL_EXTERNAL __SYCL_EXPORT ValueT -__spirv_GroupNonUniformBitwiseXor(__spv::Scope::Flag, int, ValueT, - unsigned int); - -template -__SYCL_CONVERGENT__ extern __DPCPP_SYCL_EXTERNAL __SYCL_EXPORT ValueT -__spirv_GroupNonUniformBitwiseAnd(__spv::Scope::Flag, int, ValueT, - unsigned int); - -template -__SYCL_CONVERGENT__ extern __DPCPP_SYCL_EXTERNAL __SYCL_EXPORT ValueT -__spirv_GroupNonUniformLogicalOr(__spv::Scope::Flag, int, ValueT, unsigned int); - -template -__SYCL_CONVERGENT__ extern __DPCPP_SYCL_EXTERNAL __SYCL_EXPORT ValueT -__spirv_GroupNonUniformLogicalAnd(__spv::Scope::Flag, int, ValueT, - unsigned int); - extern __DPCPP_SYCL_EXTERNAL __SYCL_EXPORT void __clc_BarrierInitialize(int64_t *state, int32_t expected_count) noexcept; From 4155e5413e5a876ab89a213786c6c12b4473e2e1 Mon Sep 17 00:00:00 2001 From: Wenju He Date: Tue, 25 Mar 2025 18:06:01 -0700 Subject: [PATCH 2/2] remove ULong variant for Delta/ClusterSize/Index parameters, only keep ULong for Id type in GroupNonUniformBroadcast --- clang/lib/Sema/SPIRVBuiltins.td | 60 ++++++++----------- ...spirv-builtin-lookup-group-non-uniform.cpp | 26 ++++---- 2 files changed, 37 insertions(+), 49 deletions(-) diff --git a/clang/lib/Sema/SPIRVBuiltins.td b/clang/lib/Sema/SPIRVBuiltins.td index 5acfeeb9f1e50..bba559f0f255a 100644 --- a/clang/lib/Sema/SPIRVBuiltins.td +++ b/clang/lib/Sema/SPIRVBuiltins.td @@ -364,7 +364,6 @@ def TLFloat : TypeList<[Float, Double, Half]>; // FIXME: handle properly char (signed or unsigned depending on host) def TLSignedInts : TypeList<[Char, Short, Int, Long]>; def TLUnsignedInts : TypeList<[UChar, UShort, UInt, ULong]>; -def TLUnsignedIntLong : TypeList<[UInt, ULong]>; // Signed to Unsigned conversion // FIXME: handle properly char (signed or unsigned depending on host) @@ -388,6 +387,7 @@ def AGenTypeN : GenericType<"AGenTypeN", TLAll, VecAndScalar>; def AGenTypeNNoScalar : GenericType<"AGenTypeNNoScalar", TLAll, VecNoScalar>; def AGenTypeNWithBool : GenericType<"AGenTypeNWithBool", TLAllWithBool, VecAndScalar>; +// Bool def BoolGenTypeN : GenericType<"BoolGenTypeN", TypeList<[Bool]>, VecAndScalar>; // All integer def AIGenType1 : GenericType<"AIGenType1", TLAllInts, Vec1>; @@ -998,14 +998,18 @@ foreach name = ["GroupNonUniformAllEqual"] in { def : SPVBuiltin; } -foreach name = ["GroupNonUniformBroadcast", - "GroupNonUniformBroadcastFirst"] in { - foreach IDType = TLUnsignedIntLong.List in { +foreach name = ["GroupNonUniformBroadcast"] in { + foreach IDType = [UInt, ULong] in { def : SPVBuiltin; } } +foreach name = ["GroupNonUniformBroadcastFirst"] in { + def : SPVBuiltin; +} + foreach name = ["GroupNonUniformBallot"] in { def : SPVBuiltin; } @@ -1015,9 +1019,7 @@ foreach name = ["GroupNonUniformInverseBallot"] in { } foreach name = ["GroupNonUniformBallotBitExtract"] in { - foreach IDType = TLUnsignedIntLong.List in { - def : SPVBuiltin; - } + def : SPVBuiltin; } foreach name = ["GroupNonUniformBallotBitCount", "GroupNonUniformBallotFindLSB", @@ -1027,60 +1029,46 @@ foreach name = ["GroupNonUniformBallotBitCount", "GroupNonUniformBallotFindLSB", foreach name = ["GroupNonUniformShuffle", "GroupNonUniformShuffleXor", "GroupNonUniformShuffleUp", "GroupNonUniformShuffleDown"] in { - foreach IDType = TLUnsignedIntLong.List in { - def : SPVBuiltin; - } + def : SPVBuiltin; } foreach name = ["GroupNonUniformIAdd", "GroupNonUniformIMul"] in { def : SPVBuiltin; - foreach IDType = TLUnsignedIntLong.List in { - def : SPVBuiltin; - } + def : SPVBuiltin; } foreach name = ["GroupNonUniformSMin", "GroupNonUniformSMax"] in { - def : SPVBuiltin; - foreach IDType = TLUnsignedIntLong.List in { - def : SPVBuiltin; - } + def : SPVBuiltin; + def : SPVBuiltin; } foreach name = ["GroupNonUniformUMin", "GroupNonUniformUMax"] in { def : SPVBuiltin; - foreach IDType = TLUnsignedIntLong.List in { - def : SPVBuiltin; - } + def : SPVBuiltin; } foreach name = ["GroupNonUniformFAdd", "GroupNonUniformFMul", "GroupNonUniformFMin", "GroupNonUniformFMax"] in { def : SPVBuiltin; - foreach IDType = TLUnsignedIntLong.List in { - def : SPVBuiltin; - } + def : SPVBuiltin; } foreach name = ["GroupNonUniformBitwiseAnd", "GroupNonUniformBitwiseOr", "GroupNonUniformBitwiseXor"] in { def : SPVBuiltin; - foreach IDType = TLUnsignedIntLong.List in { - def : SPVBuiltin; - } + def : SPVBuiltin; } foreach name = ["GroupNonUniformLogicalAnd", "GroupNonUniformLogicalOr", "GroupNonUniformLogicalXor"] in { def : SPVBuiltin; - foreach IDType = TLUnsignedIntLong.List in { - def : SPVBuiltin; - } + def : SPVBuiltin; } diff --git a/clang/test/CodeGenSPIRV/spirv-builtin-lookup-group-non-uniform.cpp b/clang/test/CodeGenSPIRV/spirv-builtin-lookup-group-non-uniform.cpp index b85265fc4c84f..08001cdda8bab 100644 --- a/clang/test/CodeGenSPIRV/spirv-builtin-lookup-group-non-uniform.cpp +++ b/clang/test/CodeGenSPIRV/spirv-builtin-lookup-group-non-uniform.cpp @@ -18,8 +18,8 @@ template T group_broad_cast(T v, unsigned int id) { return __spirv_GroupNonUniformBroadcast(2, v, id); } -template T group_broad_cast_first(T v, unsigned int id) { - return __spirv_GroupNonUniformBroadcastFirst(2, v, id); +template T group_broad_cast_first(T v) { + return __spirv_GroupNonUniformBroadcastFirst(2, v); } typedef unsigned int uint4 __attribute__((ext_vector_type(4))); @@ -147,7 +147,7 @@ template void test_with_bool() { unsigned int id = 0; group_all_equal(v); group_broad_cast(v, id); - group_broad_cast_first(v, id); + group_broad_cast_first(v); group_shuffle(v, id); group_shuffle_xor(v, id); group_shuffle_up(v, id); @@ -227,70 +227,70 @@ void test() { // CHECK: call noundef i32 @_Z36__spirv_GroupNonUniformBallotFindMSBiiDv4_j // CHECK: call noundef zeroext i1 @_Z31__spirv_GroupNonUniformAllEqualib // CHECK: call noundef zeroext i1 @_Z32__spirv_GroupNonUniformBroadcastibj -// CHECK: call noundef zeroext i1 @_Z37__spirv_GroupNonUniformBroadcastFirstibj +// CHECK: call noundef zeroext i1 @_Z37__spirv_GroupNonUniformBroadcastFirstib // CHECK: call noundef zeroext i1 @_Z30__spirv_GroupNonUniformShuffleibj // CHECK: call noundef zeroext i1 @_Z33__spirv_GroupNonUniformShuffleXoribj // CHECK: call noundef zeroext i1 @_Z32__spirv_GroupNonUniformShuffleUpibj // CHECK: call noundef zeroext i1 @_Z34__spirv_GroupNonUniformShuffleDownibj // CHECK: call noundef zeroext i1 @_Z31__spirv_GroupNonUniformAllEqualii // CHECK: call noundef i32 @_Z32__spirv_GroupNonUniformBroadcastiij -// CHECK: call noundef i32 @_Z37__spirv_GroupNonUniformBroadcastFirstiij +// CHECK: call noundef i32 @_Z37__spirv_GroupNonUniformBroadcastFirstii // CHECK: call noundef i32 @_Z30__spirv_GroupNonUniformShuffleiij // CHECK: call noundef i32 @_Z33__spirv_GroupNonUniformShuffleXoriij // CHECK: call noundef i32 @_Z32__spirv_GroupNonUniformShuffleUpiij // CHECK: call noundef i32 @_Z34__spirv_GroupNonUniformShuffleDowniij // CHECK: call noundef zeroext i1 @_Z31__spirv_GroupNonUniformAllEqualih // CHECK: call noundef zeroext i8 @_Z32__spirv_GroupNonUniformBroadcastihj -// CHECK: call noundef zeroext i8 @_Z37__spirv_GroupNonUniformBroadcastFirstihj +// CHECK: call noundef zeroext i8 @_Z37__spirv_GroupNonUniformBroadcastFirstih // CHECK: call noundef zeroext i8 @_Z30__spirv_GroupNonUniformShuffleihj // CHECK: call noundef zeroext i8 @_Z33__spirv_GroupNonUniformShuffleXorihj // CHECK: call noundef zeroext i8 @_Z32__spirv_GroupNonUniformShuffleUpihj // CHECK: call noundef zeroext i8 @_Z34__spirv_GroupNonUniformShuffleDownihj // CHECK: call noundef zeroext i1 @_Z31__spirv_GroupNonUniformAllEqualis // CHECK: call noundef signext i16 @_Z32__spirv_GroupNonUniformBroadcastisj -// CHECK: call noundef signext i16 @_Z37__spirv_GroupNonUniformBroadcastFirstisj +// CHECK: call noundef signext i16 @_Z37__spirv_GroupNonUniformBroadcastFirstis // CHECK: call noundef signext i16 @_Z30__spirv_GroupNonUniformShuffleisj // CHECK: call noundef signext i16 @_Z33__spirv_GroupNonUniformShuffleXorisj // CHECK: call noundef signext i16 @_Z32__spirv_GroupNonUniformShuffleUpisj // CHECK: call noundef signext i16 @_Z34__spirv_GroupNonUniformShuffleDownisj // CHECK: call noundef zeroext i1 @_Z31__spirv_GroupNonUniformAllEqualit // CHECK: call noundef zeroext i16 @_Z32__spirv_GroupNonUniformBroadcastitj -// CHECK: call noundef zeroext i16 @_Z37__spirv_GroupNonUniformBroadcastFirstitj +// CHECK: call noundef zeroext i16 @_Z37__spirv_GroupNonUniformBroadcastFirstit // CHECK: call noundef zeroext i16 @_Z30__spirv_GroupNonUniformShuffleitj // CHECK: call noundef zeroext i16 @_Z33__spirv_GroupNonUniformShuffleXoritj // CHECK: call noundef zeroext i16 @_Z32__spirv_GroupNonUniformShuffleUpitj // CHECK: call noundef zeroext i16 @_Z34__spirv_GroupNonUniformShuffleDownitj // CHECK: call noundef zeroext i1 @_Z31__spirv_GroupNonUniformAllEqualii // CHECK: call noundef i32 @_Z32__spirv_GroupNonUniformBroadcastiij -// CHECK: call noundef i32 @_Z37__spirv_GroupNonUniformBroadcastFirstiij +// CHECK: call noundef i32 @_Z37__spirv_GroupNonUniformBroadcastFirstii // CHECK: call noundef i32 @_Z30__spirv_GroupNonUniformShuffleiij // CHECK: call noundef i32 @_Z33__spirv_GroupNonUniformShuffleXoriij // CHECK: call noundef i32 @_Z32__spirv_GroupNonUniformShuffleUpiij // CHECK: call noundef i32 @_Z34__spirv_GroupNonUniformShuffleDowniij // CHECK: call noundef zeroext i1 @_Z31__spirv_GroupNonUniformAllEqualij // CHECK: call noundef i32 @_Z32__spirv_GroupNonUniformBroadcastijj -// CHECK: call noundef i32 @_Z37__spirv_GroupNonUniformBroadcastFirstijj +// CHECK: call noundef i32 @_Z37__spirv_GroupNonUniformBroadcastFirstij // CHECK: call noundef i32 @_Z30__spirv_GroupNonUniformShuffleijj // CHECK: call noundef i32 @_Z33__spirv_GroupNonUniformShuffleXorijj // CHECK: call noundef i32 @_Z32__spirv_GroupNonUniformShuffleUpijj // CHECK: call noundef i32 @_Z34__spirv_GroupNonUniformShuffleDownijj // CHECK: call noundef zeroext i1 @_Z31__spirv_GroupNonUniformAllEqualiDF16_ // CHECK: call noundef half @_Z32__spirv_GroupNonUniformBroadcastiDF16_j -// CHECK: call noundef half @_Z37__spirv_GroupNonUniformBroadcastFirstiDF16_j +// CHECK: call noundef half @_Z37__spirv_GroupNonUniformBroadcastFirstiDF16_ // CHECK: call noundef half @_Z30__spirv_GroupNonUniformShuffleiDF16_j // CHECK: call noundef half @_Z33__spirv_GroupNonUniformShuffleXoriDF16_j // CHECK: call noundef half @_Z32__spirv_GroupNonUniformShuffleUpiDF16_j // CHECK: call noundef half @_Z34__spirv_GroupNonUniformShuffleDowniDF16_j // CHECK: call noundef zeroext i1 @_Z31__spirv_GroupNonUniformAllEqualif // CHECK: call noundef float @_Z32__spirv_GroupNonUniformBroadcastifj -// CHECK: call noundef float @_Z37__spirv_GroupNonUniformBroadcastFirstifj +// CHECK: call noundef float @_Z37__spirv_GroupNonUniformBroadcastFirstif // CHECK: call noundef float @_Z30__spirv_GroupNonUniformShuffleifj // CHECK: call noundef float @_Z33__spirv_GroupNonUniformShuffleXorifj // CHECK: call noundef float @_Z32__spirv_GroupNonUniformShuffleUpifj // CHECK: call noundef float @_Z34__spirv_GroupNonUniformShuffleDownifj // CHECK: call noundef zeroext i1 @_Z31__spirv_GroupNonUniformAllEqualid // CHECK: call noundef double @_Z32__spirv_GroupNonUniformBroadcastidj -// CHECK: call noundef double @_Z37__spirv_GroupNonUniformBroadcastFirstidj +// CHECK: call noundef double @_Z37__spirv_GroupNonUniformBroadcastFirstid // CHECK: call noundef double @_Z30__spirv_GroupNonUniformShuffleidj // CHECK: call noundef double @_Z33__spirv_GroupNonUniformShuffleXoridj // CHECK: call noundef double @_Z32__spirv_GroupNonUniformShuffleUpidj