summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkaizhangNV <149626564+kaizhangNV@users.noreply.github.com>2024-03-05 12:55:50 +0800
committerGitHub <noreply@github.com>2024-03-04 20:55:50 -0800
commit2297623aad4c249bccae3fe363ada31e308131ac (patch)
treea97b1f7d63ea207d3123a4d5c51ec7c0acfc25be
parent0371deef52c2ef9ffda3c5ec11f5b1082c0b96e8 (diff)
Implement short-circuit logic operator (#3635)
* Implement short-circuit logic operator Implement short-circuit evaluation for logic && and || operator. The short-circuit behavior is only used when the operands involved are scalar and the parent function is non-differentiable. In implementation, we define a new class 'LogicOperatorShortCircuitExpr' derived from 'OperatorExpr'. In the visitInvoke() call, we will create a new expression object 'LogicOperatorShortCircuitExpr' if the expression is logic && or ||. So that we can generate new IR code in the new visit function 'visitLogicOperatorShortCircuitExpr' to implement the short-circuit behavior. Add new test to test the short-circuit behavior. * Fix an compile issue occurred in Falcon test Previously, we early return when at least one of the operands of "&&" or "||" is vector in convertToLogicOperatorExpr call. However, in that case the arguments involved in the expression have already been type checked. When it falls-back to 'visitInvokeExpr', it will check the arguments again, and some unexpected behavior could occur which could in turn cause some internal error. So we add a check in the 'visitInvokeExpr' to avoid double type checking of arguments. * Update glsl subgroup test to not use short-circuit Since the short-circuit evaluation could cause the threads diverging in subgroup intrinsics. So change the test to not using "&&" to chain those subgroup intrinsics together. Instead, using "&" to chain them together because those test functions have the return value as bool. * Disable short-circuit in few situations Disable short-circuit in following situations: 1. generic parameter list 2. static const varible initialization * Use a flag to indicate the enablement of short-circuit Instead of using a struct to indicate the state of the outer environment of current expression, use a simple bool flag to indicate whether or not apply the short-circuit to current expression because there few situations where we will disable short-circuiting and in those circumstances, there is no nested. Therefore, a flag is good enough to indicate the case. * Disable short-circuit in index expression Also fix the build issue. (A cleanup for the last change.) * check both 'static' and 'const' modifiers Previously we only check HLSLStaticModifier to decide whether or not using short-circuit, but we really should check both 'static' and 'const' modifiers together, because we only want to disable the short circuit for init expression for 'static const' variable. * relax the restriction of short-circuit for index expression Disable the short-circuit for index expression only when declare an array. * Simplify the logic by creating subVisitor Simplify the logic by create a sub expression visitor so that we don't need to introduce extra recursion. * Call convertToLogicOperatorExpr after args check Change to call convertToLogicOperatorExpr after arguments check in visitInvokeExpr such that we don't have to check whether the arguments checked to avoid the double checking issue.
-rw-r--r--source/slang/slang-ast-expr.h13
-rw-r--r--source/slang/slang-check-decl.cpp18
-rw-r--r--source/slang/slang-check-expr.cpp79
-rw-r--r--source/slang/slang-check-impl.h19
-rw-r--r--source/slang/slang-check-overload.cpp9
-rw-r--r--source/slang/slang-lower-to-ir.cpp46
-rw-r--r--tests/compute/logic-short-circuit-evaluation.slang28
-rw-r--r--tests/compute/logic-short-circuit-evaluation.slang.expected.txt16
-rw-r--r--tests/glsl-intrinsic/shader-subgroup/shader-subgroup-arithmetic_Exclusive.slang192
-rw-r--r--tests/glsl-intrinsic/shader-subgroup/shader-subgroup-arithmetic_Inclusive.slang192
-rw-r--r--tests/glsl-intrinsic/shader-subgroup/shader-subgroup-arithmetic_None.slang192
-rw-r--r--tests/glsl-intrinsic/shader-subgroup/shader-subgroup-ballot.slang132
-rw-r--r--tests/glsl-intrinsic/shader-subgroup/shader-subgroup-clustered.slang192
-rw-r--r--tests/glsl-intrinsic/shader-subgroup/shader-subgroup-quad.slang130
-rw-r--r--tests/glsl-intrinsic/shader-subgroup/shader-subgroup-shuffle-relative.slang114
-rw-r--r--tests/glsl-intrinsic/shader-subgroup/shader-subgroup-shuffle.slang122
-rw-r--r--tests/glsl-intrinsic/shader-subgroup/shader-subgroup-vote.slang112
17 files changed, 908 insertions, 698 deletions
diff --git a/source/slang/slang-ast-expr.h b/source/slang/slang-ast-expr.h
index 9a7993937..fa1b27a04 100644
--- a/source/slang/slang-ast-expr.h
+++ b/source/slang/slang-ast-expr.h
@@ -431,6 +431,19 @@ class SelectExpr: public OperatorExpr
SLANG_AST_CLASS(SelectExpr)
};
+class LogicOperatorShortCircuitExpr: public OperatorExpr
+{
+ SLANG_AST_CLASS(LogicOperatorShortCircuitExpr)
+public:
+ enum Flavor
+ {
+ And, // &&
+ Or, // ||
+ };
+ Flavor flavor;
+};
+
+
class GenericAppExpr: public AppExprBase
{
SLANG_AST_CLASS(GenericAppExpr)
diff --git a/source/slang/slang-check-decl.cpp b/source/slang/slang-check-decl.cpp
index 4dfffc414..3596b7045 100644
--- a/source/slang/slang-check-decl.cpp
+++ b/source/slang/slang-check-decl.cpp
@@ -310,6 +310,7 @@ namespace Slang
void visitParamDecl(ParamDecl* paramDecl);
void visitAggTypeDecl(AggTypeDecl* aggTypeDecl);
+
};
template<typename VisitorType>
@@ -1814,11 +1815,18 @@ namespace Slang
{
if (auto initExpr = varDecl->initExpr)
{
- // If the variable has an explicit initial-value expression,
- // then we simply need to check that expression and coerce
- // it to the type of the variable.
- //
- initExpr = CheckTerm(initExpr);
+ // Disable the short-circuiting for static const variable init expression
+ bool isStaticConst = varDecl->hasModifier<HLSLStaticModifier>() &&
+ varDecl->hasModifier<ConstModifier>();
+
+ auto subVisitor = isStaticConst?
+ SemanticsVisitor(disableShortCircuitLogicalExpr()) : *this;
+ // If the variable has an explicit initial-value expression,
+ // then we simply need to check that expression and coerce
+ // it to the type of the variable.
+ //
+ initExpr = subVisitor.CheckTerm(initExpr);
+
initExpr = coerce(CoercionSite::Initializer, varDecl->type.Ptr(), initExpr);
varDecl->initExpr = initExpr;
diff --git a/source/slang/slang-check-expr.cpp b/source/slang/slang-check-expr.cpp
index 55ff90759..89a7373ee 100644
--- a/source/slang/slang-check-expr.cpp
+++ b/source/slang/slang-check-expr.cpp
@@ -1906,9 +1906,17 @@ namespace Slang
{
auto baseExpr = checkBaseForMemberExpr(subscriptExpr->baseExpression);
+ // If the base expression is a type, it means that this is an array declaration,
+ // then we should disable short-circuit in case there is logical expression in
+ // the subscript
+ auto baseType = baseExpr->type.Ptr();
+ auto baseTypeType = as<TypeType>(baseType);
+ auto subVisitor = (baseTypeType && m_shouldShortCircuitLogicExpr)?
+ SemanticsVisitor(disableShortCircuitLogicalExpr()) : *this;
+
for (auto& arg : subscriptExpr->indexExprs)
{
- arg = CheckTerm(arg);
+ arg = subVisitor.CheckTerm(arg);
}
// If anything went wrong in the base expression,
@@ -1920,8 +1928,7 @@ namespace Slang
// Otherwise, we need to look at the type of the base expression,
// to figure out how subscripting should work.
- auto baseType = baseExpr->type.Ptr();
- if (auto baseTypeType = as<TypeType>(baseType))
+ if (baseTypeType)
{
// We are trying to "index" into a type, so we have an expression like `float[2]`
// which should be interpreted as resolving to an array type.
@@ -2371,12 +2378,69 @@ namespace Slang
return result;
}
+ Expr* SemanticsExprVisitor::convertToLogicOperatorExpr(InvokeExpr* expr)
+ {
+ LogicOperatorShortCircuitExpr* newExpr = nullptr;
+
+ // If the logic expression is inside the generic parameter list, it cannot support short-circuit
+ // which will generate the ifelse branch.
+ if (!m_shouldShortCircuitLogicExpr)
+ {
+ return nullptr;
+ }
+
+ if (auto varExpr = as<VarExpr>(expr->functionExpr))
+ {
+ if ((varExpr->name->text == "&&") || (varExpr->name->text == "||"))
+ {
+ // We only use short-circuiting in scalar input, will fall back
+ // to non-short-circuiting in vector input.
+ bool shortCircuitSupport = true;
+ for (auto & arg : expr->arguments)
+ {
+ if(!as<BasicExpressionType>(arg->type.type))
+ {
+ shortCircuitSupport = false;
+ }
+ }
+
+ if (!shortCircuitSupport)
+ {
+ return nullptr;
+ }
+
+ // We do the cast in the 2nd pass because we want to leave it for 'visitInvokeExpr'
+ // to handle if this expression doesn't support short-circuiting.
+ for (auto & arg : expr->arguments)
+ {
+ arg = coerce(CoercionSite::Argument, m_astBuilder->getBoolType(), arg);
+ }
+
+ expr->functionExpr = CheckTerm(expr->functionExpr);
+ newExpr = m_astBuilder->create<LogicOperatorShortCircuitExpr>();
+ if (varExpr->name->text == "&&")
+ {
+ newExpr->flavor = LogicOperatorShortCircuitExpr::Flavor::And;
+ }
+ else
+ {
+ newExpr->flavor = LogicOperatorShortCircuitExpr::Flavor::Or;
+ }
+ newExpr->loc = expr->loc;
+ newExpr->functionExpr = expr->functionExpr;
+ newExpr->type = m_astBuilder->getBoolType();
+ newExpr->arguments = expr->arguments;
+ }
+ }
+
+ return newExpr;
+ }
+
Expr* SemanticsExprVisitor::visitInvokeExpr(InvokeExpr* expr)
{
// check the base expression first
if (!expr->originalFunctionExpr)
expr->originalFunctionExpr = expr->functionExpr;
- expr->functionExpr = CheckTerm(expr->functionExpr);
auto treatAsDifferentiableExpr = m_treatAsDifferentiableExpr;
m_treatAsDifferentiableExpr = nullptr;
// Next check the argument expressions
@@ -2384,6 +2448,13 @@ namespace Slang
{
arg = CheckTerm(arg);
}
+
+ // if the expression is '&&' or '||', we will convert it
+ // to use short-circuit evaluation.
+ if (auto newExpr = convertToLogicOperatorExpr(expr))
+ return newExpr;
+
+ expr->functionExpr = CheckTerm(expr->functionExpr);
m_treatAsDifferentiableExpr = treatAsDifferentiableExpr;
// If we are in a differentiable function, register differential witness tables involved in
diff --git a/source/slang/slang-check-impl.h b/source/slang/slang-check-impl.h
index eb3f9486c..a209d96d9 100644
--- a/source/slang/slang-check-impl.h
+++ b/source/slang/slang-check-impl.h
@@ -848,6 +848,15 @@ namespace Slang
return result;
}
+ // Setup the flag to indicate disabling the short-circuiting evaluation
+ // for the logical expressions associted with the subcontext
+ SemanticsContext disableShortCircuitLogicalExpr()
+ {
+ SemanticsContext result(*this);
+ result.m_shouldShortCircuitLogicExpr = false;
+ return result;
+ }
+
TryClauseType getEnclosingTryClauseType() { return m_enclosingTryClauseType; }
SemanticsContext withEnclosingTryClauseType(TryClauseType tryClauseType)
@@ -945,6 +954,13 @@ namespace Slang
ASTBuilder* m_astBuilder = nullptr;
Scope* m_outerScope = nullptr;
+
+ // By default, we will support short-circuit evaluation for the logic expression.
+ // However, there are few exceptions where we will disable it:
+ // 1. the logic expression is inside the generic parameter list.
+ // 2. the logic expression is in the init expression of a static const variable.
+ // 3. the logic expression is in an array size declaration.
+ bool m_shouldShortCircuitLogicExpr = true;
};
struct OuterScopeContextRAII
@@ -2589,6 +2605,9 @@ namespace Slang
/// Perform semantic checking on a `modifier` that is being applied to the given `type`
Val* checkTypeModifier(Modifier* modifier, Type* type);
+ private:
+ // Convert the logic operator expression to not use 'InvokeExpr' type
+ Expr* convertToLogicOperatorExpr(InvokeExpr* expr);
};
diff --git a/source/slang/slang-check-overload.cpp b/source/slang/slang-check-overload.cpp
index c6e6677b3..84c005f28 100644
--- a/source/slang/slang-check-overload.cpp
+++ b/source/slang/slang-check-overload.cpp
@@ -2113,6 +2113,15 @@ namespace Slang
Expr* SemanticsExprVisitor::visitGenericAppExpr(GenericAppExpr* genericAppExpr)
{
// Start by checking the base expression and arguments.
+
+ // Disable the short-circuiting logic expression when the experssion is in
+ // the generic parameter.
+ if (this->m_shouldShortCircuitLogicExpr)
+ {
+ auto subContext = disableShortCircuitLogicalExpr();
+ return dispatchExpr(genericAppExpr, subContext);
+ }
+
auto& baseExpr = genericAppExpr->functionExpr;
baseExpr = CheckTerm(baseExpr);
auto& args = genericAppExpr->arguments;
diff --git a/source/slang/slang-lower-to-ir.cpp b/source/slang/slang-lower-to-ir.cpp
index 5e35bf165..409cd65ee 100644
--- a/source/slang/slang-lower-to-ir.cpp
+++ b/source/slang/slang-lower-to-ir.cpp
@@ -4575,6 +4575,46 @@ struct ExprLoweringVisitorBase : public ExprVisitor<Derived, LoweredValInfo>
return LoweredValInfo::simple(result);
}
+ LoweredValInfo visitLogicOperatorShortCircuitExpr(LogicOperatorShortCircuitExpr* expr)
+ {
+ auto builder = context->irBuilder;
+ auto thenBlock = builder->createBlock();
+ auto elseBlock = builder->createBlock();
+ auto afterBlock = builder->createBlock();
+ auto irCond = getSimpleVal(context, lowerRValueExpr(context, expr->arguments[0]));
+
+ // ifElse(<first param>, %true-block, %false-block, %after-block)
+ builder->emitIfElse(irCond, thenBlock, elseBlock, afterBlock);
+
+ // true-block: nonconditionalBranch(%after-block, <second param> : Bool)
+ // true-block: nonconditionalBranch(%after-block, true) for ||
+ builder->insertBlock(thenBlock);
+ builder->setInsertInto(thenBlock);
+ auto trueVal = expr->flavor == LogicOperatorShortCircuitExpr::Flavor::And ?
+ getSimpleVal(context, lowerRValueExpr(context, expr->arguments[1])) :
+ LoweredValInfo::simple(context->irBuilder->getBoolValue(true)).val;
+
+ builder->emitBranch(afterBlock, 1, &trueVal);
+
+ // false-block: nonconditionalBranch(%after-block, false) for &&
+ // false-block: nonconditionalBranch(%after-block, <second param>: Bool) for ||
+ builder->insertBlock(elseBlock);
+ builder->setInsertInto(elseBlock);
+ auto falseVal = expr->flavor == LogicOperatorShortCircuitExpr::Flavor::And ?
+ LoweredValInfo::simple(context->irBuilder->getBoolValue(false)).val :
+ getSimpleVal(context, lowerRValueExpr(context, expr->arguments[1]));
+
+ builder->emitBranch(afterBlock, 1, &falseVal);
+
+ // after-block: return input parameter
+ builder->insertBlock(afterBlock);
+ builder->setInsertInto(afterBlock);
+ auto paramType = lowerType(context, expr->type.type);
+ auto result = builder->emitParam(paramType);
+
+ return LoweredValInfo::simple(result);
+ }
+
LoweredValInfo visitInvokeExpr(InvokeExpr* expr)
{
return sharedLoweringContext.visitInvokeExprImpl(expr, LoweredValInfo(), TryClauseEnvironment());
@@ -5197,6 +5237,12 @@ struct DestinationDrivenRValueExprLoweringVisitor
assign(context, destination, rValue);
}
+ void visitLogicOperatorShortCircuitExpr(LogicOperatorShortCircuitExpr* expr)
+ {
+ auto rValue = lowerRValueExpr(context, expr);
+ assign(context, destination, rValue);
+ }
+
void visitInvokeExpr(InvokeExpr* expr)
{
LoweredValInfo resultRVal;
diff --git a/tests/compute/logic-short-circuit-evaluation.slang b/tests/compute/logic-short-circuit-evaluation.slang
new file mode 100644
index 000000000..585a04770
--- /dev/null
+++ b/tests/compute/logic-short-circuit-evaluation.slang
@@ -0,0 +1,28 @@
+//TEST(compute):COMPARE_COMPUTE:-dx12 -compute -shaderobj
+//TEST(compute):COMPARE_COMPUTE:-vk -compute -shaderobj
+//TEST(compute):COMPARE_COMPUTE_EX:-cuda -compute -shaderobj
+//TEST(compute):COMPARE_COMPUTE_EX:-cpu -compute -compile-arg -O3 -shaderobj
+//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj
+
+// Test doing vector comparisons
+
+//TEST_INPUT:ubuffer(data=[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0], stride=4):out,name=outputBuffer
+RWStructuredBuffer<int> outputBuffer;
+
+bool assignFunc(int index)
+{
+ outputBuffer[index] = 1;
+ return true;
+}
+
+[numthreads(16, 1, 1)]
+void computeMain(int3 dispatchThreadID : SV_DispatchThreadID)
+{
+ int index = dispatchThreadID.x;
+
+ // Only the first 4 elements will be 1
+ (index < 4) && assignFunc(index);
+
+ // Only the last 4 elements will be 1.
+ (index < 12) || assignFunc(index);
+}
diff --git a/tests/compute/logic-short-circuit-evaluation.slang.expected.txt b/tests/compute/logic-short-circuit-evaluation.slang.expected.txt
new file mode 100644
index 000000000..945f08f2c
--- /dev/null
+++ b/tests/compute/logic-short-circuit-evaluation.slang.expected.txt
@@ -0,0 +1,16 @@
+1
+1
+1
+1
+0
+0
+0
+0
+0
+0
+0
+0
+1
+1
+1
+1
diff --git a/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-arithmetic_Exclusive.slang b/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-arithmetic_Exclusive.slang
index 7bfc4d886..ad4dd1535 100644
--- a/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-arithmetic_Exclusive.slang
+++ b/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-arithmetic_Exclusive.slang
@@ -31,9 +31,9 @@ __generic<T : __BuiltinLogicalType>
bool test1Logical() {
return true
#if defined(TEST_when_logical_operators_are_implemented)
- && subgroupExclusiveAnd(T(1)) == T(1)
- && subgroupExclusiveOr(T(1)) == T(1)
- && subgroupExclusiveXor(T(1)) == T(1)
+ & subgroupExclusiveAnd(T(1)) == T(1)
+ & subgroupExclusiveOr(T(1)) == T(1)
+ & subgroupExclusiveXor(T(1)) == T(1)
#endif // #if defined(TEST_when_logical_operators_are_implemented)
;
}
@@ -44,61 +44,61 @@ bool testVLogical() {
return true
#if defined(TEST_when_logical_operators_are_implemented)
- && subgroupExclusiveAnd(gvec(T(1))) == gvec(T(1))
- && subgroupExclusiveOr(gvec(T(1))) == gvec(T(1))
- && subgroupExclusiveXor(gvec(T(1))) == gvec(T(1))
+ & subgroupExclusiveAnd(gvec(T(1))) == gvec(T(1))
+ & subgroupExclusiveOr(gvec(T(1))) == gvec(T(1))
+ & subgroupExclusiveXor(gvec(T(1))) == gvec(T(1))
#endif // #if defined(TEST_when_logical_operators_are_implemented)
;
}
bool testLogical() {
return true
- && test1Logical<int>()
- && testVLogical<int, 2>()
- && testVLogical<int, 3>()
- && testVLogical<int, 4>()
- && test1Logical<int8_t>()
- && testVLogical<int8_t, 2>()
- && testVLogical<int8_t, 3>()
- && testVLogical<int8_t, 4>()
- && test1Logical<int16_t>()
- && testVLogical<int16_t, 2>()
- && testVLogical<int16_t, 3>()
- && testVLogical<int16_t, 4>()
- && test1Logical<int64_t>()
- && testVLogical<int64_t, 2>()
- && testVLogical<int64_t, 3>()
- && testVLogical<int64_t, 4>()
- && test1Logical<uint>()
- && testVLogical<uint, 2>()
- && testVLogical<uint, 3>()
- && testVLogical<uint, 4>()
- && test1Logical<uint8_t>()
- && testVLogical<uint8_t, 2>()
- && testVLogical<uint8_t, 3>()
- && testVLogical<uint8_t, 4>()
- && test1Logical<uint16_t>()
- && testVLogical<uint16_t, 2>()
- && testVLogical<uint16_t, 3>()
- && testVLogical<uint16_t, 4>()
- && test1Logical<uint64_t>()
- && testVLogical<uint64_t, 2>()
- && testVLogical<uint64_t, 3>()
- && testVLogical<uint64_t, 4>()
- && test1Logical<bool>()
- && testVLogical<bool, 2>()
- && testVLogical<bool, 3>()
- && testVLogical<bool, 4>()
+ & test1Logical<int>()
+ & testVLogical<int, 2>()
+ & testVLogical<int, 3>()
+ & testVLogical<int, 4>()
+ & test1Logical<int8_t>()
+ & testVLogical<int8_t, 2>()
+ & testVLogical<int8_t, 3>()
+ & testVLogical<int8_t, 4>()
+ & test1Logical<int16_t>()
+ & testVLogical<int16_t, 2>()
+ & testVLogical<int16_t, 3>()
+ & testVLogical<int16_t, 4>()
+ & test1Logical<int64_t>()
+ & testVLogical<int64_t, 2>()
+ & testVLogical<int64_t, 3>()
+ & testVLogical<int64_t, 4>()
+ & test1Logical<uint>()
+ & testVLogical<uint, 2>()
+ & testVLogical<uint, 3>()
+ & testVLogical<uint, 4>()
+ & test1Logical<uint8_t>()
+ & testVLogical<uint8_t, 2>()
+ & testVLogical<uint8_t, 3>()
+ & testVLogical<uint8_t, 4>()
+ & test1Logical<uint16_t>()
+ & testVLogical<uint16_t, 2>()
+ & testVLogical<uint16_t, 3>()
+ & testVLogical<uint16_t, 4>()
+ & test1Logical<uint64_t>()
+ & testVLogical<uint64_t, 2>()
+ & testVLogical<uint64_t, 3>()
+ & testVLogical<uint64_t, 4>()
+ & test1Logical<bool>()
+ & testVLogical<bool, 2>()
+ & testVLogical<bool, 3>()
+ & testVLogical<bool, 4>()
;
}
__generic<T : __BuiltinArithmeticType>
bool test1Arithmetic() {
return true
- && subgroupExclusiveAdd(T(1)) == T(3)
- && subgroupExclusiveMul(T(1)) == T(1)
- && subgroupExclusiveMin(T(1)) == T(1)
- && subgroupExclusiveMax(T(1)) == T(1)
+ & subgroupExclusiveAdd(T(1)) == T(3)
+ & subgroupExclusiveMul(T(1)) == T(1)
+ & subgroupExclusiveMin(T(1)) == T(1)
+ & subgroupExclusiveMax(T(1)) == T(1)
;
}
__generic<T : __BuiltinArithmeticType, let N : int>
@@ -106,59 +106,59 @@ bool testVArithmetic() {
typealias gvec = vector<T, N>;
return true
- && subgroupExclusiveAdd(gvec(T(1))) == gvec(T(3))
- && subgroupExclusiveMul(gvec(T(1))) == gvec(T(1))
- && subgroupExclusiveMin(gvec(T(1))) == gvec(T(1))
- && subgroupExclusiveMax(gvec(T(1))) == gvec(T(1))
+ & subgroupExclusiveAdd(gvec(T(1))) == gvec(T(3))
+ & subgroupExclusiveMul(gvec(T(1))) == gvec(T(1))
+ & subgroupExclusiveMin(gvec(T(1))) == gvec(T(1))
+ & subgroupExclusiveMax(gvec(T(1))) == gvec(T(1))
;
}
bool testArithmetic() {
return true
- && test1Arithmetic<float>()
- && testVArithmetic<float, 2>()
- && testVArithmetic<float, 3>()
- && testVArithmetic<float, 4>()
- && test1Arithmetic<double>() // WARNING: intel GPU's lack FP64 support
- && testVArithmetic<double, 2>()
- && testVArithmetic<double, 3>()
- && testVArithmetic<double, 4>()
- && test1Arithmetic<half>()
- && testVArithmetic<half, 2>()
- && testVArithmetic<half, 3>()
- && testVArithmetic<half, 4>()
- && test1Arithmetic<int>()
- && testVArithmetic<int, 2>()
- && testVArithmetic<int, 3>()
- && testVArithmetic<int, 4>()
- && test1Arithmetic<int8_t>()
- && testVArithmetic<int8_t, 2>()
- && testVArithmetic<int8_t, 3>()
- && testVArithmetic<int8_t, 4>()
- && test1Arithmetic<int16_t>()
- && testVArithmetic<int16_t, 2>()
- && testVArithmetic<int16_t, 3>()
- && testVArithmetic<int16_t, 4>()
- && test1Arithmetic<int64_t>()
- && testVArithmetic<int64_t, 2>()
- && testVArithmetic<int64_t, 3>()
- && testVArithmetic<int64_t, 4>()
- && test1Arithmetic<uint>()
- && testVArithmetic<uint, 2>()
- && testVArithmetic<uint, 3>()
- && testVArithmetic<uint, 4>()
- && test1Arithmetic<uint8_t>()
- && testVArithmetic<uint8_t, 2>()
- && testVArithmetic<uint8_t, 3>()
- && testVArithmetic<uint8_t, 4>()
- && test1Arithmetic<uint16_t>()
- && testVArithmetic<uint16_t, 2>()
- && testVArithmetic<uint16_t, 3>()
- && testVArithmetic<uint16_t, 4>()
- && test1Arithmetic<uint64_t>()
- && testVArithmetic<uint64_t, 2>()
- && testVArithmetic<uint64_t, 3>()
- && testVArithmetic<uint64_t, 4>()
+ & test1Arithmetic<float>()
+ & testVArithmetic<float, 2>()
+ & testVArithmetic<float, 3>()
+ & testVArithmetic<float, 4>()
+ & test1Arithmetic<double>() // WARNING: intel GPU's lack FP64 support
+ & testVArithmetic<double, 2>()
+ & testVArithmetic<double, 3>()
+ & testVArithmetic<double, 4>()
+ & test1Arithmetic<half>()
+ & testVArithmetic<half, 2>()
+ & testVArithmetic<half, 3>()
+ & testVArithmetic<half, 4>()
+ & test1Arithmetic<int>()
+ & testVArithmetic<int, 2>()
+ & testVArithmetic<int, 3>()
+ & testVArithmetic<int, 4>()
+ & test1Arithmetic<int8_t>()
+ & testVArithmetic<int8_t, 2>()
+ & testVArithmetic<int8_t, 3>()
+ & testVArithmetic<int8_t, 4>()
+ & test1Arithmetic<int16_t>()
+ & testVArithmetic<int16_t, 2>()
+ & testVArithmetic<int16_t, 3>()
+ & testVArithmetic<int16_t, 4>()
+ & test1Arithmetic<int64_t>()
+ & testVArithmetic<int64_t, 2>()
+ & testVArithmetic<int64_t, 3>()
+ & testVArithmetic<int64_t, 4>()
+ & test1Arithmetic<uint>()
+ & testVArithmetic<uint, 2>()
+ & testVArithmetic<uint, 3>()
+ & testVArithmetic<uint, 4>()
+ & test1Arithmetic<uint8_t>()
+ & testVArithmetic<uint8_t, 2>()
+ & testVArithmetic<uint8_t, 3>()
+ & testVArithmetic<uint8_t, 4>()
+ & test1Arithmetic<uint16_t>()
+ & testVArithmetic<uint16_t, 2>()
+ & testVArithmetic<uint16_t, 3>()
+ & testVArithmetic<uint16_t, 4>()
+ & test1Arithmetic<uint64_t>()
+ & testVArithmetic<uint64_t, 2>()
+ & testVArithmetic<uint64_t, 3>()
+ & testVArithmetic<uint64_t, 4>()
;
}
@@ -166,11 +166,11 @@ void computeMain()
{
bool res0 = true
- && testLogical()
+ & testLogical()
;
bool res1 = true
- && testArithmetic()
+ & testArithmetic()
;
if (gl_LocalInvocationID.x == 3) {
diff --git a/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-arithmetic_Inclusive.slang b/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-arithmetic_Inclusive.slang
index 09c6bdbdf..4d6dd9c2f 100644
--- a/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-arithmetic_Inclusive.slang
+++ b/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-arithmetic_Inclusive.slang
@@ -31,9 +31,9 @@ __generic<T : __BuiltinLogicalType>
bool test1Logical() {
return true
#if defined(TEST_when_logical_operators_are_implemented)
- && subgroupInclusiveAnd(T(1)) == T(1)
- && subgroupInclusiveOr(T(1)) == T(1)
- && subgroupInclusiveXor(T(1)) == T(0)
+ & subgroupInclusiveAnd(T(1)) == T(1)
+ & subgroupInclusiveOr(T(1)) == T(1)
+ & subgroupInclusiveXor(T(1)) == T(0)
#endif // #if defined(TEST_when_logical_operators_are_implemented)
;
}
@@ -44,61 +44,61 @@ bool testVLogical() {
return true
#if defined(TEST_when_logical_operators_are_implemented)
- && subgroupInclusiveAnd(gvec(T(1))) == gvec(T(1))
- && subgroupInclusiveOr(gvec(T(1))) == gvec(T(1))
- && subgroupInclusiveXor(gvec(T(1))) == gvec(T(0))
+ & subgroupInclusiveAnd(gvec(T(1))) == gvec(T(1))
+ & subgroupInclusiveOr(gvec(T(1))) == gvec(T(1))
+ & subgroupInclusiveXor(gvec(T(1))) == gvec(T(0))
#endif // #if defined(TEST_when_logical_operators_are_implemented)
;
}
bool testLogical() {
return true
- && test1Logical<int>()
- && testVLogical<int, 2>()
- && testVLogical<int, 3>()
- && testVLogical<int, 4>()
- && test1Logical<int8_t>()
- && testVLogical<int8_t, 2>()
- && testVLogical<int8_t, 3>()
- && testVLogical<int8_t, 4>()
- && test1Logical<int16_t>()
- && testVLogical<int16_t, 2>()
- && testVLogical<int16_t, 3>()
- && testVLogical<int16_t, 4>()
- && test1Logical<int64_t>()
- && testVLogical<int64_t, 2>()
- && testVLogical<int64_t, 3>()
- && testVLogical<int64_t, 4>()
- && test1Logical<uint>()
- && testVLogical<uint, 2>()
- && testVLogical<uint, 3>()
- && testVLogical<uint, 4>()
- && test1Logical<uint8_t>()
- && testVLogical<uint8_t, 2>()
- && testVLogical<uint8_t, 3>()
- && testVLogical<uint8_t, 4>()
- && test1Logical<uint16_t>()
- && testVLogical<uint16_t, 2>()
- && testVLogical<uint16_t, 3>()
- && testVLogical<uint16_t, 4>()
- && test1Logical<uint64_t>()
- && testVLogical<uint64_t, 2>()
- && testVLogical<uint64_t, 3>()
- && testVLogical<uint64_t, 4>()
- && test1Logical<bool>()
- && testVLogical<bool, 2>()
- && testVLogical<bool, 3>()
- && testVLogical<bool, 4>()
+ & test1Logical<int>()
+ & testVLogical<int, 2>()
+ & testVLogical<int, 3>()
+ & testVLogical<int, 4>()
+ & test1Logical<int8_t>()
+ & testVLogical<int8_t, 2>()
+ & testVLogical<int8_t, 3>()
+ & testVLogical<int8_t, 4>()
+ & test1Logical<int16_t>()
+ & testVLogical<int16_t, 2>()
+ & testVLogical<int16_t, 3>()
+ & testVLogical<int16_t, 4>()
+ & test1Logical<int64_t>()
+ & testVLogical<int64_t, 2>()
+ & testVLogical<int64_t, 3>()
+ & testVLogical<int64_t, 4>()
+ & test1Logical<uint>()
+ & testVLogical<uint, 2>()
+ & testVLogical<uint, 3>()
+ & testVLogical<uint, 4>()
+ & test1Logical<uint8_t>()
+ & testVLogical<uint8_t, 2>()
+ & testVLogical<uint8_t, 3>()
+ & testVLogical<uint8_t, 4>()
+ & test1Logical<uint16_t>()
+ & testVLogical<uint16_t, 2>()
+ & testVLogical<uint16_t, 3>()
+ & testVLogical<uint16_t, 4>()
+ & test1Logical<uint64_t>()
+ & testVLogical<uint64_t, 2>()
+ & testVLogical<uint64_t, 3>()
+ & testVLogical<uint64_t, 4>()
+ & test1Logical<bool>()
+ & testVLogical<bool, 2>()
+ & testVLogical<bool, 3>()
+ & testVLogical<bool, 4>()
;
}
__generic<T : __BuiltinArithmeticType>
bool test1Arithmetic() {
return true
- && subgroupInclusiveAdd(T(1)) == T(4)
- && subgroupInclusiveMul(T(1)) == T(1)
- && subgroupInclusiveMin(T(1)) == T(1)
- && subgroupInclusiveMax(T(1)) == T(1)
+ & subgroupInclusiveAdd(T(1)) == T(4)
+ & subgroupInclusiveMul(T(1)) == T(1)
+ & subgroupInclusiveMin(T(1)) == T(1)
+ & subgroupInclusiveMax(T(1)) == T(1)
;
}
__generic<T : __BuiltinArithmeticType, let N : int>
@@ -106,59 +106,59 @@ bool testVArithmetic() {
typealias gvec = vector<T, N>;
return true
- && subgroupInclusiveAdd(gvec(T(1))) == gvec(T(4))
- && subgroupInclusiveMul(gvec(T(1))) == gvec(T(1))
- && subgroupInclusiveMin(gvec(T(1))) == gvec(T(1))
- && subgroupInclusiveMax(gvec(T(1))) == gvec(T(1))
+ & subgroupInclusiveAdd(gvec(T(1))) == gvec(T(4))
+ & subgroupInclusiveMul(gvec(T(1))) == gvec(T(1))
+ & subgroupInclusiveMin(gvec(T(1))) == gvec(T(1))
+ & subgroupInclusiveMax(gvec(T(1))) == gvec(T(1))
;
}
bool testArithmetic() {
return true
- && test1Arithmetic<float>()
- && testVArithmetic<float, 2>()
- && testVArithmetic<float, 3>()
- && testVArithmetic<float, 4>()
- && test1Arithmetic<double>() // WARNING: intel GPU's lack FP64 support
- && testVArithmetic<double, 2>()
- && testVArithmetic<double, 3>()
- && testVArithmetic<double, 4>()
- && test1Arithmetic<half>()
- && testVArithmetic<half, 2>()
- && testVArithmetic<half, 3>()
- && testVArithmetic<half, 4>()
- && test1Arithmetic<int>()
- && testVArithmetic<int, 2>()
- && testVArithmetic<int, 3>()
- && testVArithmetic<int, 4>()
- && test1Arithmetic<int8_t>()
- && testVArithmetic<int8_t, 2>()
- && testVArithmetic<int8_t, 3>()
- && testVArithmetic<int8_t, 4>()
- && test1Arithmetic<int16_t>()
- && testVArithmetic<int16_t, 2>()
- && testVArithmetic<int16_t, 3>()
- && testVArithmetic<int16_t, 4>()
- && test1Arithmetic<int64_t>()
- && testVArithmetic<int64_t, 2>()
- && testVArithmetic<int64_t, 3>()
- && testVArithmetic<int64_t, 4>()
- && test1Arithmetic<uint>()
- && testVArithmetic<uint, 2>()
- && testVArithmetic<uint, 3>()
- && testVArithmetic<uint, 4>()
- && test1Arithmetic<uint8_t>()
- && testVArithmetic<uint8_t, 2>()
- && testVArithmetic<uint8_t, 3>()
- && testVArithmetic<uint8_t, 4>()
- && test1Arithmetic<uint16_t>()
- && testVArithmetic<uint16_t, 2>()
- && testVArithmetic<uint16_t, 3>()
- && testVArithmetic<uint16_t, 4>()
- && test1Arithmetic<uint64_t>()
- && testVArithmetic<uint64_t, 2>()
- && testVArithmetic<uint64_t, 3>()
- && testVArithmetic<uint64_t, 4>()
+ & test1Arithmetic<float>()
+ & testVArithmetic<float, 2>()
+ & testVArithmetic<float, 3>()
+ & testVArithmetic<float, 4>()
+ & test1Arithmetic<double>() // WARNING: intel GPU's lack FP64 support
+ & testVArithmetic<double, 2>()
+ & testVArithmetic<double, 3>()
+ & testVArithmetic<double, 4>()
+ & test1Arithmetic<half>()
+ & testVArithmetic<half, 2>()
+ & testVArithmetic<half, 3>()
+ & testVArithmetic<half, 4>()
+ & test1Arithmetic<int>()
+ & testVArithmetic<int, 2>()
+ & testVArithmetic<int, 3>()
+ & testVArithmetic<int, 4>()
+ & test1Arithmetic<int8_t>()
+ & testVArithmetic<int8_t, 2>()
+ & testVArithmetic<int8_t, 3>()
+ & testVArithmetic<int8_t, 4>()
+ & test1Arithmetic<int16_t>()
+ & testVArithmetic<int16_t, 2>()
+ & testVArithmetic<int16_t, 3>()
+ & testVArithmetic<int16_t, 4>()
+ & test1Arithmetic<int64_t>()
+ & testVArithmetic<int64_t, 2>()
+ & testVArithmetic<int64_t, 3>()
+ & testVArithmetic<int64_t, 4>()
+ & test1Arithmetic<uint>()
+ & testVArithmetic<uint, 2>()
+ & testVArithmetic<uint, 3>()
+ & testVArithmetic<uint, 4>()
+ & test1Arithmetic<uint8_t>()
+ & testVArithmetic<uint8_t, 2>()
+ & testVArithmetic<uint8_t, 3>()
+ & testVArithmetic<uint8_t, 4>()
+ & test1Arithmetic<uint16_t>()
+ & testVArithmetic<uint16_t, 2>()
+ & testVArithmetic<uint16_t, 3>()
+ & testVArithmetic<uint16_t, 4>()
+ & test1Arithmetic<uint64_t>()
+ & testVArithmetic<uint64_t, 2>()
+ & testVArithmetic<uint64_t, 3>()
+ & testVArithmetic<uint64_t, 4>()
;
}
@@ -166,11 +166,11 @@ void computeMain()
{
bool res0 = true
- && testLogical()
+ & testLogical()
;
bool res1 = true
- && testArithmetic()
+ & testArithmetic()
;
if (gl_LocalInvocationID.x == 3) {
diff --git a/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-arithmetic_None.slang b/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-arithmetic_None.slang
index 5300e6796..a1718bc9b 100644
--- a/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-arithmetic_None.slang
+++ b/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-arithmetic_None.slang
@@ -31,9 +31,9 @@ __generic<T : __BuiltinLogicalType>
bool test1Logical() {
return true
#if defined(TEST_when_logical_operators_are_implemented)
- && subgroupAnd(T(1)) == T(1)
- && subgroupOr(T(1)) == T(1)
- && subgroupXor(T(1)) == T(0)
+ & subgroupAnd(T(1)) == T(1)
+ & subgroupOr(T(1)) == T(1)
+ & subgroupXor(T(1)) == T(0)
#endif // #if defined(TEST_when_logical_operators_are_implemented)
;
}
@@ -44,61 +44,61 @@ bool testVLogical() {
return true
#if defined(TEST_when_logical_operators_are_implemented)
- && subgroupAnd(gvec(T(1))) == gvec(T(1))
- && subgroupOr(gvec(T(1))) == gvec(T(1))
- && subgroupXor(gvec(T(1))) == gvec(T(0))
+ & subgroupAnd(gvec(T(1))) == gvec(T(1))
+ & subgroupOr(gvec(T(1))) == gvec(T(1))
+ & subgroupXor(gvec(T(1))) == gvec(T(0))
#endif // #if defined(TEST_when_logical_operators_are_implemented)
;
}
bool testLogical() {
return true
- && test1Logical<int>()
- && testVLogical<int, 2>()
- && testVLogical<int, 3>()
- && testVLogical<int, 4>()
- && test1Logical<int8_t>()
- && testVLogical<int8_t, 2>()
- && testVLogical<int8_t, 3>()
- && testVLogical<int8_t, 4>()
- && test1Logical<int16_t>()
- && testVLogical<int16_t, 2>()
- && testVLogical<int16_t, 3>()
- && testVLogical<int16_t, 4>()
- && test1Logical<int64_t>()
- && testVLogical<int64_t, 2>()
- && testVLogical<int64_t, 3>()
- && testVLogical<int64_t, 4>()
- && test1Logical<uint>()
- && testVLogical<uint, 2>()
- && testVLogical<uint, 3>()
- && testVLogical<uint, 4>()
- && test1Logical<uint8_t>()
- && testVLogical<uint8_t, 2>()
- && testVLogical<uint8_t, 3>()
- && testVLogical<uint8_t, 4>()
- && test1Logical<uint16_t>()
- && testVLogical<uint16_t, 2>()
- && testVLogical<uint16_t, 3>()
- && testVLogical<uint16_t, 4>()
- && test1Logical<uint64_t>()
- && testVLogical<uint64_t, 2>()
- && testVLogical<uint64_t, 3>()
- && testVLogical<uint64_t, 4>()
- && test1Logical<bool>()
- && testVLogical<bool, 2>()
- && testVLogical<bool, 3>()
- && testVLogical<bool, 4>()
+ & test1Logical<int>()
+ & testVLogical<int, 2>()
+ & testVLogical<int, 3>()
+ & testVLogical<int, 4>()
+ & test1Logical<int8_t>()
+ & testVLogical<int8_t, 2>()
+ & testVLogical<int8_t, 3>()
+ & testVLogical<int8_t, 4>()
+ & test1Logical<int16_t>()
+ & testVLogical<int16_t, 2>()
+ & testVLogical<int16_t, 3>()
+ & testVLogical<int16_t, 4>()
+ & test1Logical<int64_t>()
+ & testVLogical<int64_t, 2>()
+ & testVLogical<int64_t, 3>()
+ & testVLogical<int64_t, 4>()
+ & test1Logical<uint>()
+ & testVLogical<uint, 2>()
+ & testVLogical<uint, 3>()
+ & testVLogical<uint, 4>()
+ & test1Logical<uint8_t>()
+ & testVLogical<uint8_t, 2>()
+ & testVLogical<uint8_t, 3>()
+ & testVLogical<uint8_t, 4>()
+ & test1Logical<uint16_t>()
+ & testVLogical<uint16_t, 2>()
+ & testVLogical<uint16_t, 3>()
+ & testVLogical<uint16_t, 4>()
+ & test1Logical<uint64_t>()
+ & testVLogical<uint64_t, 2>()
+ & testVLogical<uint64_t, 3>()
+ & testVLogical<uint64_t, 4>()
+ & test1Logical<bool>()
+ & testVLogical<bool, 2>()
+ & testVLogical<bool, 3>()
+ & testVLogical<bool, 4>()
;
}
__generic<T : __BuiltinArithmeticType>
bool test1Arithmetic() {
return true
- && subgroupAdd(T(1)) == T(local_size_x_v) // 32
- && subgroupMul(T(1)) == T(1)
- && subgroupMin(T(1)) == T(1)
- && subgroupMax(T(1)) == T(1)
+ & subgroupAdd(T(1)) == T(local_size_x_v) // 32
+ & subgroupMul(T(1)) == T(1)
+ & subgroupMin(T(1)) == T(1)
+ & subgroupMax(T(1)) == T(1)
;
}
__generic<T : __BuiltinArithmeticType, let N : int>
@@ -106,59 +106,59 @@ bool testVArithmetic() {
typealias gvec = vector<T, N>;
return true
- && subgroupAdd(gvec(T(1))) == gvec(T(local_size_x_v)) // 32
- && subgroupMul(gvec(T(1))) == gvec(T(1))
- && subgroupMin(gvec(T(1))) == gvec(T(1))
- && subgroupMax(gvec(T(1))) == gvec(T(1))
+ & subgroupAdd(gvec(T(1))) == gvec(T(local_size_x_v)) // 32
+ & subgroupMul(gvec(T(1))) == gvec(T(1))
+ & subgroupMin(gvec(T(1))) == gvec(T(1))
+ & subgroupMax(gvec(T(1))) == gvec(T(1))
;
}
bool testArithmetic() {
return true
- && test1Arithmetic<float>()
- && testVArithmetic<float, 2>()
- && testVArithmetic<float, 3>()
- && testVArithmetic<float, 4>()
- && test1Arithmetic<double>() // WARNING: intel GPU's lack FP64 support
- && testVArithmetic<double, 2>()
- && testVArithmetic<double, 3>()
- && testVArithmetic<double, 4>()
- && test1Arithmetic<half>()
- && testVArithmetic<half, 2>()
- && testVArithmetic<half, 3>()
- && testVArithmetic<half, 4>()
- && test1Arithmetic<int>()
- && testVArithmetic<int, 2>()
- && testVArithmetic<int, 3>()
- && testVArithmetic<int, 4>()
- && test1Arithmetic<int8_t>()
- && testVArithmetic<int8_t, 2>()
- && testVArithmetic<int8_t, 3>()
- && testVArithmetic<int8_t, 4>()
- && test1Arithmetic<int16_t>()
- && testVArithmetic<int16_t, 2>()
- && testVArithmetic<int16_t, 3>()
- && testVArithmetic<int16_t, 4>()
- && test1Arithmetic<int64_t>()
- && testVArithmetic<int64_t, 2>()
- && testVArithmetic<int64_t, 3>()
- && testVArithmetic<int64_t, 4>()
- && test1Arithmetic<uint>()
- && testVArithmetic<uint, 2>()
- && testVArithmetic<uint, 3>()
- && testVArithmetic<uint, 4>()
- && test1Arithmetic<uint8_t>()
- && testVArithmetic<uint8_t, 2>()
- && testVArithmetic<uint8_t, 3>()
- && testVArithmetic<uint8_t, 4>()
- && test1Arithmetic<uint16_t>()
- && testVArithmetic<uint16_t, 2>()
- && testVArithmetic<uint16_t, 3>()
- && testVArithmetic<uint16_t, 4>()
- && test1Arithmetic<uint64_t>()
- && testVArithmetic<uint64_t, 2>()
- && testVArithmetic<uint64_t, 3>()
- && testVArithmetic<uint64_t, 4>()
+ & test1Arithmetic<float>()
+ & testVArithmetic<float, 2>()
+ & testVArithmetic<float, 3>()
+ & testVArithmetic<float, 4>()
+ & test1Arithmetic<double>() // WARNING: intel GPU's lack FP64 support
+ & testVArithmetic<double, 2>()
+ & testVArithmetic<double, 3>()
+ & testVArithmetic<double, 4>()
+ & test1Arithmetic<half>()
+ & testVArithmetic<half, 2>()
+ & testVArithmetic<half, 3>()
+ & testVArithmetic<half, 4>()
+ & test1Arithmetic<int>()
+ & testVArithmetic<int, 2>()
+ & testVArithmetic<int, 3>()
+ & testVArithmetic<int, 4>()
+ & test1Arithmetic<int8_t>()
+ & testVArithmetic<int8_t, 2>()
+ & testVArithmetic<int8_t, 3>()
+ & testVArithmetic<int8_t, 4>()
+ & test1Arithmetic<int16_t>()
+ & testVArithmetic<int16_t, 2>()
+ & testVArithmetic<int16_t, 3>()
+ & testVArithmetic<int16_t, 4>()
+ & test1Arithmetic<int64_t>()
+ & testVArithmetic<int64_t, 2>()
+ & testVArithmetic<int64_t, 3>()
+ & testVArithmetic<int64_t, 4>()
+ & test1Arithmetic<uint>()
+ & testVArithmetic<uint, 2>()
+ & testVArithmetic<uint, 3>()
+ & testVArithmetic<uint, 4>()
+ & test1Arithmetic<uint8_t>()
+ & testVArithmetic<uint8_t, 2>()
+ & testVArithmetic<uint8_t, 3>()
+ & testVArithmetic<uint8_t, 4>()
+ & test1Arithmetic<uint16_t>()
+ & testVArithmetic<uint16_t, 2>()
+ & testVArithmetic<uint16_t, 3>()
+ & testVArithmetic<uint16_t, 4>()
+ & test1Arithmetic<uint64_t>()
+ & testVArithmetic<uint64_t, 2>()
+ & testVArithmetic<uint64_t, 3>()
+ & testVArithmetic<uint64_t, 4>()
;
}
@@ -166,11 +166,11 @@ void computeMain()
{
bool res0 = true
- && testLogical()
+ & testLogical()
;
bool res1 = true
- && testArithmetic()
+ & testArithmetic()
;
if (gl_LocalInvocationID.x == 3) {
diff --git a/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-ballot.slang b/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-ballot.slang
index 8bbd60689..d6947d2d4 100644
--- a/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-ballot.slang
+++ b/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-ballot.slang
@@ -25,8 +25,8 @@ layout(local_size_x = 32) in;
__generic<T : __BuiltinLogicalType>
bool test1BroadcastX() {
return true
- && subgroupBroadcast(T(1), 0) == T(1)
- && subgroupBroadcastFirst(T(1)) == T(1)
+ & subgroupBroadcast(T(1), 0) == T(1)
+ & subgroupBroadcastFirst(T(1)) == T(1)
;
}
__generic<T : __BuiltinLogicalType, let N : int>
@@ -34,16 +34,16 @@ bool testVBroadcastX() {
typealias gvec = vector<T, N>;
return true
- && subgroupBroadcast(gvec(T(1)), 0) == gvec(T(1))
- && subgroupBroadcastFirst(gvec(T(1))) == gvec(T(1))
+ & subgroupBroadcast(gvec(T(1)), 0) == gvec(T(1))
+ & subgroupBroadcastFirst(gvec(T(1))) == gvec(T(1))
;
}
__generic<T : __BuiltinFloatingPointType>
bool test1BroadcastX() {
return true
- && subgroupBroadcast(T(1), 0) == T(1)
- && subgroupBroadcastFirst(T(1)) == T(1)
+ & subgroupBroadcast(T(1), 0) == T(1)
+ & subgroupBroadcastFirst(T(1)) == T(1)
;
}
__generic<T : __BuiltinFloatingPointType, let N : int>
@@ -51,85 +51,85 @@ bool testVBroadcastX() {
typealias gvec = vector<T, N>;
return true
- && subgroupBroadcast(gvec(T(1)), 0) == gvec(T(1))
- && subgroupBroadcastFirst(gvec(T(1))) == gvec(T(1))
+ & subgroupBroadcast(gvec(T(1)), 0) == gvec(T(1))
+ & subgroupBroadcastFirst(gvec(T(1))) == gvec(T(1))
;
}
bool testBroadcastX() {
return true
- && test1BroadcastX<float>()
- && testVBroadcastX<float, 2>()
- && testVBroadcastX<float, 3>()
- && testVBroadcastX<float, 4>()
- && test1BroadcastX<double>() // WARNING: intel GPU's lack FP64 support
- && testVBroadcastX<double, 2>()
- && testVBroadcastX<double, 3>()
- && testVBroadcastX<double, 4>()
- && test1BroadcastX<half>()
- && testVBroadcastX<half, 2>()
- && testVBroadcastX<half, 3>()
- && testVBroadcastX<half, 4>()
- && test1BroadcastX<int>()
- && testVBroadcastX<int, 2>()
- && testVBroadcastX<int, 3>()
- && testVBroadcastX<int, 4>()
- && test1BroadcastX<int8_t>()
- && testVBroadcastX<int8_t, 2>()
- && testVBroadcastX<int8_t, 3>()
- && testVBroadcastX<int8_t, 4>()
- && test1BroadcastX<int16_t>()
- && testVBroadcastX<int16_t, 2>()
- && testVBroadcastX<int16_t, 3>()
- && testVBroadcastX<int16_t, 4>()
- && test1BroadcastX<int64_t>()
- && testVBroadcastX<int64_t, 2>()
- && testVBroadcastX<int64_t, 3>()
- && testVBroadcastX<int64_t, 4>()
- && test1BroadcastX<uint>()
- && testVBroadcastX<uint, 2>()
- && testVBroadcastX<uint, 3>()
- && testVBroadcastX<uint, 4>()
- && test1BroadcastX<uint8_t>()
- && testVBroadcastX<uint8_t, 2>()
- && testVBroadcastX<uint8_t, 3>()
- && testVBroadcastX<uint8_t, 4>()
- && test1BroadcastX<uint16_t>()
- && testVBroadcastX<uint16_t, 2>()
- && testVBroadcastX<uint16_t, 3>()
- && testVBroadcastX<uint16_t, 4>()
- && test1BroadcastX<uint64_t>()
- && testVBroadcastX<uint64_t, 2>()
- && testVBroadcastX<uint64_t, 3>()
- && testVBroadcastX<uint64_t, 4>()
- && test1BroadcastX<bool>()
- && testVBroadcastX<bool, 2>()
- && testVBroadcastX<bool, 3>()
- && testVBroadcastX<bool, 4>()
+ & test1BroadcastX<float>()
+ & testVBroadcastX<float, 2>()
+ & testVBroadcastX<float, 3>()
+ & testVBroadcastX<float, 4>()
+ & test1BroadcastX<double>() // WARNING: intel GPU's lack FP64 support
+ & testVBroadcastX<double, 2>()
+ & testVBroadcastX<double, 3>()
+ & testVBroadcastX<double, 4>()
+ & test1BroadcastX<half>()
+ & testVBroadcastX<half, 2>()
+ & testVBroadcastX<half, 3>()
+ & testVBroadcastX<half, 4>()
+ & test1BroadcastX<int>()
+ & testVBroadcastX<int, 2>()
+ & testVBroadcastX<int, 3>()
+ & testVBroadcastX<int, 4>()
+ & test1BroadcastX<int8_t>()
+ & testVBroadcastX<int8_t, 2>()
+ & testVBroadcastX<int8_t, 3>()
+ & testVBroadcastX<int8_t, 4>()
+ & test1BroadcastX<int16_t>()
+ & testVBroadcastX<int16_t, 2>()
+ & testVBroadcastX<int16_t, 3>()
+ & testVBroadcastX<int16_t, 4>()
+ & test1BroadcastX<int64_t>()
+ & testVBroadcastX<int64_t, 2>()
+ & testVBroadcastX<int64_t, 3>()
+ & testVBroadcastX<int64_t, 4>()
+ & test1BroadcastX<uint>()
+ & testVBroadcastX<uint, 2>()
+ & testVBroadcastX<uint, 3>()
+ & testVBroadcastX<uint, 4>()
+ & test1BroadcastX<uint8_t>()
+ & testVBroadcastX<uint8_t, 2>()
+ & testVBroadcastX<uint8_t, 3>()
+ & testVBroadcastX<uint8_t, 4>()
+ & test1BroadcastX<uint16_t>()
+ & testVBroadcastX<uint16_t, 2>()
+ & testVBroadcastX<uint16_t, 3>()
+ & testVBroadcastX<uint16_t, 4>()
+ & test1BroadcastX<uint64_t>()
+ & testVBroadcastX<uint64_t, 2>()
+ & testVBroadcastX<uint64_t, 3>()
+ & testVBroadcastX<uint64_t, 4>()
+ & test1BroadcastX<bool>()
+ & testVBroadcastX<bool, 2>()
+ & testVBroadcastX<bool, 3>()
+ & testVBroadcastX<bool, 4>()
;
}
bool testBallot() {
return true
- && (subgroupBallot(true).x == 0xFFFFFFFF)
- && (subgroupInverseBallot(uvec4(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF)) == true)
- && (subgroupBallotBitExtract(uvec4(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF), 0) == true)
- && (subgroupBallotBitCount(uvec4(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF)) == 32)
- && (subgroupBallotInclusiveBitCount(uvec4(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF)) != 0)
+ & (subgroupBallot(true).x == 0xFFFFFFFF)
+ & (subgroupInverseBallot(uvec4(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF)) == true)
+ & (subgroupBallotBitExtract(uvec4(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF), 0) == true)
+ & (subgroupBallotBitCount(uvec4(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF)) == 32)
+ & (subgroupBallotInclusiveBitCount(uvec4(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF)) != 0)
#ifdef TEST_when_glsl_subgroupBallotExclusiveBitCount_is_not_bugged
- && (subgroupBallotExclusiveBitCount(uvec4(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF)) != 0)
+ & (subgroupBallotExclusiveBitCount(uvec4(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF)) != 0)
#endif
- && (subgroupBallotFindLSB(uvec4(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF)) == 0)
- && (subgroupBallotFindMSB(uvec4(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF)) == 31)
+ & (subgroupBallotFindLSB(uvec4(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF)) == 0)
+ & (subgroupBallotFindMSB(uvec4(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF)) == 31)
;
}
void computeMain()
{
outputBuffer.data[0] = true
- && testBroadcastX()
+ & testBroadcastX()
;
outputBuffer.data[1] = true
- && testBallot()
+ & testBallot()
;
// CHECK_GLSL: void main(
diff --git a/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-clustered.slang b/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-clustered.slang
index 9e9b089d2..c40421aa1 100644
--- a/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-clustered.slang
+++ b/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-clustered.slang
@@ -23,9 +23,9 @@ layout(local_size_x = 32) in;
__generic<T : __BuiltinLogicalType>
bool test1Logical() {
return true
- && subgroupClusteredAnd(T(1), 1) == T(1)
- && subgroupClusteredOr(T(1), 1) == T(1)
- && subgroupClusteredXor(T(1), 1) == T(1)
+ & subgroupClusteredAnd(T(1), 1) == T(1)
+ & subgroupClusteredOr(T(1), 1) == T(1)
+ & subgroupClusteredXor(T(1), 1) == T(1)
;
}
@@ -34,60 +34,60 @@ bool testVLogical() {
typealias gvec = vector<T, N>;
return true
- && subgroupClusteredAnd(gvec(T(1)), 1) == gvec(T(1))
- && subgroupClusteredOr(gvec(T(1)), 1) == gvec(T(1))
- && subgroupClusteredXor(gvec(T(1)), 1) == gvec(T(1))
+ & subgroupClusteredAnd(gvec(T(1)), 1) == gvec(T(1))
+ & subgroupClusteredOr(gvec(T(1)), 1) == gvec(T(1))
+ & subgroupClusteredXor(gvec(T(1)), 1) == gvec(T(1))
;
}
bool testLogical() {
return true
- && test1Logical<int>()
- && testVLogical<int, 2>()
- && testVLogical<int, 3>()
- && testVLogical<int, 4>()
- && test1Logical<int8_t>()
- && testVLogical<int8_t, 2>()
- && testVLogical<int8_t, 3>()
- && testVLogical<int8_t, 4>()
- && test1Logical<int16_t>()
- && testVLogical<int16_t, 2>()
- && testVLogical<int16_t, 3>()
- && testVLogical<int16_t, 4>()
- && test1Logical<int64_t>()
- && testVLogical<int64_t, 2>()
- && testVLogical<int64_t, 3>()
- && testVLogical<int64_t, 4>()
- && test1Logical<uint>()
- && testVLogical<uint, 2>()
- && testVLogical<uint, 3>()
- && testVLogical<uint, 4>()
- && test1Logical<uint8_t>()
- && testVLogical<uint8_t, 2>()
- && testVLogical<uint8_t, 3>()
- && testVLogical<uint8_t, 4>()
- && test1Logical<uint16_t>()
- && testVLogical<uint16_t, 2>()
- && testVLogical<uint16_t, 3>()
- && testVLogical<uint16_t, 4>()
- && test1Logical<uint64_t>()
- && testVLogical<uint64_t, 2>()
- && testVLogical<uint64_t, 3>()
- && testVLogical<uint64_t, 4>()
- && test1Logical<bool>()
- && testVLogical<bool, 2>()
- && testVLogical<bool, 3>()
- && testVLogical<bool, 4>()
+ & test1Logical<int>()
+ & testVLogical<int, 2>()
+ & testVLogical<int, 3>()
+ & testVLogical<int, 4>()
+ & test1Logical<int8_t>()
+ & testVLogical<int8_t, 2>()
+ & testVLogical<int8_t, 3>()
+ & testVLogical<int8_t, 4>()
+ & test1Logical<int16_t>()
+ & testVLogical<int16_t, 2>()
+ & testVLogical<int16_t, 3>()
+ & testVLogical<int16_t, 4>()
+ & test1Logical<int64_t>()
+ & testVLogical<int64_t, 2>()
+ & testVLogical<int64_t, 3>()
+ & testVLogical<int64_t, 4>()
+ & test1Logical<uint>()
+ & testVLogical<uint, 2>()
+ & testVLogical<uint, 3>()
+ & testVLogical<uint, 4>()
+ & test1Logical<uint8_t>()
+ & testVLogical<uint8_t, 2>()
+ & testVLogical<uint8_t, 3>()
+ & testVLogical<uint8_t, 4>()
+ & test1Logical<uint16_t>()
+ & testVLogical<uint16_t, 2>()
+ & testVLogical<uint16_t, 3>()
+ & testVLogical<uint16_t, 4>()
+ & test1Logical<uint64_t>()
+ & testVLogical<uint64_t, 2>()
+ & testVLogical<uint64_t, 3>()
+ & testVLogical<uint64_t, 4>()
+ & test1Logical<bool>()
+ & testVLogical<bool, 2>()
+ & testVLogical<bool, 3>()
+ & testVLogical<bool, 4>()
;
}
__generic<T : __BuiltinArithmeticType>
bool test1Arithmetic() {
return true
- && subgroupClusteredAdd(T(1), 1) == T(1)
- && subgroupClusteredMul(T(1), 1) == T(1)
- && subgroupClusteredMin(T(1), 1) == T(1)
- && subgroupClusteredMax(T(1), 1) == T(1)
+ & subgroupClusteredAdd(T(1), 1) == T(1)
+ & subgroupClusteredMul(T(1), 1) == T(1)
+ & subgroupClusteredMin(T(1), 1) == T(1)
+ & subgroupClusteredMax(T(1), 1) == T(1)
;
}
@@ -96,69 +96,69 @@ bool testVArithmetic() {
typealias gvec = vector<T, N>;
return true
- && subgroupClusteredAdd(gvec(T(1)), 1) == gvec(T(1))
- && subgroupClusteredMul(gvec(T(1)), 1) == gvec(T(1))
- && subgroupClusteredMin(gvec(T(1)), 1) == gvec(T(1))
- && subgroupClusteredMax(gvec(T(1)), 1) == gvec(T(1))
+ & subgroupClusteredAdd(gvec(T(1)), 1) == gvec(T(1))
+ & subgroupClusteredMul(gvec(T(1)), 1) == gvec(T(1))
+ & subgroupClusteredMin(gvec(T(1)), 1) == gvec(T(1))
+ & subgroupClusteredMax(gvec(T(1)), 1) == gvec(T(1))
;
}
bool testArithmetic() {
return true
- && test1Arithmetic<float>()
- && testVArithmetic<float, 2>()
- && testVArithmetic<float, 3>()
- && testVArithmetic<float, 4>()
- && test1Arithmetic<double>() // WARNING: intel GPU's lack FP64 support
- && testVArithmetic<double, 2>()
- && testVArithmetic<double, 3>()
- && testVArithmetic<double, 4>()
- && test1Arithmetic<half>()
- && testVArithmetic<half, 2>()
- && testVArithmetic<half, 3>()
- && testVArithmetic<half, 4>()
- && test1Arithmetic<int>()
- && testVArithmetic<int, 2>()
- && testVArithmetic<int, 3>()
- && testVArithmetic<int, 4>()
- && test1Arithmetic<int8_t>()
- && testVArithmetic<int8_t, 2>()
- && testVArithmetic<int8_t, 3>()
- && testVArithmetic<int8_t, 4>()
- && test1Arithmetic<int16_t>()
- && testVArithmetic<int16_t, 2>()
- && testVArithmetic<int16_t, 3>()
- && testVArithmetic<int16_t, 4>()
- && test1Arithmetic<int64_t>()
- && testVArithmetic<int64_t, 2>()
- && testVArithmetic<int64_t, 3>()
- && testVArithmetic<int64_t, 4>()
- && test1Arithmetic<uint>()
- && testVArithmetic<uint, 2>()
- && testVArithmetic<uint, 3>()
- && testVArithmetic<uint, 4>()
- && test1Arithmetic<uint8_t>()
- && testVArithmetic<uint8_t, 2>()
- && testVArithmetic<uint8_t, 3>()
- && testVArithmetic<uint8_t, 4>()
- && test1Arithmetic<uint16_t>()
- && testVArithmetic<uint16_t, 2>()
- && testVArithmetic<uint16_t, 3>()
- && testVArithmetic<uint16_t, 4>()
- && test1Arithmetic<uint64_t>()
- && testVArithmetic<uint64_t, 2>()
- && testVArithmetic<uint64_t, 3>()
- && testVArithmetic<uint64_t, 4>()
+ & test1Arithmetic<float>()
+ & testVArithmetic<float, 2>()
+ & testVArithmetic<float, 3>()
+ & testVArithmetic<float, 4>()
+ & test1Arithmetic<double>() // WARNING: intel GPU's lack FP64 support
+ & testVArithmetic<double, 2>()
+ & testVArithmetic<double, 3>()
+ & testVArithmetic<double, 4>()
+ & test1Arithmetic<half>()
+ & testVArithmetic<half, 2>()
+ & testVArithmetic<half, 3>()
+ & testVArithmetic<half, 4>()
+ & test1Arithmetic<int>()
+ & testVArithmetic<int, 2>()
+ & testVArithmetic<int, 3>()
+ & testVArithmetic<int, 4>()
+ & test1Arithmetic<int8_t>()
+ & testVArithmetic<int8_t, 2>()
+ & testVArithmetic<int8_t, 3>()
+ & testVArithmetic<int8_t, 4>()
+ & test1Arithmetic<int16_t>()
+ & testVArithmetic<int16_t, 2>()
+ & testVArithmetic<int16_t, 3>()
+ & testVArithmetic<int16_t, 4>()
+ & test1Arithmetic<int64_t>()
+ & testVArithmetic<int64_t, 2>()
+ & testVArithmetic<int64_t, 3>()
+ & testVArithmetic<int64_t, 4>()
+ & test1Arithmetic<uint>()
+ & testVArithmetic<uint, 2>()
+ & testVArithmetic<uint, 3>()
+ & testVArithmetic<uint, 4>()
+ & test1Arithmetic<uint8_t>()
+ & testVArithmetic<uint8_t, 2>()
+ & testVArithmetic<uint8_t, 3>()
+ & testVArithmetic<uint8_t, 4>()
+ & test1Arithmetic<uint16_t>()
+ & testVArithmetic<uint16_t, 2>()
+ & testVArithmetic<uint16_t, 3>()
+ & testVArithmetic<uint16_t, 4>()
+ & test1Arithmetic<uint64_t>()
+ & testVArithmetic<uint64_t, 2>()
+ & testVArithmetic<uint64_t, 3>()
+ & testVArithmetic<uint64_t, 4>()
;
}
void computeMain()
{
outputBuffer.data[0] = true
- && testLogical()
+ & testLogical()
;
outputBuffer.data[1] = true
- && testArithmetic()
+ & testArithmetic()
;
// CHECK_GLSL: void main(
diff --git a/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-quad.slang b/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-quad.slang
index 5ed6398b2..3465f1b26 100644
--- a/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-quad.slang
+++ b/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-quad.slang
@@ -22,10 +22,10 @@ layout(local_size_x = 4) in;
__generic<T : __BuiltinLogicalType>
bool test1QuadX() {
return true
- && subgroupQuadSwapHorizontal(T(2)) == T(2)
- && subgroupQuadSwapVertical(T(2)) == T(2)
- && subgroupQuadSwapDiagonal(T(3)) == T(3)
- && subgroupQuadBroadcast(T(1), 1) == T(1)
+ & subgroupQuadSwapHorizontal(T(2)) == T(2)
+ & subgroupQuadSwapVertical(T(2)) == T(2)
+ & subgroupQuadSwapDiagonal(T(3)) == T(3)
+ & subgroupQuadBroadcast(T(1), 1) == T(1)
;
}
__generic<T : __BuiltinLogicalType, let N : int>
@@ -33,20 +33,20 @@ bool testVQuadX() {
typealias gvec = vector<T, N>;
return true
- && subgroupQuadSwapHorizontal(gvec(T(2))) == gvec(T(2))
- && subgroupQuadSwapVertical(gvec(T(2))) == gvec(T(2))
- && subgroupQuadSwapDiagonal(gvec(T(3))) == gvec(T(3))
- && subgroupQuadBroadcast(gvec(T(1)), 1) == gvec(T(1))
+ & subgroupQuadSwapHorizontal(gvec(T(2))) == gvec(T(2))
+ & subgroupQuadSwapVertical(gvec(T(2))) == gvec(T(2))
+ & subgroupQuadSwapDiagonal(gvec(T(3))) == gvec(T(3))
+ & subgroupQuadBroadcast(gvec(T(1)), 1) == gvec(T(1))
;
}
__generic<T : __BuiltinFloatingPointType>
bool test1QuadX() {
return true
- && subgroupQuadSwapHorizontal(T(2)) == T(2)
- && subgroupQuadSwapVertical(T(2)) == T(2)
- && subgroupQuadSwapDiagonal(T(3)) == T(3)
- && subgroupQuadBroadcast(T(1), 1) == T(1)
+ & subgroupQuadSwapHorizontal(T(2)) == T(2)
+ & subgroupQuadSwapVertical(T(2)) == T(2)
+ & subgroupQuadSwapDiagonal(T(3)) == T(3)
+ & subgroupQuadBroadcast(T(1), 1) == T(1)
;
}
__generic<T : __BuiltinFloatingPointType, let N : int>
@@ -54,62 +54,62 @@ bool testVQuadX() {
typealias gvec = vector<T, N>;
return true
- && subgroupQuadSwapHorizontal(gvec(T(2))) == gvec(T(2))
- && subgroupQuadSwapVertical(gvec(T(2))) == gvec(T(2))
- && subgroupQuadSwapDiagonal(gvec(T(3))) == gvec(T(3))
- && subgroupQuadBroadcast(gvec(T(1)), 1) == gvec(T(1))
+ & subgroupQuadSwapHorizontal(gvec(T(2))) == gvec(T(2))
+ & subgroupQuadSwapVertical(gvec(T(2))) == gvec(T(2))
+ & subgroupQuadSwapDiagonal(gvec(T(3))) == gvec(T(3))
+ & subgroupQuadBroadcast(gvec(T(1)), 1) == gvec(T(1))
;
}
bool testQuadSwapX() {
return true
- && test1QuadX<float>()
- && testVQuadX<float, 2>()
- && testVQuadX<float, 3>()
- && testVQuadX<float, 4>()
- && test1QuadX<double>() // WARNING: intel GPU's lack FP64 support
- && testVQuadX<double, 2>()
- && testVQuadX<double, 3>()
- && testVQuadX<double, 4>()
- && test1QuadX<half>()
- && testVQuadX<half, 2>()
- && testVQuadX<half, 3>()
- && testVQuadX<half, 4>()
- && test1QuadX<int>()
- && testVQuadX<int, 2>()
- && testVQuadX<int, 3>()
- && testVQuadX<int, 4>()
- && test1QuadX<int8_t>()
- && testVQuadX<int8_t, 2>()
- && testVQuadX<int8_t, 3>()
- && testVQuadX<int8_t, 4>()
- && test1QuadX<int16_t>()
- && testVQuadX<int16_t, 2>()
- && testVQuadX<int16_t, 3>()
- && testVQuadX<int16_t, 4>()
- && test1QuadX<int64_t>()
- && testVQuadX<int64_t, 2>()
- && testVQuadX<int64_t, 3>()
- && testVQuadX<int64_t, 4>()
- && test1QuadX<uint>()
- && testVQuadX<uint, 2>()
- && testVQuadX<uint, 3>()
- && testVQuadX<uint, 4>()
- && test1QuadX<uint8_t>()
- && testVQuadX<uint8_t, 2>()
- && testVQuadX<uint8_t, 3>()
- && testVQuadX<uint8_t, 4>()
- && test1QuadX<uint16_t>()
- && testVQuadX<uint16_t, 2>()
- && testVQuadX<uint16_t, 3>()
- && testVQuadX<uint16_t, 4>()
- && test1QuadX<uint64_t>()
- && testVQuadX<uint64_t, 2>()
- && testVQuadX<uint64_t, 3>()
- && testVQuadX<uint64_t, 4>()
- && test1QuadX<bool>()
- && testVQuadX<bool, 2>()
- && testVQuadX<bool, 3>()
- && testVQuadX<bool, 4>()
+ & test1QuadX<float>()
+ & testVQuadX<float, 2>()
+ & testVQuadX<float, 3>()
+ & testVQuadX<float, 4>()
+ & test1QuadX<double>() // WARNING: intel GPU's lack FP64 support
+ & testVQuadX<double, 2>()
+ & testVQuadX<double, 3>()
+ & testVQuadX<double, 4>()
+ & test1QuadX<half>()
+ & testVQuadX<half, 2>()
+ & testVQuadX<half, 3>()
+ & testVQuadX<half, 4>()
+ & test1QuadX<int>()
+ & testVQuadX<int, 2>()
+ & testVQuadX<int, 3>()
+ & testVQuadX<int, 4>()
+ & test1QuadX<int8_t>()
+ & testVQuadX<int8_t, 2>()
+ & testVQuadX<int8_t, 3>()
+ & testVQuadX<int8_t, 4>()
+ & test1QuadX<int16_t>()
+ & testVQuadX<int16_t, 2>()
+ & testVQuadX<int16_t, 3>()
+ & testVQuadX<int16_t, 4>()
+ & test1QuadX<int64_t>()
+ & testVQuadX<int64_t, 2>()
+ & testVQuadX<int64_t, 3>()
+ & testVQuadX<int64_t, 4>()
+ & test1QuadX<uint>()
+ & testVQuadX<uint, 2>()
+ & testVQuadX<uint, 3>()
+ & testVQuadX<uint, 4>()
+ & test1QuadX<uint8_t>()
+ & testVQuadX<uint8_t, 2>()
+ & testVQuadX<uint8_t, 3>()
+ & testVQuadX<uint8_t, 4>()
+ & test1QuadX<uint16_t>()
+ & testVQuadX<uint16_t, 2>()
+ & testVQuadX<uint16_t, 3>()
+ & testVQuadX<uint16_t, 4>()
+ & test1QuadX<uint64_t>()
+ & testVQuadX<uint64_t, 2>()
+ & testVQuadX<uint64_t, 3>()
+ & testVQuadX<uint64_t, 4>()
+ & test1QuadX<bool>()
+ & testVQuadX<bool, 2>()
+ & testVQuadX<bool, 3>()
+ & testVQuadX<bool, 4>()
;
}
@@ -117,7 +117,7 @@ void computeMain()
{
outputBuffer.data[0] = true
- && testQuadSwapX()
+ & testQuadSwapX()
;
// CHECK_GLSL: void main(
diff --git a/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-shuffle-relative.slang b/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-shuffle-relative.slang
index 0e187c568..ea4331dbe 100644
--- a/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-shuffle-relative.slang
+++ b/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-shuffle-relative.slang
@@ -23,8 +23,8 @@ layout(local_size_x = 32) in;
__generic<T : __BuiltinLogicalType>
bool test1ShuffleX() {
return true
- && subgroupShuffleUp(T(1), 1) == T(1)
- && subgroupShuffleDown(T(1), 1) == T(1)
+ & subgroupShuffleUp(T(1), 1) == T(1)
+ & subgroupShuffleDown(T(1), 1) == T(1)
;
}
__generic<T : __BuiltinLogicalType, let N : int>
@@ -32,16 +32,16 @@ bool testVShuffleX() {
typealias gvec = vector<T, N>;
return true
- && subgroupShuffleUp(gvec(T(1)), 1) == gvec(T(1))
- && subgroupShuffleDown(gvec(T(1)), 1) == gvec(T(1))
+ & subgroupShuffleUp(gvec(T(1)), 1) == gvec(T(1))
+ & subgroupShuffleDown(gvec(T(1)), 1) == gvec(T(1))
;
}
__generic<T : __BuiltinFloatingPointType>
bool test1ShuffleX() {
return true
- && subgroupShuffleUp(T(1), 1) == T(1)
- && subgroupShuffleDown(T(1), 1) == T(1)
+ & subgroupShuffleUp(T(1), 1) == T(1)
+ & subgroupShuffleDown(T(1), 1) == T(1)
;
}
__generic<T : __BuiltinFloatingPointType, let N : int>
@@ -49,67 +49,67 @@ bool testVShuffleX() {
typealias gvec = vector<T, N>;
return true
- && subgroupShuffleUp(gvec(T(1)), 1) == gvec(T(1))
- && subgroupShuffleDown(gvec(T(1)), 1) == gvec(T(1))
+ & subgroupShuffleUp(gvec(T(1)), 1) == gvec(T(1))
+ & subgroupShuffleDown(gvec(T(1)), 1) == gvec(T(1))
;
}
bool testShuffleX() {
return true
- && test1ShuffleX<float>()
- && testVShuffleX<float, 2>()
- && testVShuffleX<float, 3>()
- && testVShuffleX<float, 4>()
- && test1ShuffleX<double>() // WARNING: intel GPU's lack FP64 support
- && testVShuffleX<double, 2>()
- && testVShuffleX<double, 3>()
- && testVShuffleX<double, 4>()
- && test1ShuffleX<half>()
- && testVShuffleX<half, 2>()
- && testVShuffleX<half, 3>()
- && testVShuffleX<half, 4>()
- && test1ShuffleX<int>()
- && testVShuffleX<int, 2>()
- && testVShuffleX<int, 3>()
- && testVShuffleX<int, 4>()
- && test1ShuffleX<int8_t>()
- && testVShuffleX<int8_t, 2>()
- && testVShuffleX<int8_t, 3>()
- && testVShuffleX<int8_t, 4>()
- && test1ShuffleX<int16_t>()
- && testVShuffleX<int16_t, 2>()
- && testVShuffleX<int16_t, 3>()
- && testVShuffleX<int16_t, 4>()
- && test1ShuffleX<int64_t>()
- && testVShuffleX<int64_t, 2>()
- && testVShuffleX<int64_t, 3>()
- && testVShuffleX<int64_t, 4>()
- && test1ShuffleX<uint>()
- && testVShuffleX<uint, 2>()
- && testVShuffleX<uint, 3>()
- && testVShuffleX<uint, 4>()
- && test1ShuffleX<uint8_t>()
- && testVShuffleX<uint8_t, 2>()
- && testVShuffleX<uint8_t, 3>()
- && testVShuffleX<uint8_t, 4>()
- && test1ShuffleX<uint16_t>()
- && testVShuffleX<uint16_t, 2>()
- && testVShuffleX<uint16_t, 3>()
- && testVShuffleX<uint16_t, 4>()
- && test1ShuffleX<uint64_t>()
- && testVShuffleX<uint64_t, 2>()
- && testVShuffleX<uint64_t, 3>()
- && testVShuffleX<uint64_t, 4>()
- && test1ShuffleX<bool>()
- && testVShuffleX<bool, 2>()
- && testVShuffleX<bool, 3>()
- && testVShuffleX<bool, 4>()
+ & test1ShuffleX<float>()
+ & testVShuffleX<float, 2>()
+ & testVShuffleX<float, 3>()
+ & testVShuffleX<float, 4>()
+ & test1ShuffleX<double>() // WARNING: intel GPU's lack FP64 support
+ & testVShuffleX<double, 2>()
+ & testVShuffleX<double, 3>()
+ & testVShuffleX<double, 4>()
+ & test1ShuffleX<half>()
+ & testVShuffleX<half, 2>()
+ & testVShuffleX<half, 3>()
+ & testVShuffleX<half, 4>()
+ & test1ShuffleX<int>()
+ & testVShuffleX<int, 2>()
+ & testVShuffleX<int, 3>()
+ & testVShuffleX<int, 4>()
+ & test1ShuffleX<int8_t>()
+ & testVShuffleX<int8_t, 2>()
+ & testVShuffleX<int8_t, 3>()
+ & testVShuffleX<int8_t, 4>()
+ & test1ShuffleX<int16_t>()
+ & testVShuffleX<int16_t, 2>()
+ & testVShuffleX<int16_t, 3>()
+ & testVShuffleX<int16_t, 4>()
+ & test1ShuffleX<int64_t>()
+ & testVShuffleX<int64_t, 2>()
+ & testVShuffleX<int64_t, 3>()
+ & testVShuffleX<int64_t, 4>()
+ & test1ShuffleX<uint>()
+ & testVShuffleX<uint, 2>()
+ & testVShuffleX<uint, 3>()
+ & testVShuffleX<uint, 4>()
+ & test1ShuffleX<uint8_t>()
+ & testVShuffleX<uint8_t, 2>()
+ & testVShuffleX<uint8_t, 3>()
+ & testVShuffleX<uint8_t, 4>()
+ & test1ShuffleX<uint16_t>()
+ & testVShuffleX<uint16_t, 2>()
+ & testVShuffleX<uint16_t, 3>()
+ & testVShuffleX<uint16_t, 4>()
+ & test1ShuffleX<uint64_t>()
+ & testVShuffleX<uint64_t, 2>()
+ & testVShuffleX<uint64_t, 3>()
+ & testVShuffleX<uint64_t, 4>()
+ & test1ShuffleX<bool>()
+ & testVShuffleX<bool, 2>()
+ & testVShuffleX<bool, 3>()
+ & testVShuffleX<bool, 4>()
;
}
void computeMain()
{
outputBuffer.data[0] = true
- && testShuffleX()
+ & testShuffleX()
;
// CHECK_GLSL: void main(
diff --git a/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-shuffle.slang b/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-shuffle.slang
index 5dca1a588..ff3baf267 100644
--- a/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-shuffle.slang
+++ b/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-shuffle.slang
@@ -31,9 +31,9 @@ layout(local_size_x = 32) in;
__generic<T : __BuiltinLogicalType>
bool test1ShuffleX() {
return true
- && subgroupShuffle(T(1), 1) == T(1)
+ & subgroupShuffle(T(1), 1) == T(1)
#ifdef TEST_when_subgroupShuffleXor_is_implemented
- && subgroupShuffleXor(T(1), 1) == T(1)
+ & subgroupShuffleXor(T(1), 1) == T(1)
#endif // #ifdef TEST_when_subgroupShuffleXor_is_implemented
;
}
@@ -42,9 +42,9 @@ bool testVShuffleX() {
typealias gvec = vector<T, N>;
return true
- && subgroupShuffle(gvec(T(1)), 1) == gvec(T(1))
+ & subgroupShuffle(gvec(T(1)), 1) == gvec(T(1))
#ifdef TEST_when_subgroupShuffleXor_is_implemented
- && subgroupShuffleXor(gvec(T(1)), 1) == gvec(T(1))
+ & subgroupShuffleXor(gvec(T(1)), 1) == gvec(T(1))
#endif // #ifdef TEST_when_subgroupShuffleXor_is_implemented
;
}
@@ -52,10 +52,10 @@ bool testVShuffleX() {
__generic<T : __BuiltinFloatingPointType>
bool test1ShuffleX() {
return true
- && subgroupShuffle(T(1), 1) == T(1)
-#if !defined(TARGET_CUDA) && !defined(TARGET_HLSL)
- && subgroupShuffleXor(T(1), 1) == T(1)
-#endif // #if !defined(TARGET_CUDA) && !defined(TARGET_HLSL)
+ & subgroupShuffle(T(1), 1) == T(1)
+#if !defined(TARGET_CUDA) & !defined(TARGET_HLSL)
+ & subgroupShuffleXor(T(1), 1) == T(1)
+#endif // #if !defined(TARGET_CUDA) & !defined(TARGET_HLSL)
;
}
__generic<T : __BuiltinFloatingPointType, let N : int>
@@ -63,62 +63,62 @@ bool testVShuffleX() {
typealias gvec = vector<T, N>;
return true
- && subgroupShuffle(gvec(T(1)), 1) == gvec(T(1))
-#if !defined(TARGET_CUDA) && !defined(TARGET_HLSL)
- && subgroupShuffleXor(gvec(T(1)), 1) == gvec(T(1))
-#endif // #if !defined(TARGET_CUDA) && !defined(TARGET_HLSL)
+ & subgroupShuffle(gvec(T(1)), 1) == gvec(T(1))
+#if !defined(TARGET_CUDA) & !defined(TARGET_HLSL)
+ & subgroupShuffleXor(gvec(T(1)), 1) == gvec(T(1))
+#endif // #if !defined(TARGET_CUDA) & !defined(TARGET_HLSL)
;
}
bool testShuffleX() {
return true
- && test1ShuffleX<float>()
- && testVShuffleX<float, 2>()
- && testVShuffleX<float, 3>()
- && testVShuffleX<float, 4>()
- && test1ShuffleX<double>() // WARNING: intel GPU's lack FP64 support
- && testVShuffleX<double, 2>()
- && testVShuffleX<double, 3>()
- && testVShuffleX<double, 4>()
- && test1ShuffleX<half>()
- && testVShuffleX<half, 2>()
- && testVShuffleX<half, 3>()
- && testVShuffleX<half, 4>()
- && test1ShuffleX<int>()
- && testVShuffleX<int, 2>()
- && testVShuffleX<int, 3>()
- && testVShuffleX<int, 4>()
- && test1ShuffleX<int8_t>()
- && testVShuffleX<int8_t, 2>()
- && testVShuffleX<int8_t, 3>()
- && testVShuffleX<int8_t, 4>()
- && test1ShuffleX<int16_t>()
- && testVShuffleX<int16_t, 2>()
- && testVShuffleX<int16_t, 3>()
- && testVShuffleX<int16_t, 4>()
- && test1ShuffleX<int64_t>()
- && testVShuffleX<int64_t, 2>()
- && testVShuffleX<int64_t, 3>()
- && testVShuffleX<int64_t, 4>()
- && test1ShuffleX<uint>()
- && testVShuffleX<uint, 2>()
- && testVShuffleX<uint, 3>()
- && testVShuffleX<uint, 4>()
- && test1ShuffleX<uint8_t>()
- && testVShuffleX<uint8_t, 2>()
- && testVShuffleX<uint8_t, 3>()
- && testVShuffleX<uint8_t, 4>()
- && test1ShuffleX<uint16_t>()
- && testVShuffleX<uint16_t, 2>()
- && testVShuffleX<uint16_t, 3>()
- && testVShuffleX<uint16_t, 4>()
- && test1ShuffleX<uint64_t>()
- && testVShuffleX<uint64_t, 2>()
- && testVShuffleX<uint64_t, 3>()
- && testVShuffleX<uint64_t, 4>()
- && test1ShuffleX<bool>()
- && testVShuffleX<bool, 2>()
- && testVShuffleX<bool, 3>()
- && testVShuffleX<bool, 4>()
+ & test1ShuffleX<float>()
+ & testVShuffleX<float, 2>()
+ & testVShuffleX<float, 3>()
+ & testVShuffleX<float, 4>()
+ & test1ShuffleX<double>() // WARNING: intel GPU's lack FP64 support
+ & testVShuffleX<double, 2>()
+ & testVShuffleX<double, 3>()
+ & testVShuffleX<double, 4>()
+ & test1ShuffleX<half>()
+ & testVShuffleX<half, 2>()
+ & testVShuffleX<half, 3>()
+ & testVShuffleX<half, 4>()
+ & test1ShuffleX<int>()
+ & testVShuffleX<int, 2>()
+ & testVShuffleX<int, 3>()
+ & testVShuffleX<int, 4>()
+ & test1ShuffleX<int8_t>()
+ & testVShuffleX<int8_t, 2>()
+ & testVShuffleX<int8_t, 3>()
+ & testVShuffleX<int8_t, 4>()
+ & test1ShuffleX<int16_t>()
+ & testVShuffleX<int16_t, 2>()
+ & testVShuffleX<int16_t, 3>()
+ & testVShuffleX<int16_t, 4>()
+ & test1ShuffleX<int64_t>()
+ & testVShuffleX<int64_t, 2>()
+ & testVShuffleX<int64_t, 3>()
+ & testVShuffleX<int64_t, 4>()
+ & test1ShuffleX<uint>()
+ & testVShuffleX<uint, 2>()
+ & testVShuffleX<uint, 3>()
+ & testVShuffleX<uint, 4>()
+ & test1ShuffleX<uint8_t>()
+ & testVShuffleX<uint8_t, 2>()
+ & testVShuffleX<uint8_t, 3>()
+ & testVShuffleX<uint8_t, 4>()
+ & test1ShuffleX<uint16_t>()
+ & testVShuffleX<uint16_t, 2>()
+ & testVShuffleX<uint16_t, 3>()
+ & testVShuffleX<uint16_t, 4>()
+ & test1ShuffleX<uint64_t>()
+ & testVShuffleX<uint64_t, 2>()
+ & testVShuffleX<uint64_t, 3>()
+ & testVShuffleX<uint64_t, 4>()
+ & test1ShuffleX<bool>()
+ & testVShuffleX<bool, 2>()
+ & testVShuffleX<bool, 3>()
+ & testVShuffleX<bool, 4>()
;
}
@@ -127,7 +127,7 @@ void computeMain()
{
outputBuffer.data[0] = true
- && testShuffleX()
+ & testShuffleX()
;
// CHECK_GLSL: void main(
diff --git a/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-vote.slang b/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-vote.slang
index bcd4aeb56..3c700d6d8 100644
--- a/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-vote.slang
+++ b/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-vote.slang
@@ -28,8 +28,8 @@ layout(local_size_x = 32) in;
__generic<T : __BuiltinLogicalType>
bool test1AllEqual() {
return true
- && subgroupAllEqual(T(1)) == true
- && subgroupAllEqual(T(gl_GlobalInvocationID.x)) == false
+ & subgroupAllEqual(T(1)) == true
+ & subgroupAllEqual(T(gl_GlobalInvocationID.x)) == false
;
}
__generic<T : __BuiltinLogicalType, let N : int>
@@ -37,16 +37,16 @@ bool testVAllEqual() {
typealias gvec = vector<T, N>;
return true
- && subgroupAllEqual(gvec(T(1))) == true
- && subgroupAllEqual(gvec(T(gl_GlobalInvocationID.x))) == false
+ & subgroupAllEqual(gvec(T(1))) == true
+ & subgroupAllEqual(gvec(T(gl_GlobalInvocationID.x))) == false
;
}
__generic<T : __BuiltinFloatingPointType>
bool test1AllEqual() {
return true
- && subgroupAllEqual(T(1)) == true
- && subgroupAllEqual(T(gl_GlobalInvocationID.x)) == false
+ & subgroupAllEqual(T(1)) == true
+ & subgroupAllEqual(T(gl_GlobalInvocationID.x)) == false
;
}
__generic<T : __BuiltinFloatingPointType, let N : int>
@@ -54,60 +54,60 @@ bool testVAllEqual() {
typealias gvec = vector<T, N>;
return true
- && subgroupAllEqual(gvec(T(1))) == true
- && subgroupAllEqual(gvec(T(gl_GlobalInvocationID.x))) == false
+ & subgroupAllEqual(gvec(T(1))) == true
+ & subgroupAllEqual(gvec(T(gl_GlobalInvocationID.x))) == false
;
}
bool testAllEqual() {
return true
- && test1AllEqual<float>()
- && testVAllEqual<float, 2>()
- && testVAllEqual<float, 3>()
- && testVAllEqual<float, 4>()
- && test1AllEqual<double>() // WARNING: intel GPU's lack FP64 support
- && testVAllEqual<double, 2>()
- && testVAllEqual<double, 3>()
- && testVAllEqual<double, 4>()
- && test1AllEqual<half>()
- && testVAllEqual<half, 2>()
- && testVAllEqual<half, 3>()
- && testVAllEqual<half, 4>()
- && test1AllEqual<int>()
- && testVAllEqual<int, 2>()
- && testVAllEqual<int, 3>()
- && testVAllEqual<int, 4>()
- && test1AllEqual<int8_t>()
- && testVAllEqual<int8_t, 2>()
- && testVAllEqual<int8_t, 3>()
- && testVAllEqual<int8_t, 4>()
- && test1AllEqual<int16_t>()
- && testVAllEqual<int16_t, 2>()
- && testVAllEqual<int16_t, 3>()
- && testVAllEqual<int16_t, 4>()
- && test1AllEqual<int64_t>()
- && testVAllEqual<int64_t, 2>()
- && testVAllEqual<int64_t, 3>()
- && testVAllEqual<int64_t, 4>()
- && test1AllEqual<uint>()
- && testVAllEqual<uint, 2>()
- && testVAllEqual<uint, 3>()
- && testVAllEqual<uint, 4>()
- && test1AllEqual<uint8_t>()
- && testVAllEqual<uint8_t, 2>()
- && testVAllEqual<uint8_t, 3>()
- && testVAllEqual<uint8_t, 4>()
- && test1AllEqual<uint16_t>()
- && testVAllEqual<uint16_t, 2>()
- && testVAllEqual<uint16_t, 3>()
- && testVAllEqual<uint16_t, 4>()
- && test1AllEqual<uint64_t>()
- && testVAllEqual<uint64_t, 2>()
- && testVAllEqual<uint64_t, 3>()
- && testVAllEqual<uint64_t, 4>()
- && test1AllEqual<bool>()
- && testVAllEqual<bool, 2>()
- && testVAllEqual<bool, 3>()
- && testVAllEqual<bool, 4>()
+ & test1AllEqual<float>()
+ & testVAllEqual<float, 2>()
+ & testVAllEqual<float, 3>()
+ & testVAllEqual<float, 4>()
+ & test1AllEqual<double>() // WARNING: intel GPU's lack FP64 support
+ & testVAllEqual<double, 2>()
+ & testVAllEqual<double, 3>()
+ & testVAllEqual<double, 4>()
+ & test1AllEqual<half>()
+ & testVAllEqual<half, 2>()
+ & testVAllEqual<half, 3>()
+ & testVAllEqual<half, 4>()
+ & test1AllEqual<int>()
+ & testVAllEqual<int, 2>()
+ & testVAllEqual<int, 3>()
+ & testVAllEqual<int, 4>()
+ & test1AllEqual<int8_t>()
+ & testVAllEqual<int8_t, 2>()
+ & testVAllEqual<int8_t, 3>()
+ & testVAllEqual<int8_t, 4>()
+ & test1AllEqual<int16_t>()
+ & testVAllEqual<int16_t, 2>()
+ & testVAllEqual<int16_t, 3>()
+ & testVAllEqual<int16_t, 4>()
+ & test1AllEqual<int64_t>()
+ & testVAllEqual<int64_t, 2>()
+ & testVAllEqual<int64_t, 3>()
+ & testVAllEqual<int64_t, 4>()
+ & test1AllEqual<uint>()
+ & testVAllEqual<uint, 2>()
+ & testVAllEqual<uint, 3>()
+ & testVAllEqual<uint, 4>()
+ & test1AllEqual<uint8_t>()
+ & testVAllEqual<uint8_t, 2>()
+ & testVAllEqual<uint8_t, 3>()
+ & testVAllEqual<uint8_t, 4>()
+ & test1AllEqual<uint16_t>()
+ & testVAllEqual<uint16_t, 2>()
+ & testVAllEqual<uint16_t, 3>()
+ & testVAllEqual<uint16_t, 4>()
+ & test1AllEqual<uint64_t>()
+ & testVAllEqual<uint64_t, 2>()
+ & testVAllEqual<uint64_t, 3>()
+ & testVAllEqual<uint64_t, 4>()
+ & test1AllEqual<bool>()
+ & testVAllEqual<bool, 2>()
+ & testVAllEqual<bool, 3>()
+ & testVAllEqual<bool, 4>()
;
}