1//===- bolt/Passes/ReorderFunctions.h - Reorder functions -------*- C++ -*-===//
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#ifndef BOLT_PASSES_REORDER_FUNCTIONS_H
10#define BOLT_PASSES_REORDER_FUNCTIONS_H
11
12#include "bolt/Passes/BinaryFunctionCallGraph.h"
13#include "bolt/Passes/BinaryPasses.h"
14
15namespace llvm {
16namespace bolt {
17class Cluster;
18
19/// Modify function order for streaming based on hotness.
20class ReorderFunctions : public BinaryFunctionPass {
21 BinaryFunctionCallGraph Cg;
22
23 void reorder(BinaryContext &BC, std::vector<Cluster> &&Clusters,
24 std::map<uint64_t, BinaryFunction> &BFs);
25
26 void printStats(BinaryContext &BC, const std::vector<Cluster> &Clusters,
27 const std::vector<uint64_t> &FuncAddr);
28
29public:
30 enum ReorderType : char {
31 RT_NONE = 0,
32 RT_EXEC_COUNT,
33 RT_HFSORT,
34 RT_HFSORT_PLUS,
35 RT_CDSORT,
36 RT_PETTIS_HANSEN,
37 RT_RANDOM,
38 RT_USER
39 };
40
41 explicit ReorderFunctions(const cl::opt<bool> &PrintPass)
42 : BinaryFunctionPass(PrintPass) {}
43
44 const char *getName() const override { return "reorder-functions"; }
45 Error runOnFunctions(BinaryContext &BC) override;
46
47 static Error readFunctionOrderFile(std::vector<std::string> &FunctionNames);
48};
49
50} // namespace bolt
51} // namespace llvm
52
53#endif // BOLT_PASSES_REORDER_FUNCTIONS_H
54

source code of bolt/include/bolt/Passes/ReorderFunctions.h