CIRCT 20.0.0git
Loading...
Searching...
No Matches
FieldRefCache.h
Go to the documentation of this file.
1//===- FieldRefCache.h - FieldRef cache -------------------------*- 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 declares FieldRefCache, a caching getFieldRefFromValue that
10// caching FieldRef's for each queried value and all indexing operations
11// visited during the walk.
12//
13//===----------------------------------------------------------------------===//
14
15#ifndef CIRCT_DIALECT_FIRRTL_FIELDREFCACHE_H
16#define CIRCT_DIALECT_FIRRTL_FIELDREFCACHE_H
17
19#include "circt/Support/LLVM.h"
20
21namespace circt {
22namespace firrtl {
23
24/// Caching version of getFieldRefFromValue. Computes the requested FieldRef
25/// and for all operations visited along the way. Tracks some stats in debug.
27 using Key = llvm::PointerIntPair<Value, 1, bool>;
28 DenseMap<Key, FieldRef> refs;
29#ifndef NDEBUG
30 size_t computed = 0;
31 size_t hits = 0;
32 size_t queries = 0;
33#endif
34
35public:
36 /// Caching version of getFieldRefFromValue.
37 FieldRef getFieldRefFromValue(Value value, bool lookThroughCasts = false);
38
39 /// Drop all cached entries.
40 void clear() { refs.clear(); }
41
42#ifndef NDEBUG
43 void printStats(llvm::raw_ostream &os) const;
44 void addToTotals(size_t &totalHits, size_t &totalComputed,
45 size_t &totalQueries) const;
46 void verifyImpl() const;
47#endif // NDEBUG
48
49 /// Verify cached fieldRefs against firrtl::getFieldRefFromValue.
50 /// No-op in release builds.
51 void verify() const {
52#ifndef NDEBUG
53 verifyImpl();
54#endif // NDEBUG
55 }
56};
57
58} // namespace firrtl
59} // namespace circt
60
61#endif // CIRCT_DIALECT_FIRRTL_FIELDREFCACHE_H
This class represents a reference to a specific field or element of an aggregate value.
Definition FieldRef.h:28
Caching version of getFieldRefFromValue.
llvm::PointerIntPair< Value, 1, bool > Key
void clear()
Drop all cached entries.
void addToTotals(size_t &totalHits, size_t &totalComputed, size_t &totalQueries) const
void printStats(llvm::raw_ostream &os) const
void verify() const
Verify cached fieldRefs against firrtl::getFieldRefFromValue.
FieldRef getFieldRefFromValue(Value value, bool lookThroughCasts=false)
Caching version of getFieldRefFromValue.
DenseMap< Key, FieldRef > refs
The InstanceGraph op interface, see InstanceGraphInterface.td for more details.