MLIR
20.0.0git
include
mlir
Dialect
SPIRV
Linking
ModuleCombiner.h
Go to the documentation of this file.
1
//===- ModuleCombiner.h - MLIR SPIR-V Module Combiner -----------*- C++ -*-===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
//
9
// This file declares the entry point to the SPIR-V module combiner library.
10
//
11
//===----------------------------------------------------------------------===//
12
13
#ifndef MLIR_DIALECT_SPIRV_LINKING_MODULECOMBINER_H_
14
#define MLIR_DIALECT_SPIRV_LINKING_MODULECOMBINER_H_
15
16
#include "
mlir/IR/OwningOpRef.h
"
17
#include "
mlir/Support/LLVM.h
"
18
19
namespace
mlir
{
20
class
OpBuilder;
21
22
namespace
spirv {
23
class
ModuleOp;
24
25
/// The listener function to receive symbol renaming events.
26
///
27
/// `originalModule` is the input spirv::ModuleOp that contains the renamed
28
/// symbol. `oldSymbol` and `newSymbol` are the original and renamed symbol.
29
/// Note that it's the responsibility of the caller to properly retain the
30
/// storage underlying the passed StringRefs if the listener callback outlives
31
/// this function call.
32
using
SymbolRenameListener
=
function_ref
<void(
33
spirv::ModuleOp originalModule, StringRef oldSymbol, StringRef newSymbol)>;
34
35
/// Combines a list of SPIR-V `inputModules` into one. Returns the combined
36
/// module on success; returns a null module otherwise.
37
//
38
/// \param inputModules the list of modules to combine. They won't be modified.
39
/// \param combinedMdouleBuilder an OpBuilder for building the combined module.
40
/// \param symbRenameListener a listener that gets called everytime a symbol in
41
/// one of the input modules is renamed.
42
///
43
/// To combine multiple SPIR-V modules, we move all the module-level ops
44
/// from all the input modules into one big combined module. To that end, the
45
/// combination process proceeds in 2 phases:
46
///
47
/// 1. resolve conflicts between pairs of ops from different modules,
48
/// 2. deduplicate equivalent ops/sub-ops in the merged module.
49
///
50
/// For the conflict resolution phase, the following rules are employed to
51
/// resolve such conflicts:
52
///
53
/// - If 2 spirv.func's have the same symbol name, then rename one of the
54
/// functions.
55
/// - If an spirv.func and another op have the same symbol name, then rename the
56
/// other symbol.
57
/// - If none of the 2 conflicting ops are spirv.func, then rename either.
58
///
59
/// For deduplication, the following 3 cases are taken into consideration:
60
///
61
/// - If 2 spirv.GlobalVariable's have either the same descriptor set + binding
62
/// or the same build_in attribute value, then replace one of them using the
63
/// other.
64
/// - If 2 spirv.SpecConstant's have the same spec_id attribute value, then
65
/// replace one of them using the other.
66
/// - Deduplicating functions are not supported right now.
67
///
68
/// In all cases, the references to the updated symbol (whether renamed or
69
/// deduplicated) are also updated to reflect the change.
70
OwningOpRef<spirv::ModuleOp>
combine
(
ArrayRef<spirv::ModuleOp>
inputModules,
71
OpBuilder
&combinedModuleBuilder,
72
SymbolRenameListener
symRenameListener);
73
}
// namespace spirv
74
}
// namespace mlir
75
76
#endif
// MLIR_DIALECT_SPIRV_LINKING_MODULECOMBINER_H_
OwningOpRef.h
llvm::ArrayRef
Definition:
LLVM.h:48
llvm::function_ref
Definition:
LLVM.h:90
mlir::OpBuilder
This class helps build Operations.
Definition:
Builders.h:215
mlir::OwningOpRef< spirv::ModuleOp >
LLVM.h
mlir::spirv::combine
OwningOpRef< spirv::ModuleOp > combine(ArrayRef< spirv::ModuleOp > inputModules, OpBuilder &combinedModuleBuilder, SymbolRenameListener symRenameListener)
Combines a list of SPIR-V inputModules into one.
Definition:
ModuleCombiner.cpp:90
mlir
Include the generated interface declarations.
Definition:
LocalAliasAnalysis.h:20
Generated on Tue Nov 19 2024 04:32:19 for MLIR by
1.9.1