1 //===-- BPFSubtarget.h - Define Subtarget for the BPF -----------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // This file declares the BPF specific subclass of TargetSubtargetInfo. 11 // 12 //===----------------------------------------------------------------------===// 13 14 #ifndef LLVM_LIB_TARGET_BPF_BPFSUBTARGET_H 15 #define LLVM_LIB_TARGET_BPF_BPFSUBTARGET_H 16 17 #include "BPFFrameLowering.h" 18 #include "BPFISelLowering.h" 19 #include "BPFInstrInfo.h" 20 #include "llvm/CodeGen/SelectionDAGTargetInfo.h" 21 #include "llvm/IR/DataLayout.h" 22 #include "llvm/Target/TargetMachine.h" 23 #include "llvm/Target/TargetSubtargetInfo.h" 24 25 #define GET_SUBTARGETINFO_HEADER 26 #include "BPFGenSubtargetInfo.inc" 27 28 namespace llvm { 29 class StringRef; 30 31 class BPFSubtarget : public BPFGenSubtargetInfo { 32 virtual void anchor(); 33 BPFInstrInfo InstrInfo; 34 BPFFrameLowering FrameLowering; 35 BPFTargetLowering TLInfo; 36 SelectionDAGTargetInfo TSInfo; 37 38 public: 39 // This constructor initializes the data members to match that 40 // of the specified triple. 41 BPFSubtarget(const Triple &TT, const std::string &CPU, const std::string &FS, 42 const TargetMachine &TM); 43 44 // ParseSubtargetFeatures - Parses features string setting specified 45 // subtarget options. Definition of function is auto generated by tblgen. 46 void ParseSubtargetFeatures(StringRef CPU, StringRef FS); 47 getInstrInfo()48 const BPFInstrInfo *getInstrInfo() const override { return &InstrInfo; } getFrameLowering()49 const BPFFrameLowering *getFrameLowering() const override { 50 return &FrameLowering; 51 } getTargetLowering()52 const BPFTargetLowering *getTargetLowering() const override { 53 return &TLInfo; 54 } getSelectionDAGInfo()55 const SelectionDAGTargetInfo *getSelectionDAGInfo() const override { 56 return &TSInfo; 57 } getRegisterInfo()58 const TargetRegisterInfo *getRegisterInfo() const override { 59 return &InstrInfo.getRegisterInfo(); 60 } 61 }; 62 } // End llvm namespace 63 64 #endif 65