16#include "llvm/ADT/ImmutableMap.h"
32 return (CallSite == RHS.CallSite) && (
BlockID == RHS.BlockID);
35 bool operator<(
const CountKey &RHS)
const {
36 return std::tie(CallSite, BlockID) < std::tie(RHS.CallSite, RHS.BlockID);
39 void Profile(llvm::FoldingSetNodeID &ID)
const {
40 ID.AddPointer(CallSite);
41 ID.AddInteger(BlockID);
47typedef llvm::ImmutableMap<CountKey, unsigned>
CountMap;
50 return CountMap(
static_cast<CountMap::TreeTy*
>(
D));
54 return *
static_cast<CountMap::Factory*
>(F);
58 unsigned BlockID)
const {
60 CountMap::data_type*
T = M.lookup(CountKey(CallSite, BlockID));
65 F =
new CountMap::Factory(Alloc);
69 delete static_cast<CountMap::Factory*
>(F);
77 CountKey(CallSite, BlockID),
static CountMap GetMap(void *D)
llvm::ImmutableMap< CountKey, unsigned > CountMap
static CountMap::Factory & GetFactory(void *F)
It represents a stack frame of the call stack (based on CallEvent).
BlockCounter IncrementCount(BlockCounter BC, const StackFrameContext *CallSite, unsigned BlockID)
Factory(llvm::BumpPtrAllocator &Alloc)
BlockCounter GetEmptyCounter()
An abstract data type used to count the number of times a given block has been visited along a path a...
unsigned getNumVisited(const StackFrameContext *CallSite, unsigned BlockID) const
BlockID
The various types of blocks that can occur within a API notes file.
The JSON file list parser is used to communicate input to InstallAPI.
bool operator==(const CallGraphNode::CallRecord &LHS, const CallGraphNode::CallRecord &RHS)
bool operator<(DeclarationName LHS, DeclarationName RHS)
Ordering on two declaration names.
const FunctionProtoType * T