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