1 | //===- Trace.cpp - Implementation of Trace class --------------------------===// |
2 | // |
3 | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
4 | // See https://llvm.org/LICENSE.txt for license information. |
5 | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
6 | // |
7 | //===----------------------------------------------------------------------===// |
8 | // |
9 | // This class represents a single trace of LLVM basic blocks. A trace is a |
10 | // single entry, multiple exit, region of code that is often hot. Trace-based |
11 | // optimizations treat traces almost like they are a large, strange, basic |
12 | // block: because the trace path is assumed to be hot, optimizations for the |
13 | // fall-through path are made at the expense of the non-fall-through paths. |
14 | // |
15 | //===----------------------------------------------------------------------===// |
16 | |
17 | #include "llvm/Analysis/Trace.h" |
18 | #include "llvm/Config/llvm-config.h" |
19 | #include "llvm/IR/BasicBlock.h" |
20 | #include "llvm/IR/Function.h" |
21 | #include "llvm/Support/Compiler.h" |
22 | #include "llvm/Support/Debug.h" |
23 | #include "llvm/Support/raw_ostream.h" |
24 | |
25 | using namespace llvm; |
26 | |
27 | Function *Trace::getFunction() const { |
28 | return getEntryBasicBlock()->getParent(); |
29 | } |
30 | |
31 | Module *Trace::getModule() const { |
32 | return getFunction()->getParent(); |
33 | } |
34 | |
35 | /// print - Write trace to output stream. |
36 | void Trace::print(raw_ostream &O) const { |
37 | Function *F = getFunction(); |
38 | O << "; Trace from function " << F->getName() << ", blocks:\n" ; |
39 | for (const_iterator i = begin(), e = end(); i != e; ++i) { |
40 | O << "; " ; |
41 | (*i)->printAsOperand(O, PrintType: true, M: getModule()); |
42 | O << "\n" ; |
43 | } |
44 | O << "; Trace parent function: \n" << *F; |
45 | } |
46 | |
47 | #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) |
48 | /// dump - Debugger convenience method; writes trace to standard error |
49 | /// output stream. |
50 | LLVM_DUMP_METHOD void Trace::dump() const { |
51 | print(dbgs()); |
52 | } |
53 | #endif |
54 | |