gem5 v24.0.0.0
|
Array of linked list that maintains the dependencies between producing instructions and consuming instructions. More...
#include <dep_graph.hh>
Public Types | |
typedef DependencyEntry< DynInstPtr > | DepEntry |
Public Member Functions | |
DependencyGraph () | |
Default construction. | |
~DependencyGraph () | |
void | resize (int num_entries) |
Resize the dependency graph to have num_entries registers. | |
void | reset () |
Clears all of the linked lists. | |
void | insert (RegIndex idx, const DynInstPtr &new_inst) |
Inserts an instruction to be dependent on the given index. | |
void | setInst (RegIndex idx, const DynInstPtr &new_inst) |
Sets the producing instruction of a given register. | |
void | clearInst (RegIndex idx) |
Clears the producing instruction. | |
void | remove (RegIndex idx, const DynInstPtr &inst_to_remove) |
Removes an instruction from a single linked list. | |
DynInstPtr | pop (RegIndex idx) |
Removes and returns the newest dependent of a specific register. | |
bool | empty () const |
Checks if the entire dependency graph is empty. | |
bool | empty (RegIndex idx) const |
Checks if there are any dependents on a specific register. | |
void | dump () |
Debugging function to dump out the dependency graph. | |
Public Attributes | |
uint64_t | nodesTraversed |
uint64_t | nodesRemoved |
Private Attributes | |
std::vector< DepEntry > | dependGraph |
Array of linked lists. | |
int | numEntries |
Number of linked lists; identical to the number of registers. | |
unsigned | memAllocCounter |
Array of linked list that maintains the dependencies between producing instructions and consuming instructions.
Each linked list represents a single physical register, having the future producer of the register's value, and all consumers waiting on that value on the list. The head node of each linked list represents the producing instruction of that register. Instructions are put on the list upon reaching the IQ, and are removed from the list either when the producer completes, or the instruction is squashed.
Definition at line 77 of file dep_graph.hh.
typedef DependencyEntry<DynInstPtr> gem5::o3::DependencyGraph< DynInstPtr >::DepEntry |
Definition at line 80 of file dep_graph.hh.
|
inline |
gem5::o3::DependencyGraph< DynInstPtr >::~DependencyGraph | ( | ) |
Definition at line 145 of file dep_graph.hh.
|
inline |
Clears the producing instruction.
Definition at line 103 of file dep_graph.hh.
References gem5::o3::DependencyGraph< DynInstPtr >::dependGraph.
void gem5::o3::DependencyGraph< DynInstPtr >::dump | ( | ) |
Debugging function to dump out the dependency graph.
Definition at line 274 of file dep_graph.hh.
References gem5::cprintf(), gem5::ArmISA::i, gem5::o3::DependencyEntry< DynInstPtr >::inst, gem5::o3::DependencyEntry< DynInstPtr >::next, gem5::o3::DynInst::pcState(), and gem5::o3::DynInst::seqNum.
bool gem5::o3::DependencyGraph< DynInstPtr >::empty | ( | ) | const |
Checks if the entire dependency graph is empty.
Definition at line 263 of file dep_graph.hh.
References gem5::ArmISA::i.
|
inline |
Checks if there are any dependents on a specific register.
Definition at line 116 of file dep_graph.hh.
References gem5::o3::DependencyGraph< DynInstPtr >::dependGraph.
void gem5::o3::DependencyGraph< DynInstPtr >::insert | ( | RegIndex | idx, |
const DynInstPtr & | new_inst ) |
Inserts an instruction to be dependent on the given index.
Definition at line 188 of file dep_graph.hh.
References gem5::o3::DependencyEntry< DynInstPtr >::inst, and gem5::o3::DependencyEntry< DynInstPtr >::next.
DynInstPtr gem5::o3::DependencyGraph< DynInstPtr >::pop | ( | RegIndex | idx | ) |
Removes and returns the newest dependent of a specific register.
Definition at line 246 of file dep_graph.hh.
References gem5::o3::DependencyEntry< DynInstPtr >::inst, and gem5::o3::DependencyEntry< DynInstPtr >::next.
void gem5::o3::DependencyGraph< DynInstPtr >::remove | ( | RegIndex | idx, |
const DynInstPtr & | inst_to_remove ) |
Removes an instruction from a single linked list.
Definition at line 208 of file dep_graph.hh.
References gem5::o3::DependencyEntry< DynInstPtr >::inst, and gem5::o3::DependencyEntry< DynInstPtr >::next.
void gem5::o3::DependencyGraph< DynInstPtr >::reset | ( | ) |
Clears all of the linked lists.
Definition at line 159 of file dep_graph.hh.
References gem5::ArmISA::i, gem5::o3::DependencyEntry< DynInstPtr >::inst, and gem5::o3::DependencyEntry< DynInstPtr >::next.
void gem5::o3::DependencyGraph< DynInstPtr >::resize | ( | int | num_entries | ) |
Resize the dependency graph to have num_entries registers.
Definition at line 151 of file dep_graph.hh.
|
inline |
Sets the producing instruction of a given register.
Definition at line 99 of file dep_graph.hh.
References gem5::o3::DependencyGraph< DynInstPtr >::dependGraph.
|
private |
Array of linked lists.
Each linked list is a list of all the instructions that depend upon a given register. The actual register's index is used to index into the graph; ie all instructions in flight that are dependent upon r34 will be in the linked list of dependGraph[34].
Definition at line 129 of file dep_graph.hh.
Referenced by gem5::o3::DependencyGraph< DynInstPtr >::clearInst(), gem5::o3::DependencyGraph< DynInstPtr >::empty(), and gem5::o3::DependencyGraph< DynInstPtr >::setInst().
|
private |
Definition at line 135 of file dep_graph.hh.
uint64_t gem5::o3::DependencyGraph< DynInstPtr >::nodesRemoved |
Definition at line 141 of file dep_graph.hh.
uint64_t gem5::o3::DependencyGraph< DynInstPtr >::nodesTraversed |
Definition at line 139 of file dep_graph.hh.
|
private |
Number of linked lists; identical to the number of registers.
Definition at line 132 of file dep_graph.hh.