//===-- SystemZSubtarget.h - SystemZ subtarget information -----*- C++ -*--===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// This file declares the SystemZ specific subclass of TargetSubtargetInfo.
//
//===----------------------------------------------------------------------===//

#ifndef LLVM_LIB_TARGET_SYSTEMZ_SYSTEMZSUBTARGET_H
#define LLVM_LIB_TARGET_SYSTEMZ_SYSTEMZSUBTARGET_H

#include "SystemZFrameLowering.h"
#include "SystemZISelLowering.h"
#include "SystemZInstrInfo.h"
#include "SystemZRegisterInfo.h"
#include "SystemZSelectionDAGInfo.h"
#include "llvm/ADT/Triple.h"
#include "llvm/CodeGen/TargetSubtargetInfo.h"
#include "llvm/IR/DataLayout.h"
#include <string>

#define GET_SUBTARGETINFO_HEADER
#include "SystemZGenSubtargetInfo.inc"

namespace llvm {
class GlobalValue;
class StringRef;

class SystemZSubtarget : public SystemZGenSubtargetInfo {
  virtual void anchor();
protected:
  bool HasDistinctOps;
  bool HasLoadStoreOnCond;
  bool HasHighWord;
  bool HasFPExtension;
  bool HasPopulationCount;
  bool HasMessageSecurityAssist3;
  bool HasMessageSecurityAssist4;
  bool HasResetReferenceBitsMultiple;
  bool HasFastSerialization;
  bool HasInterlockedAccess1;
  bool HasMiscellaneousExtensions;
  bool HasExecutionHint;
  bool HasLoadAndTrap;
  bool HasTransactionalExecution;
  bool HasProcessorAssist;
  bool HasDFPZonedConversion;
  bool HasEnhancedDAT2;
  bool HasVector;
  bool HasLoadStoreOnCond2;
  bool HasLoadAndZeroRightmostByte;
  bool HasMessageSecurityAssist5;
  bool HasDFPPackedConversion;
  bool HasMiscellaneousExtensions2;
  bool HasGuardedStorage;
  bool HasMessageSecurityAssist7;
  bool HasMessageSecurityAssist8;
  bool HasVectorEnhancements1;
  bool HasVectorPackedDecimal;
  bool HasInsertReferenceBitsMultiple;

private:
  Triple TargetTriple;
  SystemZInstrInfo InstrInfo;
  SystemZTargetLowering TLInfo;
  SystemZSelectionDAGInfo TSInfo;
  SystemZFrameLowering FrameLowering;

  SystemZSubtarget &initializeSubtargetDependencies(StringRef CPU,
                                                    StringRef FS);
public:
  SystemZSubtarget(const Triple &TT, const std::string &CPU,
                   const std::string &FS, const TargetMachine &TM);

  const TargetFrameLowering *getFrameLowering() const override {
    return &FrameLowering;
  }
  const SystemZInstrInfo *getInstrInfo() const override { return &InstrInfo; }
  const SystemZRegisterInfo *getRegisterInfo() const override {
    return &InstrInfo.getRegisterInfo();
  }
  const SystemZTargetLowering *getTargetLowering() const override {
    return &TLInfo;
  }
  const SelectionDAGTargetInfo *getSelectionDAGInfo() const override {
    return &TSInfo;
  }

  // True if the subtarget should run MachineScheduler after aggressive
  // coalescing. This currently replaces the SelectionDAG scheduler with the
  // "source" order scheduler.
  bool enableMachineScheduler() const override { return true; }

  // This is important for reducing register pressure in vector code.
  bool useAA() const override { return true; }

  // Always enable the early if-conversion pass.
  bool enableEarlyIfConversion() const override { return true; }

  // Enable tracking of subregister liveness in register allocator.
  bool enableSubRegLiveness() const override;

  // Automatically generated by tblgen.
  void ParseSubtargetFeatures(StringRef CPU, StringRef FS);

  // Return true if the target has the distinct-operands facility.
  bool hasDistinctOps() const { return HasDistinctOps; }

  // Return true if the target has the load/store-on-condition facility.
  bool hasLoadStoreOnCond() const { return HasLoadStoreOnCond; }

  // Return true if the target has the load/store-on-condition facility 2.
  bool hasLoadStoreOnCond2() const { return HasLoadStoreOnCond2; }

  // Return true if the target has the high-word facility.
  bool hasHighWord() const { return HasHighWord; }

  // Return true if the target has the floating-point extension facility.
  bool hasFPExtension() const { return HasFPExtension; }

  // Return true if the target has the population-count facility.
  bool hasPopulationCount() const { return HasPopulationCount; }

  // Return true if the target has the message-security-assist
  // extension facility 3.
  bool hasMessageSecurityAssist3() const { return HasMessageSecurityAssist3; }

  // Return true if the target has the message-security-assist
  // extension facility 4.
  bool hasMessageSecurityAssist4() const { return HasMessageSecurityAssist4; }

  // Return true if the target has the reset-reference-bits-multiple facility.
  bool hasResetReferenceBitsMultiple() const {
    return HasResetReferenceBitsMultiple;
  }

  // Return true if the target has the fast-serialization facility.
  bool hasFastSerialization() const { return HasFastSerialization; }

  // Return true if the target has interlocked-access facility 1.
  bool hasInterlockedAccess1() const { return HasInterlockedAccess1; }

  // Return true if the target has the miscellaneous-extensions facility.
  bool hasMiscellaneousExtensions() const {
    return HasMiscellaneousExtensions;
  }

  // Return true if the target has the execution-hint facility.
  bool hasExecutionHint() const { return HasExecutionHint; }

  // Return true if the target has the load-and-trap facility.
  bool hasLoadAndTrap() const { return HasLoadAndTrap; }

  // Return true if the target has the transactional-execution facility.
  bool hasTransactionalExecution() const { return HasTransactionalExecution; }

  // Return true if the target has the processor-assist facility.
  bool hasProcessorAssist() const { return HasProcessorAssist; }

  // Return true if the target has the DFP zoned-conversion facility.
  bool hasDFPZonedConversion() const { return HasDFPZonedConversion; }

  // Return true if the target has the enhanced-DAT facility 2.
  bool hasEnhancedDAT2() const { return HasEnhancedDAT2; }

  // Return true if the target has the load-and-zero-rightmost-byte facility.
  bool hasLoadAndZeroRightmostByte() const {
    return HasLoadAndZeroRightmostByte;
  }

  // Return true if the target has the message-security-assist
  // extension facility 5.
  bool hasMessageSecurityAssist5() const { return HasMessageSecurityAssist5; }

  // Return true if the target has the DFP packed-conversion facility.
  bool hasDFPPackedConversion() const { return HasDFPPackedConversion; }

  // Return true if the target has the vector facility.
  bool hasVector() const { return HasVector; }

  // Return true if the target has the miscellaneous-extensions facility 2.
  bool hasMiscellaneousExtensions2() const {
    return HasMiscellaneousExtensions2;
  }

  // Return true if the target has the guarded-storage facility.
  bool hasGuardedStorage() const { return HasGuardedStorage; }

  // Return true if the target has the message-security-assist
  // extension facility 7.
  bool hasMessageSecurityAssist7() const { return HasMessageSecurityAssist7; }

  // Return true if the target has the message-security-assist
  // extension facility 8.
  bool hasMessageSecurityAssist8() const { return HasMessageSecurityAssist8; }

  // Return true if the target has the vector-enhancements facility 1.
  bool hasVectorEnhancements1() const { return HasVectorEnhancements1; }

  // Return true if the target has the vector-packed-decimal facility.
  bool hasVectorPackedDecimal() const { return HasVectorPackedDecimal; }

  // Return true if the target has the insert-reference-bits-multiple facility.
  bool hasInsertReferenceBitsMultiple() const {
    return HasInsertReferenceBitsMultiple;
  }

  // Return true if GV can be accessed using LARL for reloc model RM
  // and code model CM.
  bool isPC32DBLSymbol(const GlobalValue *GV, CodeModel::Model CM) const;

  bool isTargetELF() const { return TargetTriple.isOSBinFormatELF(); }
};
} // end namespace llvm

#endif
