LLVM: llvm::SMTSolver Class Reference (original) (raw)
Generic base class for SMT Solvers. More...
#include "[llvm/Support/SMTAPI.h](SMTAPI%5F8h%5Fsource.html)"
| Public Member Functions | |
|---|---|
| SMTSolver ()=default | |
| virtual | ~SMTSolver ()=default |
| LLVM_DUMP_METHOD void | dump () const |
| SMTSortRef | getFloatSort (unsigned BitWidth) |
| virtual SMTSortRef | getBoolSort ()=0 |
| virtual SMTSortRef | getBitvectorSort (const unsigned BitWidth)=0 |
| virtual SMTSortRef | getFloat16Sort ()=0 |
| virtual SMTSortRef | getFloat32Sort ()=0 |
| virtual SMTSortRef | getFloat64Sort ()=0 |
| virtual SMTSortRef | getFloat128Sort ()=0 |
| virtual SMTSortRef | getSort (const SMTExprRef &AST)=0 |
| virtual void | addConstraint (const SMTExprRef &Exp) const =0 |
| Given a constraint, adds it to the solver. | |
| virtual SMTExprRef | mkBVAdd (const SMTExprRef &LHS, const SMTExprRef &RHS)=0 |
| Creates a bitvector addition operation. | |
| virtual SMTExprRef | mkBVSub (const SMTExprRef &LHS, const SMTExprRef &RHS)=0 |
| Creates a bitvector subtraction operation. | |
| virtual SMTExprRef | mkBVMul (const SMTExprRef &LHS, const SMTExprRef &RHS)=0 |
| Creates a bitvector multiplication operation. | |
| virtual SMTExprRef | mkBVSRem (const SMTExprRef &LHS, const SMTExprRef &RHS)=0 |
| Creates a bitvector signed modulus operation. | |
| virtual SMTExprRef | mkBVURem (const SMTExprRef &LHS, const SMTExprRef &RHS)=0 |
| Creates a bitvector unsigned modulus operation. | |
| virtual SMTExprRef | mkBVSDiv (const SMTExprRef &LHS, const SMTExprRef &RHS)=0 |
| Creates a bitvector signed division operation. | |
| virtual SMTExprRef | mkBVUDiv (const SMTExprRef &LHS, const SMTExprRef &RHS)=0 |
| Creates a bitvector unsigned division operation. | |
| virtual SMTExprRef | mkBVShl (const SMTExprRef &LHS, const SMTExprRef &RHS)=0 |
| Creates a bitvector logical shift left operation. | |
| virtual SMTExprRef | mkBVAshr (const SMTExprRef &LHS, const SMTExprRef &RHS)=0 |
| Creates a bitvector arithmetic shift right operation. | |
| virtual SMTExprRef | mkBVLshr (const SMTExprRef &LHS, const SMTExprRef &RHS)=0 |
| Creates a bitvector logical shift right operation. | |
| virtual SMTExprRef | mkBVNeg (const SMTExprRef &Exp)=0 |
| Creates a bitvector negation operation. | |
| virtual SMTExprRef | mkBVNot (const SMTExprRef &Exp)=0 |
| Creates a bitvector not operation. | |
| virtual SMTExprRef | mkBVXor (const SMTExprRef &LHS, const SMTExprRef &RHS)=0 |
| Creates a bitvector xor operation. | |
| virtual SMTExprRef | mkBVOr (const SMTExprRef &LHS, const SMTExprRef &RHS)=0 |
| Creates a bitvector or operation. | |
| virtual SMTExprRef | mkBVAnd (const SMTExprRef &LHS, const SMTExprRef &RHS)=0 |
| Creates a bitvector and operation. | |
| virtual SMTExprRef | mkBVUlt (const SMTExprRef &LHS, const SMTExprRef &RHS)=0 |
| Creates a bitvector unsigned less-than operation. | |
| virtual SMTExprRef | mkBVSlt (const SMTExprRef &LHS, const SMTExprRef &RHS)=0 |
| Creates a bitvector signed less-than operation. | |
| virtual SMTExprRef | mkBVUgt (const SMTExprRef &LHS, const SMTExprRef &RHS)=0 |
| Creates a bitvector unsigned greater-than operation. | |
| virtual SMTExprRef | mkBVSgt (const SMTExprRef &LHS, const SMTExprRef &RHS)=0 |
| Creates a bitvector signed greater-than operation. | |
| virtual SMTExprRef | mkBVUle (const SMTExprRef &LHS, const SMTExprRef &RHS)=0 |
| Creates a bitvector unsigned less-equal-than operation. | |
| virtual SMTExprRef | mkBVSle (const SMTExprRef &LHS, const SMTExprRef &RHS)=0 |
| Creates a bitvector signed less-equal-than operation. | |
| virtual SMTExprRef | mkBVUge (const SMTExprRef &LHS, const SMTExprRef &RHS)=0 |
| Creates a bitvector unsigned greater-equal-than operation. | |
| virtual SMTExprRef | mkBVSge (const SMTExprRef &LHS, const SMTExprRef &RHS)=0 |
| Creates a bitvector signed greater-equal-than operation. | |
| virtual SMTExprRef | mkNot (const SMTExprRef &Exp)=0 |
| Creates a boolean not operation. | |
| virtual SMTExprRef | mkEqual (const SMTExprRef &LHS, const SMTExprRef &RHS)=0 |
| Creates a boolean equality operation. | |
| virtual SMTExprRef | mkAnd (const SMTExprRef &LHS, const SMTExprRef &RHS)=0 |
| Creates a boolean and operation. | |
| virtual SMTExprRef | mkOr (const SMTExprRef &LHS, const SMTExprRef &RHS)=0 |
| Creates a boolean or operation. | |
| virtual SMTExprRef | mkIte (const SMTExprRef &Cond, const SMTExprRef &T, const SMTExprRef &F)=0 |
| Creates a boolean ite operation. | |
| virtual SMTExprRef | mkBVSignExt (unsigned i, const SMTExprRef &Exp)=0 |
| Creates a bitvector sign extension operation. | |
| virtual SMTExprRef | mkBVZeroExt (unsigned i, const SMTExprRef &Exp)=0 |
| Creates a bitvector zero extension operation. | |
| virtual SMTExprRef | mkBVExtract (unsigned High, unsigned Low, const SMTExprRef &Exp)=0 |
| Creates a bitvector extract operation. | |
| virtual SMTExprRef | mkBVConcat (const SMTExprRef &LHS, const SMTExprRef &RHS)=0 |
| Creates a bitvector concat operation. | |
| virtual SMTExprRef | mkBVAddNoOverflow (const SMTExprRef &LHS, const SMTExprRef &RHS, bool isSigned)=0 |
| Creates a predicate that checks for overflow in a bitvector addition operation. | |
| virtual SMTExprRef | mkBVAddNoUnderflow (const SMTExprRef &LHS, const SMTExprRef &RHS)=0 |
| Creates a predicate that checks for underflow in a signed bitvector addition operation. | |
| virtual SMTExprRef | mkBVSubNoOverflow (const SMTExprRef &LHS, const SMTExprRef &RHS)=0 |
| Creates a predicate that checks for overflow in a signed bitvector subtraction operation. | |
| virtual SMTExprRef | mkBVSubNoUnderflow (const SMTExprRef &LHS, const SMTExprRef &RHS, bool isSigned)=0 |
| Creates a predicate that checks for underflow in a bitvector subtraction operation. | |
| virtual SMTExprRef | mkBVSDivNoOverflow (const SMTExprRef &LHS, const SMTExprRef &RHS)=0 |
| Creates a predicate that checks for overflow in a signed bitvector division/modulus operation. | |
| virtual SMTExprRef | mkBVNegNoOverflow (const SMTExprRef &Exp)=0 |
| Creates a predicate that checks for overflow in a bitvector negation operation. | |
| virtual SMTExprRef | mkBVMulNoOverflow (const SMTExprRef &LHS, const SMTExprRef &RHS, bool isSigned)=0 |
| Creates a predicate that checks for overflow in a bitvector multiplication operation. | |
| virtual SMTExprRef | mkBVMulNoUnderflow (const SMTExprRef &LHS, const SMTExprRef &RHS)=0 |
| Creates a predicate that checks for underflow in a signed bitvector multiplication operation. | |
| virtual SMTExprRef | mkFPNeg (const SMTExprRef &Exp)=0 |
| Creates a floating-point negation operation. | |
| virtual SMTExprRef | mkFPIsInfinite (const SMTExprRef &Exp)=0 |
| Creates a floating-point isInfinite operation. | |
| virtual SMTExprRef | mkFPIsNaN (const SMTExprRef &Exp)=0 |
| Creates a floating-point isNaN operation. | |
| virtual SMTExprRef | mkFPIsNormal (const SMTExprRef &Exp)=0 |
| Creates a floating-point isNormal operation. | |
| virtual SMTExprRef | mkFPIsZero (const SMTExprRef &Exp)=0 |
| Creates a floating-point isZero operation. | |
| virtual SMTExprRef | mkFPMul (const SMTExprRef &LHS, const SMTExprRef &RHS)=0 |
| Creates a floating-point multiplication operation. | |
| virtual SMTExprRef | mkFPDiv (const SMTExprRef &LHS, const SMTExprRef &RHS)=0 |
| Creates a floating-point division operation. | |
| virtual SMTExprRef | mkFPRem (const SMTExprRef &LHS, const SMTExprRef &RHS)=0 |
| Creates a floating-point remainder operation. | |
| virtual SMTExprRef | mkFPAdd (const SMTExprRef &LHS, const SMTExprRef &RHS)=0 |
| Creates a floating-point addition operation. | |
| virtual SMTExprRef | mkFPSub (const SMTExprRef &LHS, const SMTExprRef &RHS)=0 |
| Creates a floating-point subtraction operation. | |
| virtual SMTExprRef | mkFPLt (const SMTExprRef &LHS, const SMTExprRef &RHS)=0 |
| Creates a floating-point less-than operation. | |
| virtual SMTExprRef | mkFPGt (const SMTExprRef &LHS, const SMTExprRef &RHS)=0 |
| Creates a floating-point greater-than operation. | |
| virtual SMTExprRef | mkFPLe (const SMTExprRef &LHS, const SMTExprRef &RHS)=0 |
| Creates a floating-point less-than-or-equal operation. | |
| virtual SMTExprRef | mkFPGe (const SMTExprRef &LHS, const SMTExprRef &RHS)=0 |
| Creates a floating-point greater-than-or-equal operation. | |
| virtual SMTExprRef | mkFPEqual (const SMTExprRef &LHS, const SMTExprRef &RHS)=0 |
| Creates a floating-point equality operation. | |
| virtual SMTExprRef | mkFPtoFP (const SMTExprRef &From, const SMTSortRef &To)=0 |
| Creates a floating-point conversion from floatint-point to floating-point operation. | |
| virtual SMTExprRef | mkSBVtoFP (const SMTExprRef &From, const SMTSortRef &To)=0 |
| Creates a floating-point conversion from signed bitvector to floatint-point operation. | |
| virtual SMTExprRef | mkUBVtoFP (const SMTExprRef &From, const SMTSortRef &To)=0 |
| Creates a floating-point conversion from unsigned bitvector to floatint-point operation. | |
| virtual SMTExprRef | mkFPtoSBV (const SMTExprRef &From, unsigned ToWidth)=0 |
| Creates a floating-point conversion from floatint-point to signed bitvector operation. | |
| virtual SMTExprRef | mkFPtoUBV (const SMTExprRef &From, unsigned ToWidth)=0 |
| Creates a floating-point conversion from floatint-point to unsigned bitvector operation. | |
| virtual SMTExprRef | mkSymbol (const char *Name, SMTSortRef Sort)=0 |
| Creates a new symbol, given a name and a sort. | |
| virtual SMTExprRef | getFloatRoundingMode ()=0 |
| virtual llvm::APSInt | getBitvector (const SMTExprRef &Exp, unsigned BitWidth, bool isUnsigned)=0 |
| virtual bool | getBoolean (const SMTExprRef &Exp)=0 |
| virtual SMTExprRef | mkBoolean (const bool b)=0 |
| Constructs an SMTExprRef from a boolean. | |
| virtual SMTExprRef | mkFloat (const llvm::APFloat Float)=0 |
| Constructs an SMTExprRef from a finite APFloat. | |
| virtual SMTExprRef | mkBitvector (const llvm::APSInt Int, unsigned BitWidth)=0 |
| Constructs an SMTExprRef from an APSInt and its bit width. | |
| virtual bool | getInterpretation (const SMTExprRef &Exp, llvm::APSInt &Int)=0 |
| Given an expression, extract the value of this operand in the model. | |
| virtual bool | getInterpretation (const SMTExprRef &Exp, llvm::APFloat &Float)=0 |
| Given an expression extract the value of this operand in the model. | |
| virtual std::optional< bool > | check () const =0 |
| Check if the constraints are satisfiable. | |
| virtual void | push ()=0 |
| Push the current solver state. | |
| virtual void | pop (unsigned NumStates=1)=0 |
| Pop the previous solver state. | |
| virtual void | reset ()=0 |
| Reset the solver and remove all constraints. | |
| virtual bool | isFPSupported ()=0 |
| Checks if the solver supports floating-points. | |
| virtual void | print (raw_ostream &OS) const =0 |
| virtual void | setBoolParam (StringRef Key, bool Value)=0 |
| Sets the requested option. | |
| virtual void | setUnsignedParam (StringRef Key, unsigned Value)=0 |
| virtual std::unique_ptr< SMTSolverStatistics > | getStatistics () const =0 |
Generic base class for SMT Solvers.
This class is responsible for wrapping all sorts and expression generation, through the mk* methods. It also provides methods to create SMT expressions straight from clang's AST, through the from* methods.
Definition at line 156 of file SMTAPI.h.
| llvm::SMTSolver::SMTSolver ( ) | default |
|---|
◆ ~SMTSolver()
| virtual llvm::SMTSolver::~SMTSolver ( ) | virtualdefault |
|---|
◆ addConstraint()
| virtual void llvm::SMTSolver::addConstraint ( const SMTExprRef & Exp) const | pure virtual |
|---|
Given a constraint, adds it to the solver.
◆ check()
| virtual std::optional< bool > llvm::SMTSolver::check ( ) const | pure virtual |
|---|
Check if the constraints are satisfiable.
◆ dump()
◆ getBitvector()
◆ getBitvectorSort()
◆ getBoolean()
◆ getBoolSort()
| virtual SMTSortRef llvm::SMTSolver::getBoolSort ( ) | pure virtual |
|---|
◆ getFloat128Sort()
| virtual SMTSortRef llvm::SMTSolver::getFloat128Sort ( ) | pure virtual |
|---|
◆ getFloat16Sort()
| virtual SMTSortRef llvm::SMTSolver::getFloat16Sort ( ) | pure virtual |
|---|
◆ getFloat32Sort()
| virtual SMTSortRef llvm::SMTSolver::getFloat32Sort ( ) | pure virtual |
|---|
◆ getFloat64Sort()
| virtual SMTSortRef llvm::SMTSolver::getFloat64Sort ( ) | pure virtual |
|---|
◆ getFloatRoundingMode()
| virtual SMTExprRef llvm::SMTSolver::getFloatRoundingMode ( ) | pure virtual |
|---|
◆ getFloatSort()
◆ getInterpretation() [1/2]
Given an expression extract the value of this operand in the model.
References Float.
◆ getInterpretation() [2/2]
Given an expression, extract the value of this operand in the model.
References Int.
◆ getSort()
◆ getStatistics()
| virtual std::unique_ptr< SMTSolverStatistics > llvm::SMTSolver::getStatistics ( ) const | pure virtual |
|---|
◆ isFPSupported()
| virtual bool llvm::SMTSolver::isFPSupported ( ) | pure virtual |
|---|
Checks if the solver supports floating-points.
◆ mkAnd()
Creates a boolean and operation.
◆ mkBitvector()
◆ mkBoolean()
◆ mkBVAdd()
Creates a bitvector addition operation.
◆ mkBVAddNoOverflow()
Creates a predicate that checks for overflow in a bitvector addition operation.
References isSigned(), LHS, and RHS.
◆ mkBVAddNoUnderflow()
Creates a predicate that checks for underflow in a signed bitvector addition operation.
◆ mkBVAnd()
Creates a bitvector and operation.
◆ mkBVAshr()
Creates a bitvector arithmetic shift right operation.
◆ mkBVConcat()
Creates a bitvector concat operation.
◆ mkBVExtract()
Creates a bitvector extract operation.
References High, and llvm::Low.
◆ mkBVLshr()
Creates a bitvector logical shift right operation.
◆ mkBVMul()
Creates a bitvector multiplication operation.
◆ mkBVMulNoOverflow()
Creates a predicate that checks for overflow in a bitvector multiplication operation.
References isSigned(), LHS, and RHS.
◆ mkBVMulNoUnderflow()
Creates a predicate that checks for underflow in a signed bitvector multiplication operation.
◆ mkBVNeg()
Creates a bitvector negation operation.
◆ mkBVNegNoOverflow()
Creates a predicate that checks for overflow in a bitvector negation operation.
◆ mkBVNot()
Creates a bitvector not operation.
◆ mkBVOr()
Creates a bitvector or operation.
◆ mkBVSDiv()
Creates a bitvector signed division operation.
◆ mkBVSDivNoOverflow()
Creates a predicate that checks for overflow in a signed bitvector division/modulus operation.
◆ mkBVSge()
Creates a bitvector signed greater-equal-than operation.
◆ mkBVSgt()
Creates a bitvector signed greater-than operation.
◆ mkBVShl()
Creates a bitvector logical shift left operation.
◆ mkBVSignExt()
Creates a bitvector sign extension operation.
◆ mkBVSle()
Creates a bitvector signed less-equal-than operation.
◆ mkBVSlt()
Creates a bitvector signed less-than operation.
◆ mkBVSRem()
Creates a bitvector signed modulus operation.
◆ mkBVSub()
Creates a bitvector subtraction operation.
◆ mkBVSubNoOverflow()
Creates a predicate that checks for overflow in a signed bitvector subtraction operation.
◆ mkBVSubNoUnderflow()
Creates a predicate that checks for underflow in a bitvector subtraction operation.
References isSigned(), LHS, and RHS.
◆ mkBVUDiv()
Creates a bitvector unsigned division operation.
◆ mkBVUge()
Creates a bitvector unsigned greater-equal-than operation.
◆ mkBVUgt()
Creates a bitvector unsigned greater-than operation.
◆ mkBVUle()
Creates a bitvector unsigned less-equal-than operation.
◆ mkBVUlt()
Creates a bitvector unsigned less-than operation.
◆ mkBVURem()
Creates a bitvector unsigned modulus operation.
◆ mkBVXor()
Creates a bitvector xor operation.
◆ mkBVZeroExt()
Creates a bitvector zero extension operation.
◆ mkEqual()
Creates a boolean equality operation.
◆ mkFloat()
◆ mkFPAdd()
Creates a floating-point addition operation.
◆ mkFPDiv()
Creates a floating-point division operation.
◆ mkFPEqual()
Creates a floating-point equality operation.
◆ mkFPGe()
Creates a floating-point greater-than-or-equal operation.
◆ mkFPGt()
Creates a floating-point greater-than operation.
◆ mkFPIsInfinite()
Creates a floating-point isInfinite operation.
◆ mkFPIsNaN()
Creates a floating-point isNaN operation.
◆ mkFPIsNormal()
Creates a floating-point isNormal operation.
◆ mkFPIsZero()
Creates a floating-point isZero operation.
◆ mkFPLe()
Creates a floating-point less-than-or-equal operation.
◆ mkFPLt()
Creates a floating-point less-than operation.
◆ mkFPMul()
Creates a floating-point multiplication operation.
◆ mkFPNeg()
Creates a floating-point negation operation.
◆ mkFPRem()
Creates a floating-point remainder operation.
◆ mkFPSub()
Creates a floating-point subtraction operation.
◆ mkFPtoFP()
Creates a floating-point conversion from floatint-point to floating-point operation.
◆ mkFPtoSBV()
Creates a floating-point conversion from floatint-point to signed bitvector operation.
◆ mkFPtoUBV()
Creates a floating-point conversion from floatint-point to unsigned bitvector operation.
◆ mkIte()
Creates a boolean ite operation.
◆ mkNot()
Creates a boolean not operation.
◆ mkOr()
Creates a boolean or operation.
◆ mkSBVtoFP()
Creates a floating-point conversion from signed bitvector to floatint-point operation.
◆ mkSymbol()
Creates a new symbol, given a name and a sort.
◆ mkUBVtoFP()
Creates a floating-point conversion from unsigned bitvector to floatint-point operation.
◆ pop()
| virtual void llvm::SMTSolver::pop ( unsigned NumStates = 1) | pure virtual |
|---|
Pop the previous solver state.
◆ print()
| virtual void llvm::SMTSolver::print ( raw_ostream & OS) const | pure virtual |
|---|
◆ push()
| virtual void llvm::SMTSolver::push ( ) | pure virtual |
|---|
Push the current solver state.
◆ reset()
| virtual void llvm::SMTSolver::reset ( ) | pure virtual |
|---|
Reset the solver and remove all constraints.
◆ setBoolParam()
| virtual void llvm::SMTSolver::setBoolParam ( StringRef Key, bool Value ) | pure virtual |
|---|
◆ setUnsignedParam()
The documentation for this class was generated from the following files:
- include/llvm/Support/SMTAPI.h
- lib/Support/Z3Solver.cpp