1 | //===- CallInterfaces.h - Call Interfaces for MLIR --------------*- 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 contains the definitions of the call interfaces defined in |
10 | // `CallInterfaces.td`. |
11 | // |
12 | //===----------------------------------------------------------------------===// |
13 | |
14 | #ifndef MLIR_INTERFACES_CALLINTERFACES_H |
15 | #define MLIR_INTERFACES_CALLINTERFACES_H |
16 | |
17 | #include "mlir/IR/SymbolTable.h" |
18 | #include "llvm/ADT/PointerUnion.h" |
19 | |
20 | namespace mlir { |
21 | /// A callable is either a symbol, or an SSA value, that is referenced by a |
22 | /// call-like operation. This represents the destination of the call. |
23 | struct CallInterfaceCallable : public PointerUnion<SymbolRefAttr, Value> { |
24 | using PointerUnion<SymbolRefAttr, Value>::PointerUnion; |
25 | }; |
26 | } // namespace mlir |
27 | |
28 | /// Include the generated interface declarations. |
29 | #include "mlir/Interfaces/CallInterfaces.h.inc" |
30 | |
31 | namespace llvm { |
32 | |
33 | // Allow llvm::cast style functions. |
34 | template <typename To> |
35 | struct CastInfo<To, mlir::CallInterfaceCallable> |
36 | : public CastInfo<To, mlir::CallInterfaceCallable::PointerUnion> {}; |
37 | |
38 | template <typename To> |
39 | struct CastInfo<To, const mlir::CallInterfaceCallable> |
40 | : public CastInfo<To, const mlir::CallInterfaceCallable::PointerUnion> {}; |
41 | |
42 | } // namespace llvm |
43 | |
44 | #endif // MLIR_INTERFACES_CALLINTERFACES_H |
45 | |