cprover
Toggle main menu visibility
Loading...
Searching...
No Matches
boolbv_ieee_float_rel.cpp
Go to the documentation of this file.
1
/*******************************************************************\
2
3
Module:
4
5
Author: Daniel Kroening, kroening@kroening.com
6
7
\*******************************************************************/
8
9
#include "
boolbv.h
"
10
11
#include "
boolbv_type.h
"
12
13
#include <
util/bitvector_types.h
>
14
15
#include <
solvers/floatbv/float_utils.h
>
16
17
literalt
boolbvt::convert_ieee_float_rel
(
const
binary_relation_exprt
&expr)
18
{
19
const
exprt::operandst
&operands=expr.
operands
();
20
const
irep_idt
&rel=expr.
id
();
21
22
if
(operands.size()==2)
23
{
24
const
exprt
&op0=expr.
op0
();
25
const
exprt
&op1=expr.
op1
();
26
27
bvtypet
bvtype0=
get_bvtype
(op0.
type
());
28
bvtypet
bvtype1=
get_bvtype
(op1.
type
());
29
30
const
bvt
&bv0=
convert_bv
(op0);
31
const
bvt
&bv1=
convert_bv
(op1);
32
33
if
(bv0.size()==bv1.size() && !bv0.empty() &&
34
bvtype0==
bvtypet::IS_FLOAT
&& bvtype1==
bvtypet::IS_FLOAT
)
35
{
36
float_utilst
float_utils(
prop
,
to_floatbv_type
(op0.
type
()));
37
38
if
(rel==ID_ieee_float_equal)
39
return
float_utils.
relation
(bv0,
float_utilst::relt::EQ
, bv1);
40
else
if
(rel==ID_ieee_float_notequal)
41
return
!float_utils.
relation
(bv0,
float_utilst::relt::EQ
, bv1);
42
else
43
return
SUB::convert_rest
(expr);
44
}
45
}
46
47
return
SUB::convert_rest
(expr);
48
}
bitvector_types.h
Pre-defined bitvector types.
to_floatbv_type
const floatbv_typet & to_floatbv_type(const typet &type)
Cast a typet to a floatbv_typet.
Definition
bitvector_types.h:386
boolbv.h
get_bvtype
bvtypet get_bvtype(const typet &type)
Definition
boolbv_type.cpp:13
boolbv_type.h
bvtypet
bvtypet
Definition
boolbv_type.h:17
bvtypet::IS_FLOAT
@ IS_FLOAT
Definition
boolbv_type.h:18
binary_exprt::op0
exprt & op0()
Definition
expr.h:134
binary_exprt::op1
exprt & op1()
Definition
expr.h:137
binary_relation_exprt
A base class for relations, i.e., binary predicates whose two operands have the same type.
Definition
std_expr.h:774
boolbvt::convert_bv
virtual const bvt & convert_bv(const exprt &expr, const std::optional< std::size_t > expected_width={})
Convert expression to vector of literalts, using an internal cache to speed up conversion if availabl...
Definition
boolbv.cpp:40
boolbvt::convert_ieee_float_rel
virtual literalt convert_ieee_float_rel(const binary_relation_exprt &)
Definition
boolbv_ieee_float_rel.cpp:17
exprt
Base class for all expressions.
Definition
expr.h:57
exprt::operandst
std::vector< exprt > operandst
Definition
expr.h:59
exprt::type
typet & type()
Return the type of the expression.
Definition
expr.h:85
exprt::operands
operandst & operands()
Definition
expr.h:95
float_utilst
Definition
float_utils.h:18
float_utilst::relt::EQ
@ EQ
Definition
float_utils.h:152
float_utilst::relation
literalt relation(const bvt &src1, relt rel, const bvt &src2)
Definition
float_utils.cpp:726
irept::id
const irep_idt & id() const
Definition
irep.h:388
literalt
Definition
literal.h:26
prop_conv_solvert::convert_rest
virtual literalt convert_rest(const exprt &expr)
Definition
prop_conv_solver.cpp:314
prop_conv_solvert::prop
propt & prop
Definition
prop_conv_solver.h:130
float_utils.h
bvt
std::vector< literalt > bvt
Definition
literal.h:201
irep_idt
dstringt irep_idt
Definition
verification_result.h:16
solvers
flattening
boolbv_ieee_float_rel.cpp
Generated by
1.17.0