MLIR 22.0.0git
DIExpressionRewriter.h
Go to the documentation of this file.
1//===- DIExpressionRewriter.h - Rewriter for DIExpression operators -------===//
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// A driver for running rewrite patterns on DIExpression operators.
10//
11//===----------------------------------------------------------------------===//
12
13#ifndef MLIR_DIALECT_LLVMIR_TRANSFORMS_DIEXPRESSIONREWRITER_H
14#define MLIR_DIALECT_LLVMIR_TRANSFORMS_DIEXPRESSIONREWRITER_H
15
17#include <deque>
18
19namespace mlir {
20namespace LLVM {
21
22/// Rewriter for DIExpressionAttr.
23///
24/// Users of this rewriter register their own rewrite patterns. Each pattern
25/// matches on a contiguous range of LLVM DIExpressionElemAttrs, and can be
26/// used to rewrite it into a new range of DIExpressionElemAttrs of any length.
28public:
29 using OperatorT = LLVM::DIExpressionElemAttr;
30
32 public:
34 using OpIterT = std::deque<OperatorT>::const_iterator;
36
37 virtual ~ExprRewritePattern() = default;
38 /// Checks whether a particular prefix of operators matches this pattern.
39 /// The provided argument is guaranteed non-empty.
40 /// Return the iterator after the last matched element.
41 virtual OpIterT match(OpIterRange) const = 0;
42 /// Replace the operators with a new list of operators.
43 /// The provided argument is guaranteed to be the same length as returned
44 /// by the `match` function.
46 };
47
48 /// Register a rewrite pattern with the rewriter.
49 /// Rewrite patterns are attempted in the order of registration.
50 void addPattern(std::unique_ptr<ExprRewritePattern> pattern);
51
52 /// Simplify a DIExpression according to all the patterns registered.
53 /// An optional `maxNumRewrites` can be passed to limit the number of rewrites
54 /// that gets applied.
55 LLVM::DIExpressionAttr
56 simplify(LLVM::DIExpressionAttr expr,
57 std::optional<uint64_t> maxNumRewrites = {}) const;
58
59private:
60 /// The registered patterns.
62};
63
64} // namespace LLVM
65} // namespace mlir
66
67#endif // MLIR_DIALECT_LLVMIR_TRANSFORMS_DIEXPRESSIONREWRITER_H
virtual OpIterT match(OpIterRange) const =0
Checks whether a particular prefix of operators matches this pattern.
virtual SmallVector< OperatorT > replace(OpIterRange) const =0
Replace the operators with a new list of operators.
std::deque< OperatorT >::const_iterator OpIterT
Rewriter for DIExpressionAttr.
void addPattern(std::unique_ptr< ExprRewritePattern > pattern)
Register a rewrite pattern with the rewriter.
LLVM::DIExpressionElemAttr OperatorT
LLVM::DIExpressionAttr simplify(LLVM::DIExpressionAttr expr, std::optional< uint64_t > maxNumRewrites={}) const
Simplify a DIExpression according to all the patterns registered.
Include the generated interface declarations.
const FrozenRewritePatternSet & patterns