1356843Sdim//===-- VESubtarget.h - Define Subtarget for the VE -------------*- C++ -*-===//
2356843Sdim//
3356843Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4356843Sdim// See https://llvm.org/LICENSE.txt for license information.
5356843Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6356843Sdim//
7356843Sdim//===----------------------------------------------------------------------===//
8356843Sdim//
9356843Sdim// This file declares the VE specific subclass of TargetSubtargetInfo.
10356843Sdim//
11356843Sdim//===----------------------------------------------------------------------===//
12356843Sdim
13356843Sdim#ifndef LLVM_LIB_TARGET_VE_VESUBTARGET_H
14356843Sdim#define LLVM_LIB_TARGET_VE_VESUBTARGET_H
15356843Sdim
16356843Sdim#include "VEFrameLowering.h"
17356843Sdim#include "VEISelLowering.h"
18356843Sdim#include "VEInstrInfo.h"
19356843Sdim#include "llvm/CodeGen/SelectionDAGTargetInfo.h"
20356843Sdim#include "llvm/CodeGen/TargetFrameLowering.h"
21356843Sdim#include "llvm/CodeGen/TargetSubtargetInfo.h"
22356843Sdim#include "llvm/IR/DataLayout.h"
23356843Sdim#include <string>
24356843Sdim
25356843Sdim#define GET_SUBTARGETINFO_HEADER
26356843Sdim#include "VEGenSubtargetInfo.inc"
27356843Sdim
28356843Sdimnamespace llvm {
29356843Sdimclass StringRef;
30356843Sdim
31356843Sdimclass VESubtarget : public VEGenSubtargetInfo {
32356843Sdim  Triple TargetTriple;
33356843Sdim  virtual void anchor();
34356843Sdim
35356843Sdim  VEInstrInfo InstrInfo;
36356843Sdim  VETargetLowering TLInfo;
37356843Sdim  SelectionDAGTargetInfo TSInfo;
38356843Sdim  VEFrameLowering FrameLowering;
39356843Sdim
40356843Sdimpublic:
41356843Sdim  VESubtarget(const Triple &TT, const std::string &CPU, const std::string &FS,
42356843Sdim              const TargetMachine &TM);
43356843Sdim
44356843Sdim  const VEInstrInfo *getInstrInfo() const override { return &InstrInfo; }
45356843Sdim  const TargetFrameLowering *getFrameLowering() const override {
46356843Sdim    return &FrameLowering;
47356843Sdim  }
48356843Sdim  const VERegisterInfo *getRegisterInfo() const override {
49356843Sdim    return &InstrInfo.getRegisterInfo();
50356843Sdim  }
51356843Sdim  const VETargetLowering *getTargetLowering() const override { return &TLInfo; }
52356843Sdim  const SelectionDAGTargetInfo *getSelectionDAGInfo() const override {
53356843Sdim    return &TSInfo;
54356843Sdim  }
55356843Sdim
56356843Sdim  bool enableMachineScheduler() const override;
57356843Sdim
58356843Sdim  /// ParseSubtargetFeatures - Parses features string setting specified
59356843Sdim  /// subtarget options.  Definition of function is auto generated by tblgen.
60356843Sdim  void ParseSubtargetFeatures(StringRef CPU, StringRef FS);
61356843Sdim  VESubtarget &initializeSubtargetDependencies(StringRef CPU, StringRef FS);
62356843Sdim
63356843Sdim  /// Given a actual stack size as determined by FrameInfo, this function
64356843Sdim  /// returns adjusted framesize which includes space for register window
65356843Sdim  /// spills and arguments.
66356843Sdim  int getAdjustedFrameSize(int stackSize) const;
67356843Sdim
68356843Sdim  bool isTargetLinux() const { return TargetTriple.isOSLinux(); }
69356843Sdim};
70356843Sdim
71356843Sdim} // namespace llvm
72356843Sdim
73356843Sdim#endif
74