| 464 | namespace { |
| 465 | struct ConstantManager { |
| 466 | LogicalResult addConstant(Attribute attr, uint64_t &index) { |
| 467 | auto it = constantsMap.find(attr); |
| 468 | if (it != constantsMap.end()) { |
| 469 | index = std::distance(constantsMap.begin(), it); |
| 470 | return success(); |
| 471 | } |
| 472 | SmallVector<char> data; |
| 473 | llvm::raw_svector_ostream dataStream(data); |
| 474 | EncodingWriter writer(dataStream); |
| 475 | if (failed(serializeAttribute(attr, writer))) |
| 476 | return emitError(UnknownLoc::get(attr.getContext()), |
| 477 | "failed to serialize attribute"); |
| 478 | index = constantsMap.size(); |
| 479 | constantsMap[attr] = std::move(data); |
| 480 | return success(); |
| 481 | } |
| 482 | |
| 483 | // Look up a constant by attribute without adding it |
| 484 | LogicalResult getConstantIndex(Attribute attr, uint64_t &index) const { |
no test coverage detected