Coverage Report

Created: 2019-07-24 05:18

/Users/buildslave/jenkins/workspace/clang-stage2-coverage-R/llvm/include/llvm/CodeGen/SchedulerRegistry.h
Line
Count
Source
1
//===- llvm/CodeGen/SchedulerRegistry.h -------------------------*- 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
// This file contains the implementation for instruction scheduler function
10
// pass registry (RegisterScheduler).
11
//
12
//===----------------------------------------------------------------------===//
13
14
#ifndef LLVM_CODEGEN_SCHEDULERREGISTRY_H
15
#define LLVM_CODEGEN_SCHEDULERREGISTRY_H
16
17
#include "llvm/CodeGen/MachinePassRegistry.h"
18
#include "llvm/Support/CodeGen.h"
19
20
namespace llvm {
21
22
//===----------------------------------------------------------------------===//
23
///
24
/// RegisterScheduler class - Track the registration of instruction schedulers.
25
///
26
//===----------------------------------------------------------------------===//
27
28
class ScheduleDAGSDNodes;
29
class SelectionDAGISel;
30
31
class RegisterScheduler
32
    : public MachinePassRegistryNode<
33
          ScheduleDAGSDNodes *(*)(SelectionDAGISel *, CodeGenOpt::Level)> {
34
public:
35
  using FunctionPassCtor = ScheduleDAGSDNodes *(*)(SelectionDAGISel*,
36
                                                   CodeGenOpt::Level);
37
38
  static MachinePassRegistry<FunctionPassCtor> Registry;
39
40
  RegisterScheduler(const char *N, const char *D, FunctionPassCtor C)
41
669k
      : MachinePassRegistryNode(N, D, C) {
42
669k
    Registry.Add(this);
43
669k
  }
44
669k
  ~RegisterScheduler() { Registry.Remove(this); }
45
46
47
  // Accessors.
48
566k
  RegisterScheduler *getNext() const {
49
566k
    return (RegisterScheduler *)MachinePassRegistryNode::getNext();
50
566k
  }
51
52
103k
  static RegisterScheduler *getList() {
53
103k
    return (RegisterScheduler *)Registry.getList();
54
103k
  }
55
56
206k
  static void setListener(MachinePassRegistryListener<FunctionPassCtor> *L) {
57
206k
    Registry.setListener(L);
58
206k
  }
59
};
60
61
/// createBURRListDAGScheduler - This creates a bottom up register usage
62
/// reduction list scheduler.
63
ScheduleDAGSDNodes *createBURRListDAGScheduler(SelectionDAGISel *IS,
64
                                               CodeGenOpt::Level OptLevel);
65
66
/// createBURRListDAGScheduler - This creates a bottom up list scheduler that
67
/// schedules nodes in source code order when possible.
68
ScheduleDAGSDNodes *createSourceListDAGScheduler(SelectionDAGISel *IS,
69
                                                 CodeGenOpt::Level OptLevel);
70
71
/// createHybridListDAGScheduler - This creates a bottom up register pressure
72
/// aware list scheduler that make use of latency information to avoid stalls
73
/// for long latency instructions in low register pressure mode. In high
74
/// register pressure mode it schedules to reduce register pressure.
75
ScheduleDAGSDNodes *createHybridListDAGScheduler(SelectionDAGISel *IS,
76
                                                 CodeGenOpt::Level);
77
78
/// createILPListDAGScheduler - This creates a bottom up register pressure
79
/// aware list scheduler that tries to increase instruction level parallelism
80
/// in low register pressure mode. In high register pressure mode it schedules
81
/// to reduce register pressure.
82
ScheduleDAGSDNodes *createILPListDAGScheduler(SelectionDAGISel *IS,
83
                                              CodeGenOpt::Level);
84
85
/// createFastDAGScheduler - This creates a "fast" scheduler.
86
///
87
ScheduleDAGSDNodes *createFastDAGScheduler(SelectionDAGISel *IS,
88
                                           CodeGenOpt::Level OptLevel);
89
90
/// createVLIWDAGScheduler - Scheduler for VLIW targets. This creates top down
91
/// DFA driven list scheduler with clustering heuristic to control
92
/// register pressure.
93
ScheduleDAGSDNodes *createVLIWDAGScheduler(SelectionDAGISel *IS,
94
                                           CodeGenOpt::Level OptLevel);
95
/// createDefaultScheduler - This creates an instruction scheduler appropriate
96
/// for the target.
97
ScheduleDAGSDNodes *createDefaultScheduler(SelectionDAGISel *IS,
98
                                           CodeGenOpt::Level OptLevel);
99
100
/// createDAGLinearizer - This creates a "no-scheduling" scheduler which
101
/// linearize the DAG using topological order.
102
ScheduleDAGSDNodes *createDAGLinearizer(SelectionDAGISel *IS,
103
                                        CodeGenOpt::Level OptLevel);
104
105
} // end namespace llvm
106
107
#endif // LLVM_CODEGEN_SCHEDULERREGISTRY_H