decompiler
1.0.0
|
Public Member Functions | |
void | createTraces (void) |
Given the BlockTrace objects, given a new BranchPoint. | |
void | markPath (void) |
Mark a path from this up to the root BranchPoint. | |
int4 | distance (BranchPoint *op2) |
Calculate distance between two BranchPoints. More... | |
FlowBlock * | getPathStart (int4 i) |
Get the start of the i-th BlockTrace. More... | |
BranchPoint (void) | |
Create the (unique) root branch point. | |
BranchPoint (BlockTrace *parenttrace) | |
Construct given a parent BlockTrace. | |
~BranchPoint (void) | |
BranchPoint owns its BlockTraces. | |
Public Attributes | |
BranchPoint * | parent |
The parent BranchPoint along which this is only one path. | |
int4 | pathout |
Index (of the out edge from the parent) of the path along which this lies. | |
FlowBlock * | top |
FlowBlock that embodies the branch point. | |
vector< BlockTrace * > | paths |
BlockTrace for each possible path out of this BlockPoint. | |
int4 | depth |
Depth of BranchPoints from the root. | |
bool | ismark |
Possible mark. | |
A node in the control-flow graph with multiple outgoing edges in the DAG. Ideally, all these paths eventually merge at the same node.
int4 ghidra::TraceDAG::BranchPoint::distance | ( | BranchPoint * | op2 | ) |
Calculate distance between two BranchPoints.
The distance is the number of edges from this up to the common ancestor plus the number of edges down to the other BranchPoint. We assume that this has had its path up to the root marked.
op2 | is the other BranchPoint |
References depth, ismark, and parent.
Referenced by ghidra::TraceDAG::processExitConflict().
FlowBlock * ghidra::TraceDAG::BranchPoint::getPathStart | ( | int4 | i | ) |
Get the start of the i-th BlockTrace.
Get the first FlowBlock along the i-th BlockTrace path.
i | is the index of the path |
References ghidra::FlowBlock::getOut(), ghidra::FlowBlock::isLoopDAGOut(), ghidra::FlowBlock::sizeOut(), and ghidra::FloatingEdge::top.