Current Path : /usr/src/contrib/llvm/lib/ExecutionEngine/ |
FreeBSD hs32.drive.ne.jp 9.1-RELEASE FreeBSD 9.1-RELEASE #1: Wed Jan 14 12:18:08 JST 2015 root@hs32.drive.ne.jp:/sys/amd64/compile/hs32 amd64 |
Current File : //usr/src/contrib/llvm/lib/ExecutionEngine/EventListenerCommon.h |
//===-- JIT.h - Abstract Execution Engine Interface -------------*- C++ -*-===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // Common functionality for JITEventListener implementations // //===----------------------------------------------------------------------===// #ifndef EVENT_LISTENER_COMMON_H #define EVENT_LISTENER_COMMON_H #include "llvm/Metadata.h" #include "llvm/Analysis/DebugInfo.h" #include "llvm/ADT/DenseMap.h" #include "llvm/Support/ValueHandle.h" #include "llvm/Support/Path.h" namespace llvm { namespace jitprofiling { class FilenameCache { // Holds the filename of each Scope, so that we can pass a null-terminated // string into oprofile. Use an AssertingVH rather than a ValueMap because we // shouldn't be modifying any MDNodes while this map is alive. DenseMap<AssertingVH<MDNode>, std::string> Filenames; DenseMap<AssertingVH<MDNode>, std::string> Paths; public: const char *getFilename(MDNode *Scope) { std::string &Filename = Filenames[Scope]; if (Filename.empty()) { DIScope DIScope(Scope); Filename = DIScope.getFilename(); } return Filename.c_str(); } const char *getFullPath(MDNode *Scope) { std::string &P = Paths[Scope]; if (P.empty()) { DIScope DIScope(Scope); StringRef DirName = DIScope.getDirectory(); StringRef FileName = DIScope.getFilename(); SmallString<256> FullPath; if (DirName != "." && DirName != "") { FullPath = DirName; } if (FileName != "") { sys::path::append(FullPath, FileName); } P = FullPath.str(); } return P.c_str(); } }; } // namespace jitprofiling } // namespace llvm #endif //EVENT_LISTENER_COMMON_H