BlockCounter.h revision 5a4f98ff943e6a501b0fe47ade007c9bbf96cb88
18e49dd6e7e73b275a74338a5127a524f0765303cTed Kremenek//==- GRBlockCounter.h - ADT for counting block visits -------------*- C++ -*-// 21eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump// 38e49dd6e7e73b275a74338a5127a524f0765303cTed Kremenek// The LLVM Compiler Infrastructure 48e49dd6e7e73b275a74338a5127a524f0765303cTed Kremenek// 58e49dd6e7e73b275a74338a5127a524f0765303cTed Kremenek// This file is distributed under the University of Illinois Open Source 68e49dd6e7e73b275a74338a5127a524f0765303cTed Kremenek// License. See LICENSE.TXT for details. 78e49dd6e7e73b275a74338a5127a524f0765303cTed Kremenek// 88e49dd6e7e73b275a74338a5127a524f0765303cTed Kremenek//===----------------------------------------------------------------------===// 98e49dd6e7e73b275a74338a5127a524f0765303cTed Kremenek// 108e49dd6e7e73b275a74338a5127a524f0765303cTed Kremenek// This file defines GRBlockCounter, an abstract data type used to count 118e49dd6e7e73b275a74338a5127a524f0765303cTed Kremenek// the number of times a given block has been visited along a path 124d4dd85923ecfc9c38ac0e94fb2602e1cce4406bTed Kremenek// analyzed by GRCoreEngine. 138e49dd6e7e73b275a74338a5127a524f0765303cTed Kremenek// 148e49dd6e7e73b275a74338a5127a524f0765303cTed Kremenek//===----------------------------------------------------------------------===// 158e49dd6e7e73b275a74338a5127a524f0765303cTed Kremenek 165a4f98ff943e6a501b0fe47ade007c9bbf96cb88Argyrios Kyrtzidis#ifndef LLVM_CLANG_GR_GRBLOCKCOUNTER 175a4f98ff943e6a501b0fe47ade007c9bbf96cb88Argyrios Kyrtzidis#define LLVM_CLANG_GR_GRBLOCKCOUNTER 188e49dd6e7e73b275a74338a5127a524f0765303cTed Kremenek 198e49dd6e7e73b275a74338a5127a524f0765303cTed Kremeneknamespace llvm { 208e49dd6e7e73b275a74338a5127a524f0765303cTed Kremenek class BumpPtrAllocator; 218e49dd6e7e73b275a74338a5127a524f0765303cTed Kremenek} 228e49dd6e7e73b275a74338a5127a524f0765303cTed Kremenek 238e49dd6e7e73b275a74338a5127a524f0765303cTed Kremeneknamespace clang { 248e49dd6e7e73b275a74338a5127a524f0765303cTed Kremenek 25d9e0c0fc47d5881a609ec34372d554e3652db66cZhongxing Xuclass StackFrameContext; 26d9e0c0fc47d5881a609ec34372d554e3652db66cZhongxing Xu 275a4f98ff943e6a501b0fe47ade007c9bbf96cb88Argyrios Kyrtzidisnamespace GR { 285a4f98ff943e6a501b0fe47ade007c9bbf96cb88Argyrios Kyrtzidis 298e49dd6e7e73b275a74338a5127a524f0765303cTed Kremenekclass GRBlockCounter { 308e49dd6e7e73b275a74338a5127a524f0765303cTed Kremenek void* Data; 311eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 321eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump GRBlockCounter(void* D) : Data(D) {} 338e49dd6e7e73b275a74338a5127a524f0765303cTed Kremenek 348e49dd6e7e73b275a74338a5127a524f0765303cTed Kremenekpublic: 358e49dd6e7e73b275a74338a5127a524f0765303cTed Kremenek GRBlockCounter() : Data(0) {} 361eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 37d9e0c0fc47d5881a609ec34372d554e3652db66cZhongxing Xu unsigned getNumVisited(const StackFrameContext *CallSite, 38d9e0c0fc47d5881a609ec34372d554e3652db66cZhongxing Xu unsigned BlockID) const; 391eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 408e49dd6e7e73b275a74338a5127a524f0765303cTed Kremenek class Factory { 418e49dd6e7e73b275a74338a5127a524f0765303cTed Kremenek void* F; 428e49dd6e7e73b275a74338a5127a524f0765303cTed Kremenek public: 438e49dd6e7e73b275a74338a5127a524f0765303cTed Kremenek Factory(llvm::BumpPtrAllocator& Alloc); 448e49dd6e7e73b275a74338a5127a524f0765303cTed Kremenek ~Factory(); 451eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 468e49dd6e7e73b275a74338a5127a524f0765303cTed Kremenek GRBlockCounter GetEmptyCounter(); 47d9e0c0fc47d5881a609ec34372d554e3652db66cZhongxing Xu GRBlockCounter IncrementCount(GRBlockCounter BC, 48d9e0c0fc47d5881a609ec34372d554e3652db66cZhongxing Xu const StackFrameContext *CallSite, 49d9e0c0fc47d5881a609ec34372d554e3652db66cZhongxing Xu unsigned BlockID); 508e49dd6e7e73b275a74338a5127a524f0765303cTed Kremenek }; 511eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 528e49dd6e7e73b275a74338a5127a524f0765303cTed Kremenek friend class Factory; 538e49dd6e7e73b275a74338a5127a524f0765303cTed Kremenek}; 548e49dd6e7e73b275a74338a5127a524f0765303cTed Kremenek 555a4f98ff943e6a501b0fe47ade007c9bbf96cb88Argyrios Kyrtzidis} // end GR namespace 565a4f98ff943e6a501b0fe47ade007c9bbf96cb88Argyrios Kyrtzidis 578e49dd6e7e73b275a74338a5127a524f0765303cTed Kremenek} // end clang namespace 581eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 598e49dd6e7e73b275a74338a5127a524f0765303cTed Kremenek#endif 60