1480093f4SDimitry Andric //===-- VESubtarget.h - Define Subtarget for the VE -------------*- C++ -*-===// 2480093f4SDimitry Andric // 3480093f4SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4480093f4SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 5480093f4SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6480093f4SDimitry Andric // 7480093f4SDimitry Andric //===----------------------------------------------------------------------===// 8480093f4SDimitry Andric // 9480093f4SDimitry Andric // This file declares the VE specific subclass of TargetSubtargetInfo. 10480093f4SDimitry Andric // 11480093f4SDimitry Andric //===----------------------------------------------------------------------===// 12480093f4SDimitry Andric 13480093f4SDimitry Andric #ifndef LLVM_LIB_TARGET_VE_VESUBTARGET_H 14480093f4SDimitry Andric #define LLVM_LIB_TARGET_VE_VESUBTARGET_H 15480093f4SDimitry Andric 16480093f4SDimitry Andric #include "VEFrameLowering.h" 17480093f4SDimitry Andric #include "VEISelLowering.h" 18480093f4SDimitry Andric #include "VEInstrInfo.h" 19480093f4SDimitry Andric #include "llvm/CodeGen/SelectionDAGTargetInfo.h" 20480093f4SDimitry Andric #include "llvm/CodeGen/TargetFrameLowering.h" 21480093f4SDimitry Andric #include "llvm/CodeGen/TargetSubtargetInfo.h" 22480093f4SDimitry Andric #include "llvm/IR/DataLayout.h" 23480093f4SDimitry Andric #include <string> 24480093f4SDimitry Andric 25480093f4SDimitry Andric #define GET_SUBTARGETINFO_HEADER 26480093f4SDimitry Andric #include "VEGenSubtargetInfo.inc" 27480093f4SDimitry Andric 28480093f4SDimitry Andric namespace llvm { 29480093f4SDimitry Andric class StringRef; 30480093f4SDimitry Andric 31480093f4SDimitry Andric class VESubtarget : public VEGenSubtargetInfo { 32480093f4SDimitry Andric Triple TargetTriple; 33480093f4SDimitry Andric virtual void anchor(); 34480093f4SDimitry Andric 35480093f4SDimitry Andric VEInstrInfo InstrInfo; 36480093f4SDimitry Andric VETargetLowering TLInfo; 37480093f4SDimitry Andric SelectionDAGTargetInfo TSInfo; 38480093f4SDimitry Andric VEFrameLowering FrameLowering; 39480093f4SDimitry Andric 40480093f4SDimitry Andric public: 41480093f4SDimitry Andric VESubtarget(const Triple &TT, const std::string &CPU, const std::string &FS, 42480093f4SDimitry Andric const TargetMachine &TM); 43480093f4SDimitry Andric 44480093f4SDimitry Andric const VEInstrInfo *getInstrInfo() const override { return &InstrInfo; } 45*5ffd83dbSDimitry Andric const VEFrameLowering *getFrameLowering() const override { 46480093f4SDimitry Andric return &FrameLowering; 47480093f4SDimitry Andric } 48480093f4SDimitry Andric const VERegisterInfo *getRegisterInfo() const override { 49480093f4SDimitry Andric return &InstrInfo.getRegisterInfo(); 50480093f4SDimitry Andric } 51480093f4SDimitry Andric const VETargetLowering *getTargetLowering() const override { return &TLInfo; } 52480093f4SDimitry Andric const SelectionDAGTargetInfo *getSelectionDAGInfo() const override { 53480093f4SDimitry Andric return &TSInfo; 54480093f4SDimitry Andric } 55480093f4SDimitry Andric 56480093f4SDimitry Andric bool enableMachineScheduler() const override; 57480093f4SDimitry Andric 58480093f4SDimitry Andric /// ParseSubtargetFeatures - Parses features string setting specified 59480093f4SDimitry Andric /// subtarget options. Definition of function is auto generated by tblgen. 60480093f4SDimitry Andric void ParseSubtargetFeatures(StringRef CPU, StringRef FS); 61480093f4SDimitry Andric VESubtarget &initializeSubtargetDependencies(StringRef CPU, StringRef FS); 62480093f4SDimitry Andric 63480093f4SDimitry Andric /// Given a actual stack size as determined by FrameInfo, this function 64480093f4SDimitry Andric /// returns adjusted framesize which includes space for register window 65480093f4SDimitry Andric /// spills and arguments. 66480093f4SDimitry Andric int getAdjustedFrameSize(int stackSize) const; 67480093f4SDimitry Andric 68480093f4SDimitry Andric bool isTargetLinux() const { return TargetTriple.isOSLinux(); } 69480093f4SDimitry Andric }; 70480093f4SDimitry Andric 71480093f4SDimitry Andric } // namespace llvm 72480093f4SDimitry Andric 73480093f4SDimitry Andric #endif 74