return llvm::to_vector<4>(concatRanges);
}
-static void appendMangledType(llvm::raw_string_ostream &ss, Type t) {
+static LogicalResult appendMangledType(llvm::raw_string_ostream &ss, Type t) {
if (auto memref = t.dyn_cast<MemRefType>()) {
ss << "view";
for (auto size : memref.getShape())
else
ss << size << "x";
appendMangledType(ss, memref.getElementType());
- } else if (auto vec = t.dyn_cast<VectorType>()) {
+ return success();
+ }
+ if (auto vec = t.dyn_cast<VectorType>()) {
ss << "vector";
llvm::interleave(
vec.getShape(), [&](int64_t i) { ss << i; }, [&]() { ss << "x"; });
appendMangledType(ss, vec.getElementType());
+ return success();
} else if (t.isSignlessIntOrIndexOrFloat()) {
ss << t;
- } else {
- llvm_unreachable("Invalid type for linalg library name mangling");
+ return success();
}
+ return failure();
}
std::string mlir::linalg::generateLibraryCallName(Operation *op) {
std::replace(name.begin(), name.end(), '.', '_');
llvm::raw_string_ostream ss(name);
ss << "_";
- auto types = op->getOperandTypes();
- llvm::interleave(
- types.begin(), types.end(), [&](Type t) { appendMangledType(ss, t); },
- [&]() { ss << "_"; });
- return ss.str();
+ for (Type t : op->getOperandTypes()) {
+ if (failed(appendMangledType(ss, t)))
+ return std::string();
+ ss << "_";
+ }
+ std::string res = ss.str();
+ res.pop_back();
+ return res;
}
//===----------------------------------------------------------------------===//