def SPV_IOrUIVec4 : SPV_Vec4<SPV_SignlessOrUnsignedInt>;
def SPV_Int32Vec4 : SPV_Vec4<AnyI32>;
-// TODO(antiagainst): Use a more appropriate way to model optional operands
-class SPV_Optional<Type type> : Variadic<type>;
-
// TODO(ravishankarm): From 1.4, this should also include Composite type.
def SPV_SelectType : AnyTypeOf<[SPV_Scalar, SPV_Vector, SPV_AnyPtr]>;
);
let results = (outs
- SPV_Optional<SPV_Type>:$result
+ Optional<SPV_Type>:$result
);
let autogenSerialization = 0;
SPV_ScopeAttr:$execution_scope,
SPV_GroupOperationAttr:$group_operation,
SPV_ScalarOrVectorOf<type>:$value,
- SPV_Optional<SPV_Integer>:$cluster_size
+ Optional<SPV_Integer>:$cluster_size
);
let results = (outs
let arguments = (ins
SPV_StorageClassAttr:$storage_class,
- SPV_Optional<AnyType>:$initializer
+ Optional<AnyType>:$initializer
);
let results = (outs
groupOperation = rewriter.create<spirv::spvOp>( \
loc, originalInputType.getElementType(), spirv::Scope::Subgroup, \
spirv::GroupOperation::Reduce, inputElement, \
- /*cluster_size=*/ArrayRef<Value>()); \
+ /*cluster_size=*/nullptr); \
} break
switch (*binaryOpKind) {
CREATE_GROUP_NON_UNIFORM_BIN_OP(IAdd, GroupNonUniformIAddOp);
<< operands[0];
}
+ // Use null type to mean no result type.
+ if (isVoidType(resultType))
+ resultType = nullptr;
+
auto resultID = operands[1];
auto functionID = operands[2];
arguments.push_back(value);
}
- SmallVector<Type, 1> resultTypes;
- if (!isVoidType(resultType)) {
- resultTypes.push_back(resultType);
- }
-
auto opFunctionCall = opBuilder.create<spirv::FunctionCallOp>(
- unknownLoc, resultTypes, opBuilder.getSymbolRefAttr(functionName),
+ unknownLoc, resultType, opBuilder.getSymbolRefAttr(functionName),
arguments);
- if (!resultTypes.empty()) {
+ if (resultType)
valueMap[resultID] = opFunctionCall.getResult(0);
- }
return success();
}
spv.module Logical GLSL450 {
spv.func @f_invalid_result_type(%arg0 : i32, %arg1 : i32) -> () "None" {
- // expected-error @+1 {{expected callee function to have 0 or 1 result, but provided 2}}
+ // expected-error @+1 {{result group starting at #0 requires 0 or 1 element, but found 2}}
%0:2 = spv.FunctionCall @f_invalid_result_type(%arg0, %arg1) : (i32, i32) -> (i32, i32)
spv.Return
}
if quantifier == '':
arg_type = 'SPV_Type'
elif quantifier == '?':
- arg_type = 'SPV_Optional<SPV_Type>'
+ arg_type = 'Optional<SPV_Type>'
else:
arg_type = 'Variadic<SPV_Type>'
elif kind == 'IdMemorySemantics' or kind == 'IdScope':