blob: 3c32c676eff0416f306bacaf691246347799ef30 [file]
// Copyright 2022 The IREE Authors
//
// Licensed under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
#ifndef IREE_COMPILER_UTILS_STRINGUTILS_H_
#define IREE_COMPILER_UTILS_STRINGUTILS_H_
#include <string>
#include "mlir/Support/LLVM.h"
namespace mlir::iree_compiler {
// Replaces all occurrences of `match` in `str` with `substitute`.
// Operates in place.
void replaceAllSubstrsInPlace(std::string &str, const std::string &match,
const std::string &substitute);
// Replaces all occurrences of `match` in `str` with `substitute`.
// Does not mutate its arguments, returns the new string.
std::string replaceAllSubstrs(const std::string &str, const std::string &match,
const std::string &substitute);
// Sanitizes a symbol name for compatibility with common targets (C, file
// systems, debug databases, etc).
//
// MLIR identifiers must match this regex:
// (letter|[_]) (letter|digit|[_$.])*
// https://mlir.llvm.org/docs/LangRef/#identifiers-and-keywords
// This is a superset of the names other targets support and as inputs are only
// expected to match the above any place exporting symbol names must use this.
//
// Examples:
// `abc` -> `abc`
// `a.b` -> `a_b`
// `a$-æb` -> `a___b`
std::string sanitizeSymbolName(StringRef name);
// Sanitizes a file name for compatibility with common file systems.
//
// Examples:
// `abc` -> `abc`
// `a.b` -> `a.b`
// `a$-æb` -> `a_-_b`
std::string sanitizeFileName(StringRef name);
} // namespace mlir::iree_compiler
#endif // IREE_COMPILER_UTILS_STRINGUTILS_H_