10#ifndef KLEE_ARRAYEXPRVISITOR_H
11#define KLEE_ARRAYEXPRVISITOR_H
18#include <unordered_map>
19#include <unordered_set>
36 using bindings_ty = std::map<const Array *, std::vector<ref<Expr>>>;
59 Action
visitURem(
const URemExpr &)
override;
60 Action
visitSRem(
const SRemExpr &)
override;
61 Action
visitOr(
const OrExpr &)
override;
93 std::vector<const ReadExpr *> &
reads;
106 std::vector<const ReadExpr *> &_reads,
static bool isReadExprAtOffset(ref< Expr > e, const ReadExpr *base, ref< Expr > offset)
static ReadExpr * hasOrderedReads(const ConcatExpr &ce)
std::map< const ReadExpr *, std::pair< ref< Expr >, Expr::Width > > & readInfo
Action visitConcat(const ConcatExpr &) override
Action inspectRead(ref< Expr > hash, Expr::Width width, const ReadExpr &)
std::vector< const ReadExpr * > & reads
ArrayReadExprVisitor(std::vector< const ReadExpr * > &_reads, std::map< const ReadExpr *, std::pair< ref< Expr >, Expr::Width > > &_readInfo)
Action visitRead(const ReadExpr &) override
Action visitConcat(const ConcatExpr &) override
Action visitRead(const ReadExpr &re) override
ExprHashMap< ref< Expr > > optimized
ArrayValueOptReplaceVisitor(ExprHashMap< ref< Expr > > &_optimized, bool recursive=true)
Action visitConcat(const ConcatExpr &) override
ConstantArrayExprVisitor(bindings_ty &_arrays)
Action visitRead(const ReadExpr &) override
std::map< const Array *, std::vector< ref< Expr > > > bindings_ty
std::unordered_set< unsigned > addedIndexes
Class representing symbolic expressions.
static const Width InvalidWidth
unsigned Width
The type of an expression is simply its width, in bits.
Action visitRead(const ReadExpr &) override
Action visitURem(const URemExpr &) override
Action visitOr(const OrExpr &) override
Action visitSRem(const SRemExpr &) override
IndexCompatibilityExprVisitor()=default
Class representing a one byte read from an array.