9#ifndef LLVM_CLANG_ANALYSIS_FLOWSENSITIVE_FORMULA_H
10#define LLVM_CLANG_ANALYSIS_FLOWSENSITIVE_FORMULA_H
13#include "llvm/ADT/ArrayRef.h"
14#include "llvm/ADT/DenseMap.h"
15#include "llvm/ADT/DenseMapInfo.h"
16#include "llvm/Support/Allocator.h"
17#include "llvm/Support/raw_ostream.h"
34enum class Atom :
unsigned {};
75 return static_cast<bool>(
Value);
83 using AtomNames = llvm::DenseMap<Atom, std::string>;
87 void print(llvm::raw_ostream &OS,
const AtomNames * =
nullptr)
const;
99 static unsigned numOperands(
Kind K) {
112 llvm_unreachable(
"Unhandled Formula::Kind enum");
122 return OS << 'V' << static_cast<unsigned>(A);
131template <>
struct DenseMapInfo<
clang::dataflow::Atom> {
138 return DenseMapInfo<Underlying>::getHashValue(
Underlying(Val));
Forward-declares and imports various common LLVM datatypes that clang wants to use unqualified.
Base class for all values computed by abstract interpretation.
Dataflow Directional Tag Classes.
Atom
Identifies an atomic boolean variable such as "V1".
llvm::raw_ostream & operator<<(llvm::raw_ostream &OS, Atom A)
uint32_t Literal
Literals are represented as positive integers.
YAML serialization mapping.
static bool isEqual(const Atom &LHS, const Atom &RHS)
static unsigned getHashValue(const Atom &Val)
std::underlying_type_t< Atom > Underlying
static Atom getTombstoneKey()
static Atom getEmptyKey()