//===- trie-node.h - XRay Call Stack Data Structure -----------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file provides a data structure and routines for working with call stacks // of instrumented functions. // //===----------------------------------------------------------------------===// #ifndef LLVM_TOOLS_LLVM_XRAY_STACK_TRIE_H #define LLVM_TOOLS_LLVM_XRAY_STACK_TRIE_H #include <forward_list> #include <numeric> #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/STLExtras.h" #include "llvm/ADT/SmallVector.h" /// A type to represent a trie of invocations. It is useful to construct a /// graph of these nodes from reading an XRay trace, such that each function /// call can be placed in a larger context. /// /// The template parameter allows users of the template to attach their own /// data elements to each node in the invocation graph. template <typename AssociatedData> struct TrieNode { … }; /// Merges together two TrieNodes with like function ids, aggregating their /// callee lists and durations. The caller must provide storage where new merged /// nodes can be allocated in the form of a linked list. template <typename T, typename Callable> TrieNode<T> * mergeTrieNodes(const TrieNode<T> &Left, const TrieNode<T> &Right, /*Non-deduced pointer type for nullptr compatibility*/ std::remove_reference_t<TrieNode<T> *> NewParent, std::forward_list<TrieNode<T>> &NodeStore, Callable &&MergeCallable) { … } #endif // LLVM_TOOLS_LLVM_XRAY_STACK_TRIE_H