[llvm-branch-commits] [mlir] [MLIR][OpenMP] Automate operand structure definition (PR #99508)
Sergio Afonso via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Thu Jul 25 04:33:12 PDT 2024
================
@@ -12,11 +12,52 @@
#include "mlir/TableGen/GenInfo.h"
+#include "mlir/TableGen/CodeGenHelpers.h"
+#include "llvm/ADT/StringExtras.h"
+#include "llvm/ADT/TypeSwitch.h"
#include "llvm/TableGen/Error.h"
#include "llvm/TableGen/Record.h"
using namespace llvm;
+/// The code block defining the base mixin class for combining clause operand
+/// structures.
+static const char *const baseMixinClass = R"(
+namespace detail {
+template <typename... Mixins>
+struct Clauses : public Mixins... {};
+} // namespace detail
+)";
+
+/// The code block defining operation argument structures.
+static const char *const operationArgStruct = R"(
+using {0}Operands = detail::Clauses<{1}>;
+)";
+
+/// Remove multiple optional prefixes and suffixes from \c str.
+///
+/// Prefixes and suffixes are attempted to be removed once in the order they
+/// appear in the \c prefixes and \c suffixes arguments. All prefixes are
+/// processed before suffixes are. This means it will behave as shown in the
+/// following example:
+/// - str: "PrePreNameSuf1Suf2"
+/// - prefixes: ["Pre"]
+/// - suffixes: ["Suf1", "Suf2"]
+/// - return: "PreNameSuf1"
+static StringRef stripPrefixAndSuffix(StringRef str,
+ llvm::ArrayRef<StringRef> prefixes,
+ llvm::ArrayRef<StringRef> suffixes) {
+ for (StringRef prefix : prefixes)
+ if (str.starts_with(prefix))
+ str = str.substr(prefix.size());
+
+ for (StringRef suffix : suffixes)
+ if (str.ends_with(suffix))
+ str = str.substr(0, str.size() - suffix.size());
----------------
skatrak wrote:
Done.
https://github.com/llvm/llvm-project/pull/99508
More information about the llvm-branch-commits
mailing list