SystemZSubtarget.h revision 354362524a72b3fa43a6c09380b7ae3b2380cbba
1//===-- SystemZSubtarget.h - SystemZ subtarget information -----*- 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 SystemZ specific subclass of TargetSubtargetInfo. 11// 12//===----------------------------------------------------------------------===// 13 14#ifndef SYSTEMZSUBTARGET_H 15#define SYSTEMZSUBTARGET_H 16 17#include "llvm/ADT/Triple.h" 18#include "llvm/Target/TargetSubtargetInfo.h" 19#include <string> 20 21#define GET_SUBTARGETINFO_HEADER 22#include "SystemZGenSubtargetInfo.inc" 23 24namespace llvm { 25class GlobalValue; 26class StringRef; 27 28class SystemZSubtarget : public SystemZGenSubtargetInfo { 29 virtual void anchor(); 30protected: 31 bool HasDistinctOps; 32 bool HasLoadStoreOnCond; 33 bool HasHighWord; 34 bool HasFPExtension; 35 36private: 37 Triple TargetTriple; 38 39public: 40 SystemZSubtarget(const std::string &TT, const std::string &CPU, 41 const std::string &FS); 42 43 // This is important for reducing register pressure in vector code. 44 virtual bool useAA() const LLVM_OVERRIDE { return true; } 45 46 // Automatically generated by tblgen. 47 void ParseSubtargetFeatures(StringRef CPU, StringRef FS); 48 49 // Return true if the target has the distinct-operands facility. 50 bool hasDistinctOps() const { return HasDistinctOps; } 51 52 // Return true if the target has the load/store-on-condition facility. 53 bool hasLoadStoreOnCond() const { return HasLoadStoreOnCond; } 54 55 // Return true if the target has the high-word facility. 56 bool hasHighWord() const { return HasHighWord; } 57 58 // Return true if the target has the floating-point extension facility. 59 bool hasFPExtension() const { return HasFPExtension; } 60 61 // Return true if GV can be accessed using LARL for reloc model RM 62 // and code model CM. 63 bool isPC32DBLSymbol(const GlobalValue *GV, Reloc::Model RM, 64 CodeModel::Model CM) const; 65 66 bool isTargetELF() const { return TargetTriple.isOSBinFormatELF(); } 67}; 68} // end namespace llvm 69 70#endif 71