SystemZSubtarget.h revision 36b56886974eae4f9c5ebc96befd3e7bfe5de338
11d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand//===-- SystemZSubtarget.h - SystemZ subtarget information -----*- C++ -*--===// 21d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand// 31d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand// The LLVM Compiler Infrastructure 41d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand// 51d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand// This file is distributed under the University of Illinois Open Source 61d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand// License. See LICENSE.TXT for details. 71d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand// 81d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand//===----------------------------------------------------------------------===// 91d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand// 101d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand// This file declares the SystemZ specific subclass of TargetSubtargetInfo. 111d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand// 121d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand//===----------------------------------------------------------------------===// 131d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand 141d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand#ifndef SYSTEMZSUBTARGET_H 151d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand#define SYSTEMZSUBTARGET_H 161d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand 171d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand#include "llvm/ADT/Triple.h" 181d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand#include "llvm/Target/TargetSubtargetInfo.h" 191d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand#include <string> 201d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand 211d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand#define GET_SUBTARGETINFO_HEADER 221d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand#include "SystemZGenSubtargetInfo.inc" 231d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand 241d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigandnamespace llvm { 251d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigandclass GlobalValue; 261d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigandclass StringRef; 271d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand 281d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigandclass SystemZSubtarget : public SystemZGenSubtargetInfo { 29354362524a72b3fa43a6c09380b7ae3b2380cbbaJuergen Ributzka virtual void anchor(); 30eddfaad1ef9a208a8a9ee23c26fac4d980caa99aRichard Sandifordprotected: 31eddfaad1ef9a208a8a9ee23c26fac4d980caa99aRichard Sandiford bool HasDistinctOps; 32b284e1bf08d24deb20b7deab71fce6f3034cc89aRichard Sandiford bool HasLoadStoreOnCond; 33f3068d02e5f55d7e69134c8f14aa21c4b9fde91aRichard Sandiford bool HasHighWord; 34d954716e7567282ff6f3d25b4f404bae006eed04Richard Sandiford bool HasFPExtension; 3536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines bool HasFastSerialization; 3636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines bool HasInterlockedAccess1; 37eddfaad1ef9a208a8a9ee23c26fac4d980caa99aRichard Sandiford 381d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigandprivate: 391d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand Triple TargetTriple; 401d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand 411d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigandpublic: 421d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand SystemZSubtarget(const std::string &TT, const std::string &CPU, 431d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand const std::string &FS); 441d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand 45349baa60393c637f479ee31b25c65555b095a2efRichard Sandiford // This is important for reducing register pressure in vector code. 4636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines bool useAA() const override { return true; } 47349baa60393c637f479ee31b25c65555b095a2efRichard Sandiford 481d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand // Automatically generated by tblgen. 491d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand void ParseSubtargetFeatures(StringRef CPU, StringRef FS); 501d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand 51eddfaad1ef9a208a8a9ee23c26fac4d980caa99aRichard Sandiford // Return true if the target has the distinct-operands facility. 52eddfaad1ef9a208a8a9ee23c26fac4d980caa99aRichard Sandiford bool hasDistinctOps() const { return HasDistinctOps; } 53eddfaad1ef9a208a8a9ee23c26fac4d980caa99aRichard Sandiford 54b284e1bf08d24deb20b7deab71fce6f3034cc89aRichard Sandiford // Return true if the target has the load/store-on-condition facility. 55b284e1bf08d24deb20b7deab71fce6f3034cc89aRichard Sandiford bool hasLoadStoreOnCond() const { return HasLoadStoreOnCond; } 56b284e1bf08d24deb20b7deab71fce6f3034cc89aRichard Sandiford 57f3068d02e5f55d7e69134c8f14aa21c4b9fde91aRichard Sandiford // Return true if the target has the high-word facility. 58f3068d02e5f55d7e69134c8f14aa21c4b9fde91aRichard Sandiford bool hasHighWord() const { return HasHighWord; } 59f3068d02e5f55d7e69134c8f14aa21c4b9fde91aRichard Sandiford 60d954716e7567282ff6f3d25b4f404bae006eed04Richard Sandiford // Return true if the target has the floating-point extension facility. 61d954716e7567282ff6f3d25b4f404bae006eed04Richard Sandiford bool hasFPExtension() const { return HasFPExtension; } 62d954716e7567282ff6f3d25b4f404bae006eed04Richard Sandiford 6336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // Return true if the target has the fast-serialization facility. 6436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines bool hasFastSerialization() const { return HasFastSerialization; } 6536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 6636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // Return true if the target has interlocked-access facility 1. 6736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines bool hasInterlockedAccess1() const { return HasInterlockedAccess1; } 6836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 691d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand // Return true if GV can be accessed using LARL for reloc model RM 701d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand // and code model CM. 711d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand bool isPC32DBLSymbol(const GlobalValue *GV, Reloc::Model RM, 721d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand CodeModel::Model CM) const; 731d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand 741d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand bool isTargetELF() const { return TargetTriple.isOSBinFormatELF(); } 751d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand}; 761d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand} // end namespace llvm 771d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand 781d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand#endif 79