//===---- MachineOutliner.h - Outliner data structures ------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// /// /// \file /// Contains all data structures shared between the outliner implemented in /// MachineOutliner.cpp and target implementations of the outliner. /// //===----------------------------------------------------------------------===// #ifndef LLVM_CODEGEN_MACHINEOUTLINER_H #define LLVM_CODEGEN_MACHINEOUTLINER_H #include "llvm/CodeGen/LiveRegUnits.h" #include "llvm/CodeGen/MachineFunction.h" #include "llvm/CodeGen/MachineRegisterInfo.h" #include "llvm/CodeGen/MachineStableHash.h" #include <initializer_list> namespace llvm { namespace outliner { /// Represents how an instruction should be mapped by the outliner. /// \p Legal instructions are those which are safe to outline. /// \p LegalTerminator instructions are safe to outline, but only as the /// last instruction in a sequence. /// \p Illegal instructions are those which cannot be outlined. /// \p Invisible instructions are instructions which can be outlined, but /// shouldn't actually impact the outlining result. enum InstrType { … }; /// An individual sequence of instructions to be replaced with a call to /// an outlined function. struct Candidate { … }; /// The information necessary to create an outlined function for some /// class of candidate. struct OutlinedFunction { … }; /// The information necessary to create an outlined function that is matched /// globally. struct GlobalOutlinedFunction : public OutlinedFunction { … }; } // namespace outliner } // namespace llvm #endif