//===-- llvm/CodeGen/MachineOperand.h - MachineOperand class ----*- 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 // //===----------------------------------------------------------------------===// // // This file contains the declaration of the MachineOperand class. // //===----------------------------------------------------------------------===// #ifndef LLVM_CODEGEN_MACHINEOPERAND_H #define LLVM_CODEGEN_MACHINEOPERAND_H #include "llvm/ADT/DenseMapInfo.h" #include "llvm/CodeGen/Register.h" #include "llvm/IR/Intrinsics.h" #include <cassert> namespace llvm { class LLT; class BlockAddress; class Constant; class ConstantFP; class ConstantInt; class GlobalValue; class MachineBasicBlock; class MachineInstr; class MachineRegisterInfo; class MCCFIInstruction; class MDNode; class ModuleSlotTracker; class TargetIntrinsicInfo; class TargetRegisterInfo; class hash_code; class raw_ostream; class MCSymbol; /// MachineOperand class - Representation of each machine instruction operand. /// /// This class isn't a POD type because it has a private constructor, but its /// destructor must be trivial. Functions like MachineInstr::addOperand(), /// MachineRegisterInfo::moveOperands(), and MF::DeleteMachineInstr() depend on /// not having to call the MachineOperand destructor. /// class MachineOperand { … }; template <> struct DenseMapInfo<MachineOperand> { … }; inline raw_ostream &operator<<(raw_ostream &OS, const MachineOperand &MO) { … } // See friend declaration above. This additional declaration is required in // order to compile LLVM with IBM xlC compiler. hash_code hash_value(const MachineOperand &MO); } // namespace llvm #endif