[llvm] [offload][SYCL] Add Module splitting by categories. (PR #131347)

Johannes Doerfert via llvm-commits llvm-commits at lists.llvm.org
Wed Jul 2 11:26:47 PDT 2025


================
@@ -0,0 +1,44 @@
+//===-------- SplitModuleByCategory.h - module split ------------*- C++ -*-===//
+//
+// Part of the LLVM Project, 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
+//
+//===----------------------------------------------------------------------===//
+// Functionality to split a module by categories.
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_TRANSFORM_UTILS_SPLIT_MODULE_BY_CATEGORY_H
+#define LLVM_TRANSFORM_UTILS_SPLIT_MODULE_BY_CATEGORY_H
+
+#include "llvm/ADT/STLFunctionalExtras.h"
+
+#include <memory>
+#include <optional>
+#include <string>
+
+namespace llvm {
+
+class Module;
+class Function;
+
+/// Splits the given module \p M using the given \p FunctionCategorizer.
+/// \p FunctionCategorizer returns integer category for an input Function.
+/// It may return std::nullopt if a function doesn't have a category.
+/// Module's functions are being grouped by categories. Every such group
+/// populates a call graph containing group's functions themselves and all
+/// reachable functions and globals. Split outputs are populated from each call
+/// graph associated with some category.
----------------
jdoerfert wrote:

nullopt is fine, but include the meaning in the comment. So, something like:
```
All distinct numbers returned by FC are used to define the entry points into a separate module.
The transitive closure of dependences from these entry points will be included in the module.
Functions that are not entry points shall return `std::nullopt` and thereby only be included in modules in which they are (transitively) required.
```

https://github.com/llvm/llvm-project/pull/131347


More information about the llvm-commits mailing list