LLVM 22.0.0git
InstructionSelector.h
Go to the documentation of this file.
1//===- llvm/CodeGen/GlobalISel/InstructionSelector.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/// \file This file declares the API for the instruction selector.
10//
11//===----------------------------------------------------------------------===//
12
13#ifndef LLVM_CODEGEN_GLOBALISEL_INSTRUCTIONSELECTOR_H
14#define LLVM_CODEGEN_GLOBALISEL_INSTRUCTIONSELECTOR_H
15
18
19namespace llvm {
21
23public:
25
26 /// Select the (possibly generic) instruction \p I to only use target-specific
27 /// opcodes. It is OK to insert multiple instructions, but they cannot be
28 /// generic pre-isel instructions.
29 ///
30 /// \returns whether selection succeeded.
31 /// \pre I.getParent() && I.getParent()->getParent()
32 /// \post
33 /// if returns true:
34 /// for I in all mutated/inserted instructions:
35 /// !isPreISelGenericOpcode(I.getOpcode())
36 virtual bool select(MachineInstr &I) = 0;
37
39
40 /// Note: InstructionSelect does not track changed instructions.
41 /// changingInstr() and changedInstr() will never be called on these
42 /// observers.
44};
45} // namespace llvm
46
47#endif
#define LLVM_ABI
Definition Compiler.h:213
#define I(x, y, z)
Definition MD5.cpp:57
Simple wrapper observer that takes several observers, and calls each one for each event.
GISelObserverWrapper * AllObservers
Note: InstructionSelect does not track changed instructions.
virtual bool select(MachineInstr &I)=0
Select the (possibly generic) instruction I to only use target-specific opcodes.
MachineOptimizationRemarkEmitter * MORE
Representation of each machine instruction.
This is an optimization pass for GlobalISel generic memory operations.