Coverage Report

Created: 2020-06-26 05:44

/home/arjun/llvm-project/mlir/include/mlir/IR/FunctionImplementation.h
Line
Count
Source (jump to first uncovered line)
1
//===- FunctionImplementation.h - Function-like Op utilities ----*- 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 provides utility functions for implementing function-like
10
// operations, in particular, parsing, printing and verification components
11
// common to function-like operations.
12
//
13
//===----------------------------------------------------------------------===//
14
15
#ifndef MLIR_IR_FUNCTIONIMPLEMENTATION_H_
16
#define MLIR_IR_FUNCTIONIMPLEMENTATION_H_
17
18
#include "mlir/IR/FunctionSupport.h"
19
#include "mlir/IR/OpImplementation.h"
20
21
namespace mlir {
22
23
namespace impl {
24
25
/// A named class for passing around the variadic flag.
26
class VariadicFlag {
27
public:
28
0
  explicit VariadicFlag(bool variadic) : variadic(variadic) {}
29
0
  bool isVariadic() const { return variadic; }
30
31
private:
32
  /// Underlying storage.
33
  bool variadic;
34
};
35
36
/// Adds argument and result attributes, provided as `argAttrs` and
37
/// `resultAttrs` arguments, to the list of operation attributes in `result`.
38
/// Internally, argument and result attributes are stored as dict attributes
39
/// with special names given by getResultAttrName, getArgumentAttrName.
40
void addArgAndResultAttrs(Builder &builder, OperationState &result,
41
                          ArrayRef<NamedAttrList> argAttrs,
42
                          ArrayRef<NamedAttrList> resultAttrs);
43
44
/// Callback type for `parseFunctionLikeOp`, the callback should produce the
45
/// type that will be associated with a function-like operation from lists of
46
/// function arguments and results, VariadicFlag indicates whether the function
47
/// should have variadic arguments; in case of error, it may populate the last
48
/// argument with a message.
49
using FuncTypeBuilder = function_ref<Type(
50
    Builder &, ArrayRef<Type>, ArrayRef<Type>, VariadicFlag, std::string &)>;
51
52
/// Parses a function signature using `parser`. The `allowVariadic` argument
53
/// indicates whether functions with variadic arguments are supported. The
54
/// trailing arguments are populated by this function with names, types and
55
/// attributes of the arguments and those of the results.
56
ParseResult
57
parseFunctionSignature(OpAsmParser &parser, bool allowVariadic,
58
                       SmallVectorImpl<OpAsmParser::OperandType> &argNames,
59
                       SmallVectorImpl<Type> &argTypes,
60
                       SmallVectorImpl<NamedAttrList> &argAttrs,
61
                       bool &isVariadic, SmallVectorImpl<Type> &resultTypes,
62
                       SmallVectorImpl<NamedAttrList> &resultAttrs);
63
64
/// Parser implementation for function-like operations.  Uses
65
/// `funcTypeBuilder` to construct the custom function type given lists of
66
/// input and output types.  If `allowVariadic` is set, the parser will accept
67
/// trailing ellipsis in the function signature and indicate to the builder
68
/// whether the function is variadic.  If the builder returns a null type,
69
/// `result` will not contain the `type` attribute.  The caller can then add a
70
/// type, report the error or delegate the reporting to the op's verifier.
71
ParseResult parseFunctionLikeOp(OpAsmParser &parser, OperationState &result,
72
                                bool allowVariadic,
73
                                FuncTypeBuilder funcTypeBuilder);
74
75
/// Printer implementation for function-like operations.  Accepts lists of
76
/// argument and result types to use while printing.
77
void printFunctionLikeOp(OpAsmPrinter &p, Operation *op,
78
                         ArrayRef<Type> argTypes, bool isVariadic,
79
                         ArrayRef<Type> resultTypes);
80
81
/// Prints the signature of the function-like operation `op`.  Assumes `op` has
82
/// the FunctionLike trait and passed the verification.
83
void printFunctionSignature(OpAsmPrinter &p, Operation *op,
84
                            ArrayRef<Type> argTypes, bool isVariadic,
85
                            ArrayRef<Type> resultTypes);
86
87
/// Prints the list of function prefixed with the "attributes" keyword. The
88
/// attributes with names listed in "elided" as well as those used by the
89
/// function-like operation internally are not printed. Nothing is printed
90
/// if all attributes are elided. Assumes `op` has the `FunctionLike` trait and
91
/// passed the verification.
92
void printFunctionAttributes(OpAsmPrinter &p, Operation *op, unsigned numInputs,
93
                             unsigned numResults,
94
                             ArrayRef<StringRef> elided = {});
95
96
} // namespace impl
97
98
} // namespace mlir
99
100
#endif // MLIR_IR_FUNCTIONIMPLEMENTATION_H_