xref: /freebsd/contrib/llvm-project/llvm/lib/Target/VE/VEInstrInfo.h (revision 480093f4440d54b30b3025afeac24b48f2ba7a2e)
1*480093f4SDimitry Andric //===-- VEInstrInfo.h - VE Instruction Information --------------*- C++ -*-===//
2*480093f4SDimitry Andric //
3*480093f4SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*480093f4SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
5*480093f4SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*480093f4SDimitry Andric //
7*480093f4SDimitry Andric //===----------------------------------------------------------------------===//
8*480093f4SDimitry Andric //
9*480093f4SDimitry Andric // This file contains the VE implementation of the TargetInstrInfo class.
10*480093f4SDimitry Andric //
11*480093f4SDimitry Andric //===----------------------------------------------------------------------===//
12*480093f4SDimitry Andric 
13*480093f4SDimitry Andric #ifndef LLVM_LIB_TARGET_VE_VEINSTRINFO_H
14*480093f4SDimitry Andric #define LLVM_LIB_TARGET_VE_VEINSTRINFO_H
15*480093f4SDimitry Andric 
16*480093f4SDimitry Andric #include "VERegisterInfo.h"
17*480093f4SDimitry Andric #include "llvm/CodeGen/TargetInstrInfo.h"
18*480093f4SDimitry Andric 
19*480093f4SDimitry Andric #define GET_INSTRINFO_HEADER
20*480093f4SDimitry Andric #include "VEGenInstrInfo.inc"
21*480093f4SDimitry Andric 
22*480093f4SDimitry Andric namespace llvm {
23*480093f4SDimitry Andric 
24*480093f4SDimitry Andric class VESubtarget;
25*480093f4SDimitry Andric 
26*480093f4SDimitry Andric class VEInstrInfo : public VEGenInstrInfo {
27*480093f4SDimitry Andric   const VERegisterInfo RI;
28*480093f4SDimitry Andric   const VESubtarget &Subtarget;
29*480093f4SDimitry Andric   virtual void anchor();
30*480093f4SDimitry Andric 
31*480093f4SDimitry Andric public:
32*480093f4SDimitry Andric   explicit VEInstrInfo(VESubtarget &ST);
33*480093f4SDimitry Andric 
34*480093f4SDimitry Andric   /// getRegisterInfo - TargetInstrInfo is a superset of MRegister info.  As
35*480093f4SDimitry Andric   /// such, whenever a client has an instance of instruction info, it should
36*480093f4SDimitry Andric   /// always be able to get register info as well (through this method).
37*480093f4SDimitry Andric   ///
38*480093f4SDimitry Andric   const VERegisterInfo &getRegisterInfo() const { return RI; }
39*480093f4SDimitry Andric 
40*480093f4SDimitry Andric   // Lower pseudo instructions after register allocation.
41*480093f4SDimitry Andric   bool expandPostRAPseudo(MachineInstr &MI) const override;
42*480093f4SDimitry Andric 
43*480093f4SDimitry Andric   bool expandExtendStackPseudo(MachineInstr &MI) const;
44*480093f4SDimitry Andric };
45*480093f4SDimitry Andric 
46*480093f4SDimitry Andric } // namespace llvm
47*480093f4SDimitry Andric 
48*480093f4SDimitry Andric #endif
49