| CIRCT 22.0.0git
    | 
#include "circt/Dialect/FIRRTL/AnnotationDetails.h"#include "circt/Dialect/FIRRTL/CHIRRTLDialect.h"#include "circt/Dialect/FIRRTL/FIRRTLAnnotationHelper.h"#include "circt/Dialect/FIRRTL/FIRRTLAnnotations.h"#include "circt/Dialect/FIRRTL/FIRRTLAttributes.h"#include "circt/Dialect/FIRRTL/FIRRTLInstanceGraph.h"#include "circt/Dialect/FIRRTL/FIRRTLOps.h"#include "circt/Dialect/FIRRTL/FIRRTLTypes.h"#include "circt/Dialect/FIRRTL/FIRRTLUtils.h"#include "circt/Dialect/FIRRTL/Passes.h"#include "circt/Dialect/HW/HWAttributes.h"#include "circt/Dialect/SV/SVAttributes.h"#include "circt/Support/Debug.h"#include "mlir/IR/Diagnostics.h"#include "mlir/Pass/Pass.h"#include "llvm/ADT/PostOrderIterator.h"#include "llvm/ADT/StringExtras.h"#include "llvm/Support/Debug.h"#include "circt/Dialect/FIRRTL/Passes.h.inc"
Go to the source code of this file.
| Namespaces | |
| namespace | circt | 
| The InstanceGraph op interface, see InstanceGraphInterface.td for more details. | |
| namespace | circt::firrtl | 
| Macros | |
| #define | DEBUG_TYPE "firrtl-lower-annotations" | 
| #define | GEN_PASS_DEF_LOWERFIRRTLANNOTATIONS | 
| Functions | |
| static ArrayAttr | getAnnotationsFrom (Operation *op) | 
| Get annotations or an empty set of annotations. | |
| static ArrayAttr | appendArrayAttr (ArrayAttr array, Attribute a) | 
| Construct the annotation array with a new thing appended. | |
| static ArrayAttr | replaceArrayAttrElement (ArrayAttr array, size_t elem, Attribute newVal) | 
| Update an ArrayAttribute by replacing one entry. | |
| static void | addAnnotation (AnnoTarget ref, unsigned fieldIdx, ArrayRef< NamedAttribute > anno) | 
| Apply a new annotation to a resolved target. | |
| static FlatSymbolRefAttr | buildNLA (const AnnoPathValue &target, ApplyState &state) | 
| Make an anchor for a non-local annotation. | |
| static FlatSymbolRefAttr | scatterNonLocalPath (const AnnoPathValue &target, ApplyState &state) | 
| Scatter breadcrumb annotations corresponding to non-local annotations along the instance path. | |
| static std::optional< AnnoPathValue > | noResolve (DictionaryAttr anno, ApplyState &state) | 
| Always resolve to the circuit, ignoring the annotation. | |
| static std::optional< AnnoPathValue > | stdResolveImpl (StringRef rawPath, ApplyState &state) | 
| Implementation of standard resolution. | |
| LogicalResult | drop (const AnnoPathValue &target, DictionaryAttr anno, ApplyState &state) | 
| Just drop the annotation. | |
| static LogicalResult | applyDUTAnno (const AnnoPathValue &target, DictionaryAttr anno, ApplyState &state) | 
| static std::optional< Convention > | parseConvention (llvm::StringRef str) | 
| static LogicalResult | applyConventionAnno (const AnnoPathValue &target, DictionaryAttr anno, ApplyState &state) | 
| static LogicalResult | applyBodyTypeLoweringAnno (const AnnoPathValue &target, DictionaryAttr anno, ApplyState &state) | 
| static LogicalResult | applyModulePrefixAnno (const AnnoPathValue &target, DictionaryAttr anno, ApplyState &state) | 
| static LogicalResult | applyAttributeAnnotation (const AnnoPathValue &target, DictionaryAttr anno, ApplyState &state) | 
| template<bool isInline> | |
| static LogicalResult | applyLoadMemoryAnno (const AnnoPathValue &target, DictionaryAttr anno, ApplyState &state) | 
| Update a memory op with attributes about memory file loading. | |
| static LogicalResult | applyOutputDirAnno (const AnnoPathValue &target, DictionaryAttr anno, ApplyState &state) | 
| static LogicalResult | convertToFullResetAnnotation (const AnnoPathValue &target, DictionaryAttr anno, ApplyState &state) | 
| Convert from FullAsyncResetAnnotation to FullResetAnnotation. | |
| static LogicalResult | convertToExcludeFromFullResetAnnotation (const AnnoPathValue &target, DictionaryAttr anno, ApplyState &state) | 
| Convert from IgnoreFullAsyncResetAnnotation to ExcludeFromFullResetAnnotation. | |
| LogicalResult | circt::firrtl::registerAnnotationRecord (StringRef annoClass, AnnoRecord annoRecord, const std::function< void(llvm::Twine)> &errorHandler={}) | 
| Register external annotation records. | |
| static const AnnoRecord * | getAnnotationHandler (StringRef annoStr, bool ignoreAnnotationUnknown) | 
| Lookup a record for a given annotation class. | |
| Variables | |
| static AnnoRecord | circt::firrtl::NoTargetAnnotation | 
| Resolution and application of a "firrtl.annotations.NoTargetAnnotation". | |
| static llvm::StringMap< AnnoRecord > | circt::firrtl::annotationRecords | 
| #define DEBUG_TYPE "firrtl-lower-annotations" | 
Definition at line 34 of file LowerAnnotations.cpp.
| #define GEN_PASS_DEF_LOWERFIRRTLANNOTATIONS | 
Definition at line 38 of file LowerAnnotations.cpp.
| 
 | static | 
Apply a new annotation to a resolved target.
This handles ports, aggregates, modules, wires, etc.
Definition at line 73 of file LowerAnnotations.cpp.
References appendArrayAttr(), circt::firrtl::getAnnotationAttrName(), getAnnotationsFrom(), circt::firrtl::getNumPorts(), circt::firrtl::AnnoTarget::getOp(), circt::firrtl::getPortAnnotationAttrName(), and replaceArrayAttrElement().
Referenced by applyDUTAnno(), and circt::firrtl::applyWithoutTargetImpl().
| 
 | static | 
Construct the annotation array with a new thing appended.
Definition at line 55 of file LowerAnnotations.cpp.
Referenced by addAnnotation().
| 
 | static | 
Definition at line 416 of file LowerAnnotations.cpp.
References circt::firrtl::AnnoTarget::getOp(), circt::firrtl::AnnoPathValue::isLocal(), and circt::firrtl::AnnoPathValue::ref.
| 
 | static | 
Definition at line 314 of file LowerAnnotations.cpp.
References circt::firrtl::conventionAnnoClass, circt::firrtl::AnnoTarget::getOp(), circt::igraph::InstancePathCache::instanceGraph, circt::firrtl::ApplyState::instancePathCache, circt::firrtl::AnnoPathValue::isLocal(), parseConvention(), circt::firrtl::AnnoPathValue::ref, and circt::firrtl::typeLoweringAnnoClass.
| 
 | static | 
Definition at line 271 of file LowerAnnotations.cpp.
References circt::firrtl::conventionAnnoClass, circt::firrtl::AnnoTarget::getOp(), circt::firrtl::AnnoPathValue::isLocal(), parseConvention(), and circt::firrtl::AnnoPathValue::ref.
| 
 | static | 
Definition at line 241 of file LowerAnnotations.cpp.
References addAnnotation(), circt::firrtl::AnnoPathValue::fieldIdx, circt::firrtl::AnnoTarget::getOp(), circt::firrtl::AnnoPathValue::isLocal(), and circt::firrtl::AnnoPathValue::ref.
| 
 | static | 
Update a memory op with attributes about memory file loading.
Definition at line 447 of file LowerAnnotations.cpp.
References circt::firrtl::ApplyState::circuit, circt::firrtl::AnnoTarget::getOp(), circt::firrtl::AnnoPathValue::isLocal(), circt::firrtl::AnnoPathValue::isOpOfType(), and circt::firrtl::AnnoPathValue::ref.
| 
 | static | 
Definition at line 380 of file LowerAnnotations.cpp.
References circt::firrtl::AnnoTarget::getOp(), circt::firrtl::AnnoPathValue::isLocal(), circt::firrtl::modulePrefixAnnoClass, and circt::firrtl::AnnoPathValue::ref.
| 
 | static | 
Definition at line 494 of file LowerAnnotations.cpp.
References circt::firrtl::AnnoTarget::getOp(), circt::firrtl::AnnoPathValue::isLocal(), circt::firrtl::outputDirAnnoClass, and circt::firrtl::AnnoPathValue::ref.
| 
 | static | 
Make an anchor for a non-local annotation.
Use the expanded path to build the module and name list in the anchor.
Definition at line 112 of file LowerAnnotations.cpp.
References circt::firrtl::ApplyState::circuit, circt::firrtl::AnnoTarget::getModule(), circt::firrtl::ApplyState::getNamespace(), circt::firrtl::OpAnnoTarget::getNLAReference(), circt::firrtl::HierPathCache::getRefFor(), circt::firrtl::ApplyState::hierPathCache, circt::firrtl::AnnoPathValue::instances, and circt::firrtl::AnnoPathValue::ref.
Referenced by scatterNonLocalPath().
| 
 | static | 
Convert from IgnoreFullAsyncResetAnnotation to ExcludeFromFullResetAnnotation.
Definition at line 555 of file LowerAnnotations.cpp.
References circt::firrtl::excludeFromFullResetAnnoClass, circt::firrtl::AnnoTarget::getOp(), circt::firrtl::ignoreFullAsyncResetAnnoClass, and circt::firrtl::AnnoPathValue::ref.
| 
 | static | 
Convert from FullAsyncResetAnnotation to FullResetAnnotation.
Definition at line 534 of file LowerAnnotations.cpp.
References circt::firrtl::fullAsyncResetAnnoClass, circt::firrtl::fullResetAnnoClass, circt::firrtl::AnnoTarget::getOp(), and circt::firrtl::AnnoPathValue::ref.
| LogicalResult drop | ( | const AnnoPathValue & | target, | 
| DictionaryAttr | anno, | ||
| ApplyState & | state | ||
| ) | 
Just drop the annotation.
This is intended for Annotations which are known, but can be safely ignored.
Definition at line 233 of file LowerAnnotations.cpp.
| 
 | static | 
Lookup a record for a given annotation class.
Optionally, returns the record for "circuit.missing" if the record doesn't exist.
Definition at line 694 of file LowerAnnotations.cpp.
References circt::firrtl::annotationRecords.
| 
 | static | 
Get annotations or an empty set of annotations.
Definition at line 48 of file LowerAnnotations.cpp.
References circt::firrtl::getAnnotationAttrName().
Referenced by addAnnotation().
| 
 | static | 
Always resolve to the circuit, ignoring the annotation.
Definition at line 144 of file LowerAnnotations.cpp.
References circt::firrtl::ApplyState::circuit.
| 
 | static | 
Definition at line 265 of file LowerAnnotations.cpp.
Referenced by applyBodyTypeLoweringAnno(), and applyConventionAnno().
| 
 | static | 
Update an ArrayAttribute by replacing one entry.
Definition at line 64 of file LowerAnnotations.cpp.
Referenced by addAnnotation().
| 
 | static | 
Scatter breadcrumb annotations corresponding to non-local annotations along the instance path.
Returns symbol name used to anchor annotations to path.
Definition at line 132 of file LowerAnnotations.cpp.
References buildNLA().
Referenced by circt::firrtl::applyWithoutTargetImpl().
| 
 | static | 
Implementation of standard resolution.
First parses the target path, then resolves it.
Definition at line 151 of file LowerAnnotations.cpp.
References circt::firrtl::canonicalizeTarget(), circt::firrtl::ApplyState::circuit, circt::firrtl::resolveEntities(), circt::firrtl::ApplyState::symTbl, circt::firrtl::ApplyState::targetCaches, and circt::firrtl::tokenizePath().
Referenced by circt::firrtl::stdResolve(), and circt::firrtl::tryResolve().