PandA-2024.02
|
Public Member Functions | |
TernaryOpNode (const ValueRangeRef &intersect, VarNode *sink, const tree_nodeConstRef &inst, VarNode *source1, VarNode *source2, VarNode *source3, kind opcode) | |
~TernaryOpNode () override=default | |
TernaryOpNode (const TernaryOpNode &)=delete | |
TernaryOpNode (TernaryOpNode &&)=delete | |
TernaryOpNode & | operator= (const TernaryOpNode &)=delete |
TernaryOpNode & | operator= (TernaryOpNode &&)=delete |
OperationId | getValueId () const override |
kind | getOpcode () const |
Return the opcode of the operation. More... | |
VarNode * | getSource1 () const |
Returns the first operand of this operation. More... | |
VarNode * | getSource2 () const |
Returns the second operand of this operation. More... | |
VarNode * | getSource3 () const |
Returns the third operand of this operation. More... | |
std::vector< tree_nodeConstRef > | getSources () const override |
void | print (std::ostream &OS) const override |
Prints the content of the operation. More... | |
void | printDot (std::ostream &OS) const override |
Public Member Functions inherited from OpNode | |
virtual | ~OpNode ()=default |
The dtor. It's virtual because this is a base class. More... | |
OpNode (const OpNode &)=delete | |
OpNode (OpNode &&)=delete | |
OpNode & | operator= (const OpNode &)=delete |
OpNode & | operator= (OpNode &&)=delete |
const tree_nodeConstRef & | getInstruction () const |
Return the instruction that originated this op node. More... | |
void | solveFuture (VarNode *future) |
Replace symbolic intervals with hard-wired constants. More... | |
ValueRangeConstRef | getIntersect () const |
Returns the range of the operation. More... | |
void | setIntersect (const RangeConstRef &newIntersect) |
Changes the interval of the operation. More... | |
VarNode * | getSink () const |
Returns the target of the operation, that is, where the result will be stored. More... | |
std::string | ToString () const |
Static Public Member Functions | |
static bool | classof (TernaryOpNode const *) |
static bool | classof (OpNode const *BO) |
static std::function< OpNode *(NodeContainer *)> | opCtorGenerator (const tree_nodeConstRef &, unsigned int, const FunctionBehaviorConstRef &, const tree_managerConstRef &, const application_managerRef &) |
Static Public Member Functions inherited from OpNode | |
static bool | classof (OpNode const *) |
Private Member Functions | |
RangeRef | eval () const override |
Computes the interval of the sink based on the interval of the sources, the operation and the interval associated to the operation. More... | |
Private Attributes | |
VarNode * | source1 |
VarNode * | source2 |
VarNode * | source3 |
kind | opcode |
Additional Inherited Members | |
Public Types inherited from OpNode | |
enum | OperationId { OperationId::UnaryOpId, OperationId::SigmaOpId, OperationId::BinaryOpId, OperationId::TernaryOpId, OperationId::PhiOpId, OperationId::ControlDepId, OperationId::LoadOpId, OperationId::StoreOpId } |
Data Fields inherited from OpNode | |
enum OpNode::OperationId | __attribute__ |
Static Public Attributes inherited from OpNode | |
static int | debug_level = DEBUG_LEVEL_NONE |
Protected Member Functions inherited from OpNode | |
OpNode (const ValueRangeRef &intersect, VarNode *sink, const tree_nodeConstRef &inst) | |
We do not want people creating objects of this class, but we want to inherit from it. More... | |
Definition at line 3571 of file Range_Analysis.cpp.
TernaryOpNode::TernaryOpNode | ( | const ValueRangeRef & | intersect, |
VarNode * | sink, | ||
const tree_nodeConstRef & | inst, | ||
VarNode * | source1, | ||
VarNode * | source2, | ||
VarNode * | source3, | ||
kind | opcode | ||
) |
Definition at line 3644 of file Range_Analysis.cpp.
References GET_CONST_NODE, VarNode::getBitWidth(), STR, THROW_ASSERT, and OpNode::ToString().
Referenced by opCtorGenerator().
|
overridedefault |
|
delete |
|
delete |
|
inlinestatic |
Definition at line 3600 of file Range_Analysis.cpp.
Definition at line 3604 of file Range_Analysis.cpp.
References OpNode::getValueId(), and OpNode::TernaryOpId.
|
overrideprivatevirtual |
Computes the interval of the sink based on the interval of the sources, the operation and the interval associated to the operation.
Implements OpNode.
Definition at line 3662 of file Range_Analysis.cpp.
References branchOpRecurse(), OpNode::debug_level, DEBUG_LEVEL_VERY_PEDANTIC, Empty, GET_CONST_NODE, GET_INDEX_CONST_NODE, OpNode::getInstruction(), OpNode::getIntersect(), getOpcode(), VarNode::getRange(), OpNode::getSink(), getSource1(), getSource2(), getSource3(), INDENT_DBG_MEX, isCompare(), Range::makeSatisfyingCmpRegion(), Regular, result, test(), THROW_ASSERT, and OpNode::ToString().
|
inline |
Return the opcode of the operation.
Definition at line 3610 of file Range_Analysis.cpp.
References BinaryOpNode::opcode.
Referenced by eval(), and printDot().
|
inline |
Returns the first operand of this operation.
Definition at line 3615 of file Range_Analysis.cpp.
References BinaryOpNode::source1.
Referenced by eval(), print(), and printDot().
|
inline |
Returns the second operand of this operation.
Definition at line 3620 of file Range_Analysis.cpp.
References BinaryOpNode::source2.
Referenced by eval(), print(), and printDot().
|
inline |
Returns the third operand of this operation.
Definition at line 3625 of file Range_Analysis.cpp.
Referenced by eval(), print(), and printDot().
|
inlineoverridevirtual |
Implements OpNode.
Definition at line 3629 of file Range_Analysis.cpp.
References VarNode::getValue(), BinaryOpNode::opCtorGenerator(), BinaryOpNode::print(), and BinaryOpNode::printDot().
|
inlineoverridevirtual |
Implements OpNode.
Definition at line 3596 of file Range_Analysis.cpp.
References OpNode::TernaryOpId.
|
static |
Definition at line 3783 of file Range_Analysis.cpp.
References DEBUG_LEVEL_VERY_PEDANTIC, GET_CONST_NODE, INDENT_DBG_MEX, OpNode::sink, and TernaryOpNode().
Referenced by LoadOpNode::getSources(), and LoadOpNode::printDot().
|
delete |
|
delete |
|
overridevirtual |
Prints the content of the operation.
Implements OpNode.
Definition at line 3815 of file Range_Analysis.cpp.
References GET_CONST_NODE, OpNode::getSink(), getSource1(), getSource2(), and getSource3().
Referenced by LoadOpNode::getSources().
|
overridevirtual |
Implements OpNode.
Definition at line 3823 of file Range_Analysis.cpp.
References GET_CONST_NODE, tree_helper::GetConstValue(), getOpcode(), OpNode::getSink(), getSource1(), getSource2(), getSource3(), tree_node::GetString(), and VarNode::getValue().
Referenced by LoadOpNode::getSources().
|
private |
Definition at line 3581 of file Range_Analysis.cpp.
|
private |
Definition at line 3575 of file Range_Analysis.cpp.
|
private |
Definition at line 3577 of file Range_Analysis.cpp.
|
private |
Definition at line 3579 of file Range_Analysis.cpp.