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 Andric inline unsigned succ_size(const MachineBasicBlock *BB) {
28bdd1243dSDimitry Andric   return BB->succ_size();
29bdd1243dSDimitry Andric }
pred_size(const MachineBasicBlock * BB)30bdd1243dSDimitry Andric inline unsigned pred_size(const MachineBasicBlock *BB) {
31bdd1243dSDimitry Andric   return BB->pred_size();
32bdd1243dSDimitry Andric }
instrs(const MachineBasicBlock & BB)33bdd1243dSDimitry Andric inline 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