Lines Matching defs:spirv
21 using namespace mlir::spirv::AttrNames;
23 namespace mlir::spirv {
30 StringRef attrName = spirv::attributeName<EnumClass>()) {
34 spirv::parseEnumKeywordAttr<EnumAttrClass>(control, parser, state) ||
47 // spirv.BranchOp
56 // spirv.BranchConditionalOp
111 result.addAttribute(spirv::BranchConditionalOp::getOperandSegmentSizeAttr(),
151 // spirv.FunctionCall
157 auto funcOp = dyn_cast_or_null<spirv::FuncOp>(
220 // spirv.mlir.loop
224 state.addAttribute("loop_control", builder.getAttr<spirv::LoopControlAttr>(
225 spirv::LoopControl::None));
230 if (parseControlAttribute<spirv::LoopControlAttr, spirv::LoopControl>(parser,
238 if (control != spirv::LoopControl::None)
239 printer << " control(" << spirv::stringifyLoopControl(control) << ")";
245 /// Returns true if the given `srcBlock` contains only one `spirv.Branch` to the
252 auto branchOp = dyn_cast<spirv::BranchOp>(srcBlock.back());
256 /// Returns true if the given `block` only contains one `spirv.mlir.merge` op.
259 isa<spirv::MergeOp>(block.front());
300 "'spirv.mlir.merge' op");
316 "entry block must only have one 'spirv.Branch' op to the second block");
376 // Add a spirv.mlir.merge op into the merge block.
377 builder.create<spirv::MergeOp>(getLoc());
381 // spirv.mlir.merge
386 if (!parentOp || !isa<spirv::SelectionOp, spirv::LoopOp>(parentOp))
388 "expected parent op to be 'spirv.mlir.selection' or 'spirv.mlir.loop'");
394 "'spirv.mlir.selection' or 'spirv.mlir.loop'");
399 // spirv.Return
403 // Verification is performed in spirv.func op.
408 // spirv.ReturnValue
412 // Verification is performed in spirv.func op.
417 // spirv.Select
435 // Custom availability implementation is needed for spirv.Select given the
437 SmallVector<ArrayRef<spirv::Extension>, 1> SelectOp::getExtensions() {
440 SmallVector<ArrayRef<spirv::Capability>, 1> SelectOp::getCapabilities() {
443 std::optional<spirv::Version> SelectOp::getMinVersion() {
446 if (isa<spirv::ScalarType>(getCondition().getType()) &&
447 isa<spirv::CompositeType>(getType()))
452 std::optional<spirv::Version> SelectOp::getMaxVersion() {
457 // spirv.mlir.selection
461 if (parseControlAttribute<spirv::SelectionControlAttr,
462 spirv::SelectionControl>(parser, result))
469 if (control != spirv::SelectionControl::None)
470 printer << " control(" << spirv::stringifySelectionControl(control) << ")";
509 "'spirv.mlir.merge' op");
534 // Add a spirv.mlir.merge op into the merge block.
535 builder.create<spirv::MergeOp>(getLoc());
543 builder.create<spirv::SelectionOp>(loc, spirv::SelectionControl::None);
554 builder.create<spirv::BranchOp>(loc, mergeBlock);
561 builder.create<spirv::BranchConditionalOp>(
571 // spirv.Unreachable
574 LogicalResult spirv::UnreachableOp::verify() {
589 } // namespace mlir::spirv