MCPcopy Create free account
hub / github.com/NVIDIA/cuda-tile / parseAssumePredicate

Function parseAssumePredicate

lib/Dialect/CudaTile/IR/CudaTile.cpp:938–991  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

936//===----------------------------------------------------------------------===//
937
938static ParseResult parseAssumePredicate(OpAsmParser &parser,
939 AssumePredicateAttrInterface &attr) {
940 SMLoc loc = parser.getCurrentLocation();
941
942 // Try parsing full attribute syntax first (#cuda_tile.div_by<...>)
943 Attribute parsedAttr;
944 auto parseResult = parser.parseOptionalAttribute(parsedAttr);
945 if (parseResult.has_value()) {
946 if (succeeded(*parseResult)) {
947 if (auto assumeAttr =
948 dyn_cast<AssumePredicateAttrInterface>(parsedAttr)) {
949 attr = assumeAttr;
950 return success();
951 }
952 return parser.emitError(loc) << "expected assume predicate attribute";
953 }
954 return *parseResult;
955 }
956
957 // Try parsing shortened syntax (div_by<...> or same_elements<...>)
958 StringRef attrName;
959 if (failed(parser.parseKeyword(&attrName)))
960 return parser.emitError(loc) << "expected attribute name";
961
962 if (attrName == "div_by") {
963 // Reuse existing DivByAttr::parse method
964 if (auto parsedAttr = DivByAttr::parse(parser, Type{})) {
965 attr = static_cast<AssumePredicateAttrInterface>(parsedAttr);
966 return success();
967 }
968 return failure();
969
970 } else if (attrName == "same_elements") {
971 // Reuse existing SameElementsAttr::parse method
972 if (auto parsedAttr = SameElementsAttr::parse(parser, Type{})) {
973 attr = static_cast<AssumePredicateAttrInterface>(parsedAttr);
974 return success();
975 }
976 return failure();
977
978 } else if (attrName == "bounded") {
979 // Parse bounded predicate (no parameters needed)
980 if (auto parsedAttr = BoundedAttr::parse(parser, Type{})) {
981 attr = static_cast<AssumePredicateAttrInterface>(parsedAttr);
982 return success();
983 }
984 return failure();
985
986 } else {
987 return parser.emitError(loc)
988 << "unknown assume predicate attribute: " << attrName
989 << " (expected 'div_by', 'same_elements', or 'bounded')";
990 }
991}
992
993static void printAssumePredicate(OpAsmPrinter &p, Operation *op,
994 AssumePredicateAttrInterface attr) {

Callers

nothing calls this directly

Calls 1

emitErrorMethod · 0.80

Tested by

no test coverage detected