1283625Sdim//===-- BPFSubtarget.h - Define Subtarget for the BPF -----------*- C++ -*-===//
2283625Sdim//
3283625Sdim//                     The LLVM Compiler Infrastructure
4283625Sdim//
5283625Sdim// This file is distributed under the University of Illinois Open Source
6283625Sdim// License. See LICENSE.TXT for details.
7283625Sdim//
8283625Sdim//===----------------------------------------------------------------------===//
9283625Sdim//
10283625Sdim// This file declares the BPF specific subclass of TargetSubtargetInfo.
11283625Sdim//
12283625Sdim//===----------------------------------------------------------------------===//
13283625Sdim
14283625Sdim#ifndef LLVM_LIB_TARGET_BPF_BPFSUBTARGET_H
15283625Sdim#define LLVM_LIB_TARGET_BPF_BPFSUBTARGET_H
16283625Sdim
17283625Sdim#include "BPFFrameLowering.h"
18283625Sdim#include "BPFISelLowering.h"
19283625Sdim#include "BPFInstrInfo.h"
20283625Sdim#include "llvm/Target/TargetSelectionDAGInfo.h"
21283625Sdim#include "llvm/IR/DataLayout.h"
22283625Sdim#include "llvm/Target/TargetMachine.h"
23283625Sdim#include "llvm/Target/TargetSubtargetInfo.h"
24283625Sdim
25283625Sdim#define GET_SUBTARGETINFO_HEADER
26283625Sdim#include "BPFGenSubtargetInfo.inc"
27283625Sdim
28283625Sdimnamespace llvm {
29283625Sdimclass StringRef;
30283625Sdim
31283625Sdimclass BPFSubtarget : public BPFGenSubtargetInfo {
32283625Sdim  virtual void anchor();
33283625Sdim  BPFInstrInfo InstrInfo;
34283625Sdim  BPFFrameLowering FrameLowering;
35283625Sdim  BPFTargetLowering TLInfo;
36283625Sdim  TargetSelectionDAGInfo TSInfo;
37283625Sdim
38283625Sdimpublic:
39283625Sdim  // This constructor initializes the data members to match that
40283625Sdim  // of the specified triple.
41284734Sdim  BPFSubtarget(const Triple &TT, const std::string &CPU, const std::string &FS,
42284734Sdim               const TargetMachine &TM);
43283625Sdim
44283625Sdim  // ParseSubtargetFeatures - Parses features string setting specified
45283625Sdim  // subtarget options.  Definition of function is auto generated by tblgen.
46283625Sdim  void ParseSubtargetFeatures(StringRef CPU, StringRef FS);
47283625Sdim
48283625Sdim  const BPFInstrInfo *getInstrInfo() const override { return &InstrInfo; }
49283625Sdim  const BPFFrameLowering *getFrameLowering() const override {
50283625Sdim    return &FrameLowering;
51283625Sdim  }
52283625Sdim  const BPFTargetLowering *getTargetLowering() const override {
53283625Sdim    return &TLInfo;
54283625Sdim  }
55283625Sdim  const TargetSelectionDAGInfo *getSelectionDAGInfo() const override {
56283625Sdim    return &TSInfo;
57283625Sdim  }
58283625Sdim  const TargetRegisterInfo *getRegisterInfo() const override {
59283625Sdim    return &InstrInfo.getRegisterInfo();
60283625Sdim  }
61283625Sdim};
62285181Sdim} // End llvm namespace
63283625Sdim
64283625Sdim#endif
65