1//== llvm/CodeGen/GlobalISel/InstructionSelect.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/// \file This file describes the interface of the MachineFunctionPass
9/// responsible for selecting (possibly generic) machine instructions to
10/// target-specific instructions.
11//===----------------------------------------------------------------------===//
12
13#ifndef LLVM_CODEGEN_GLOBALISEL_INSTRUCTIONSELECT_H
14#define LLVM_CODEGEN_GLOBALISEL_INSTRUCTIONSELECT_H
15
16#include "llvm/ADT/StringRef.h"
17#include "llvm/CodeGen/MachineFunction.h"
18#include "llvm/CodeGen/MachineFunctionPass.h"
19#include "llvm/Support/CodeGen.h"
20
21namespace llvm {
22
23class BlockFrequencyInfo;
24class ProfileSummaryInfo;
25
26/// This pass is responsible for selecting generic machine instructions to
27/// target-specific instructions. It relies on the InstructionSelector provided
28/// by the target.
29/// Selection is done by examining blocks in post-order, and instructions in
30/// reverse order.
31///
32/// \post for all inst in MF: not isPreISelGenericOpcode(inst.opcode)
33class InstructionSelect : public MachineFunctionPass {
34public:
35 static char ID;
36 StringRef getPassName() const override { return "InstructionSelect"; }
37
38 void getAnalysisUsage(AnalysisUsage &AU) const override;
39
40 MachineFunctionProperties getRequiredProperties() const override {
41 return MachineFunctionProperties()
42 .set(MachineFunctionProperties::Property::IsSSA)
43 .set(MachineFunctionProperties::Property::Legalized)
44 .set(MachineFunctionProperties::Property::RegBankSelected);
45 }
46
47 MachineFunctionProperties getSetProperties() const override {
48 return MachineFunctionProperties().set(
49 MachineFunctionProperties::Property::Selected);
50 }
51
52 InstructionSelect(CodeGenOptLevel OL);
53 InstructionSelect();
54
55 bool runOnMachineFunction(MachineFunction &MF) override;
56
57protected:
58 BlockFrequencyInfo *BFI = nullptr;
59 ProfileSummaryInfo *PSI = nullptr;
60
61 CodeGenOptLevel OptLevel = CodeGenOptLevel::None;
62};
63} // End namespace llvm.
64
65#endif
66

source code of llvm/include/llvm/CodeGen/GlobalISel/InstructionSelect.h