brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.0 KiB · 726fb7c Raw
59 lines · cpp
1//===- SPIRVParsingUtilities.cpp - MLIR SPIR-V Dialect Parsing Utils-------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8//9// Implements common SPIR-V dialect parsing functions.10//11//===----------------------------------------------------------------------===//12 13#include "SPIRVParsingUtils.h"14 15#include "llvm/ADT/StringExtras.h"16 17using namespace mlir::spirv::AttrNames;18 19namespace mlir::spirv {20 21ParseResult parseVariableDecorations(OpAsmParser &parser,22                                     OperationState &state) {23  auto builtInName = llvm::convertToSnakeFromCamelCase(24      stringifyDecoration(spirv::Decoration::BuiltIn));25  if (succeeded(parser.parseOptionalKeyword("bind"))) {26    Attribute set, binding;27    // Parse optional descriptor binding28    auto descriptorSetName = llvm::convertToSnakeFromCamelCase(29        stringifyDecoration(spirv::Decoration::DescriptorSet));30    auto bindingName = llvm::convertToSnakeFromCamelCase(31        stringifyDecoration(spirv::Decoration::Binding));32    Type i32Type = parser.getBuilder().getIntegerType(32);33    if (parser.parseLParen() ||34        parser.parseAttribute(set, i32Type, descriptorSetName,35                              state.attributes) ||36        parser.parseComma() ||37        parser.parseAttribute(binding, i32Type, bindingName,38                              state.attributes) ||39        parser.parseRParen()) {40      return failure();41    }42  } else if (succeeded(parser.parseOptionalKeyword(builtInName))) {43    StringAttr builtIn;44    if (parser.parseLParen() ||45        parser.parseAttribute(builtIn, builtInName, state.attributes) ||46        parser.parseRParen()) {47      return failure();48    }49  }50 51  // Parse other attributes52  if (parser.parseOptionalAttrDict(state.attributes))53    return failure();54 55  return success();56}57 58} // namespace mlir::spirv59