23#include <mlir/IR/Diagnostics.h>
24#include <mlir/Transforms/DialectConversion.h>
26#include <llvm/ADT/DenseMap.h>
27#include <llvm/ADT/SmallVector.h>
37 llvm::DenseMap<mlir::Attribute, mlir::Attribute> paramNameToValue;
38 mlir::Attribute convertIfPossible(mlir::Attribute attr)
const;
44 mlir::Attribute
convertAttr(mlir::Attribute attr)
const;
47 bool containsParam(mlir::Attribute name)
const {
return paramNameToValue.contains(name); }
50 const llvm::DenseMap<mlir::Attribute, mlir::Attribute> &
getParamMap()
const {
51 return paramNameToValue;
61 mlir::SymbolTableCollection &tables, mlir::ArrayAttr templateParams,
62 mlir::Operation *lookupFrom, mlir::ModuleOp destinationRoot, mlir::Operation *requestSite
68 mlir::Operation *site, llvm::SmallVector<mlir::Diagnostic> &&diagnostics
74 mlir::Operation *op,
const llvm::DenseMap<mlir::Attribute, mlir::Attribute> &bindings
80 TemplateOp templateOp, llvm::DenseMap<mlir::Attribute, mlir::Attribute> &bindings
84std::optional<mlir::Attribute>
92 const llvm::DenseMap<mlir::Attribute, mlir::Attribute> &bindings,
93 llvm::SmallVector<mlir::Diagnostic> &diagnostics
101 function::FuncDefOp clone,
const llvm::DenseMap<mlir::Attribute, mlir::Attribute> &bindings,
102 llvm::SmallVector<mlir::Diagnostic> &diagnostics
const llvm::DenseMap< mlir::Attribute, mlir::Attribute > & getParamMap() const
Return the bindings used by body substitution patterns.
bool containsParam(mlir::Attribute name) const
Return whether the parameter has a supplied binding.
mlir::Attribute convertAttr(mlir::Attribute attr) const
Substitute a bound attribute or the type contained in a TypeAttr.
TemplateTypeConverter(llvm::DenseMap< mlir::Attribute, mlir::Attribute > bindings)
Common interface for constant parameter-like symbol operations that can be defined within a TemplateO...
FailureOr< ArrayAttr > rebaseTemplateParams(SymbolTableCollection &tables, ArrayAttr templateParams, Operation *lookupFrom, ModuleOp destinationRoot, Operation *requestSite)
std::optional< Attribute > inferUnifiedParam(const UnificationMap &unifyResult, SymbolRefAttr paramName)
Return the callee-side unification-derived value for a template parameter, if any.
LogicalResult substituteStructBody(StructDefOp newStruct, StructType typeAtDef, const DenseMap< Attribute, Attribute > ¶mNameToConcrete, SmallVector< Diagnostic > &diagnostics)
LogicalResult substituteFunctionBody(FuncDefOp newFunc, const DenseMap< Attribute, Attribute > ¶mNameToConcrete, SmallVector< Diagnostic > &delayedDiagnostics)
void evaluateTemplateExprs(TemplateOp templateOp, DenseMap< Attribute, Attribute > ¶mNameToConcrete)
Evaluate all TemplateExprOps in templateOp that can be computed from the currently-known concrete par...
void convertCalleesInPlace(Operation *op, const DenseMap< Attribute, Attribute > ¶mNameToValue)
void reportDelayedDiagnostics(Operation *site, SmallVector< Diagnostic > &&diagnostics)
mlir::DenseMap< std::pair< mlir::SymbolRefAttr, Side >, mlir::Attribute > UnificationMap
Optional result from type unifications.