10eae32dcSDimitry Andric //===- MachineSSAContext.h --------------------------------------*- C++ -*-===// 20eae32dcSDimitry Andric // 30eae32dcSDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 40eae32dcSDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 50eae32dcSDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 60eae32dcSDimitry Andric // 70eae32dcSDimitry Andric //===----------------------------------------------------------------------===// 80eae32dcSDimitry Andric /// \file 90eae32dcSDimitry Andric /// 100eae32dcSDimitry Andric /// This file declares a specialization of the GenericSSAContext<X> 110eae32dcSDimitry Andric /// template class for Machine IR. 120eae32dcSDimitry Andric /// 130eae32dcSDimitry Andric //===----------------------------------------------------------------------===// 140eae32dcSDimitry Andric 150eae32dcSDimitry Andric #ifndef LLVM_CODEGEN_MACHINESSACONTEXT_H 160eae32dcSDimitry Andric #define LLVM_CODEGEN_MACHINESSACONTEXT_H 170eae32dcSDimitry Andric 18*5f757f3fSDimitry Andric #include "llvm/ADT/GenericSSAContext.h" 1981ad6265SDimitry Andric #include "llvm/CodeGen/MachineBasicBlock.h" 200eae32dcSDimitry Andric #include "llvm/Support/Printable.h" 210eae32dcSDimitry Andric 220eae32dcSDimitry Andric namespace llvm { 230eae32dcSDimitry Andric class MachineInstr; 240eae32dcSDimitry Andric class MachineFunction; 250eae32dcSDimitry Andric class Register; 260eae32dcSDimitry Andric succ_size(const MachineBasicBlock * BB)27bdd1243dSDimitry Andricinline unsigned succ_size(const MachineBasicBlock *BB) { 28bdd1243dSDimitry Andric return BB->succ_size(); 29bdd1243dSDimitry Andric } pred_size(const MachineBasicBlock * BB)30bdd1243dSDimitry Andricinline unsigned pred_size(const MachineBasicBlock *BB) { 31bdd1243dSDimitry Andric return BB->pred_size(); 32bdd1243dSDimitry Andric } instrs(const MachineBasicBlock & BB)33bdd1243dSDimitry Andricinline auto instrs(const MachineBasicBlock &BB) { return BB.instrs(); } 340eae32dcSDimitry Andric 35*5f757f3fSDimitry Andric template <> struct GenericSSATraits<MachineFunction> { 360eae32dcSDimitry Andric using BlockT = MachineBasicBlock; 370eae32dcSDimitry Andric using FunctionT = MachineFunction; 380eae32dcSDimitry Andric using InstructionT = MachineInstr; 390eae32dcSDimitry Andric using ValueRefT = Register; 40bdd1243dSDimitry Andric using ConstValueRefT = Register; 4106c3fb27SDimitry Andric using UseT = MachineOperand; 420eae32dcSDimitry Andric }; 430eae32dcSDimitry Andric 440eae32dcSDimitry Andric using MachineSSAContext = GenericSSAContext<MachineFunction>; 450eae32dcSDimitry Andric } // namespace llvm 460eae32dcSDimitry Andric 470eae32dcSDimitry Andric #endif // LLVM_CODEGEN_MACHINESSACONTEXT_H 48