xref: /llvm-project/llvm/lib/Target/DirectX/DirectXSubtarget.h (revision 2af61e620eeae6d248c37eee096200016bc102f9)
144a14a6aSChris Bieneman //===-- DirectXSubtarget.h - Define Subtarget for DirectX -------*- C++ -*-===//
244a14a6aSChris Bieneman //
344a14a6aSChris Bieneman // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
444a14a6aSChris Bieneman // See https://llvm.org/LICENSE.txt for license information.
544a14a6aSChris Bieneman // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
644a14a6aSChris Bieneman //
744a14a6aSChris Bieneman //===----------------------------------------------------------------------===//
844a14a6aSChris Bieneman //
944a14a6aSChris Bieneman // This file declares the DirectX specific subclass of TargetSubtargetInfo.
1044a14a6aSChris Bieneman //
1144a14a6aSChris Bieneman //===----------------------------------------------------------------------===//
1244a14a6aSChris Bieneman 
1344a14a6aSChris Bieneman #ifndef LLVM_DIRECTX_DIRECTXSUBTARGET_H
1444a14a6aSChris Bieneman #define LLVM_DIRECTX_DIRECTXSUBTARGET_H
1544a14a6aSChris Bieneman 
16*2af61e62SChris Bieneman #include "DirectXFrameLowering.h"
17*2af61e62SChris Bieneman #include "DirectXInstrInfo.h"
1844a14a6aSChris Bieneman #include "DirectXTargetLowering.h"
1944a14a6aSChris Bieneman #include "llvm/CodeGen/TargetSubtargetInfo.h"
2044a14a6aSChris Bieneman #include "llvm/IR/DataLayout.h"
2144a14a6aSChris Bieneman #include "llvm/Target/TargetMachine.h"
2244a14a6aSChris Bieneman 
2344a14a6aSChris Bieneman #define GET_SUBTARGETINFO_HEADER
2444a14a6aSChris Bieneman #include "DirectXGenSubtargetInfo.inc"
2544a14a6aSChris Bieneman 
2644a14a6aSChris Bieneman namespace llvm {
2744a14a6aSChris Bieneman 
2844a14a6aSChris Bieneman class DirectXTargetMachine;
2944a14a6aSChris Bieneman 
3044a14a6aSChris Bieneman class DirectXSubtarget : public DirectXGenSubtargetInfo {
31*2af61e62SChris Bieneman   DirectXFrameLowering FL;
3244a14a6aSChris Bieneman   DirectXTargetLowering TL;
33*2af61e62SChris Bieneman   DirectXInstrInfo InstrInfo;
34*2af61e62SChris Bieneman 
35*2af61e62SChris Bieneman   virtual void anchor(); // virtual anchor method
3644a14a6aSChris Bieneman 
3744a14a6aSChris Bieneman public:
3844a14a6aSChris Bieneman   DirectXSubtarget(const Triple &TT, StringRef CPU, StringRef FS,
3944a14a6aSChris Bieneman                    const DirectXTargetMachine &TM);
4044a14a6aSChris Bieneman 
4144a14a6aSChris Bieneman   /// Parses a subtarget feature string, setting appropriate options.
4244a14a6aSChris Bieneman   /// \note Definition of function is auto generated by `tblgen`.
4344a14a6aSChris Bieneman   void ParseSubtargetFeatures(StringRef CPU, StringRef TuneCPU, StringRef FS);
4444a14a6aSChris Bieneman 
getTargetLowering()4544a14a6aSChris Bieneman   const DirectXTargetLowering *getTargetLowering() const override {
4644a14a6aSChris Bieneman     return &TL;
4744a14a6aSChris Bieneman   }
48*2af61e62SChris Bieneman 
getFrameLowering()49*2af61e62SChris Bieneman   const DirectXFrameLowering *getFrameLowering() const override { return &FL; }
50*2af61e62SChris Bieneman 
getInstrInfo()51*2af61e62SChris Bieneman   const DirectXInstrInfo *getInstrInfo() const override { return &InstrInfo; }
5244a14a6aSChris Bieneman };
5344a14a6aSChris Bieneman 
5444a14a6aSChris Bieneman } // end namespace llvm
5544a14a6aSChris Bieneman 
5644a14a6aSChris Bieneman #endif // LLVM_DIRECTX_DIRECTXSUBTARGET_H
57