15#include "llvm/Support/Casting.h"
22 if (
auto *IndVal1 = dyn_cast<PointerValue>(&Val1)) {
23 auto *IndVal2 = cast<PointerValue>(&Val2);
24 return &IndVal1->getPointeeLoc() == &IndVal2->getPointeeLoc();
31 (isa<TopBoolValue>(&Val1) ||
38 return OS <<
"Integer(@" << &Val <<
")";
40 return OS <<
"Pointer(" << &cast<PointerValue>(Val).getPointeeLoc() <<
")";
42 return OS <<
"Record(" << &cast<RecordValue>(Val).getLoc() <<
")";
44 return OS <<
"TopBool(" << cast<TopBoolValue>(Val).getAtom() <<
")";
46 return OS <<
"AtomicBool(" << cast<AtomicBoolValue>(Val).getAtom() <<
")";
48 return OS <<
"FormulaBool(" << cast<FormulaBoolValue>(Val).formula() <<
")";
50 llvm_unreachable(
"Unknown clang::dataflow::Value::Kind enum");
Base class for all values computed by abstract interpretation.
bool areEquivalentValues(const Value &Val1, const Value &Val2)
An equivalence relation for values.
static bool areEquivalentIndirectionValues(const Value &Val1, const Value &Val2)
llvm::raw_ostream & operator<<(llvm::raw_ostream &OS, Atom A)