123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- //===- TargetSubtargetInfo.cpp - General Target Information ----------------==//
- //
- // The LLVM Compiler Infrastructure
- //
- // This file is distributed under the University of Illinois Open Source
- // License. See LICENSE.TXT for details.
- //
- //===----------------------------------------------------------------------===//
- //
- /// \file This file describes the general parts of a Subtarget.
- //
- //===----------------------------------------------------------------------===//
- #include "llvm/CodeGen/TargetSubtargetInfo.h"
- #include "llvm/ADT/Optional.h"
- #include "llvm/CodeGen/MachineInstr.h"
- #include "llvm/CodeGen/TargetInstrInfo.h"
- #include "llvm/CodeGen/TargetSchedule.h"
- #include "llvm/MC/MCInst.h"
- #include "llvm/Support/Format.h"
- #include "llvm/Support/raw_ostream.h"
- #include <string>
- using namespace llvm;
- TargetSubtargetInfo::TargetSubtargetInfo(
- const Triple &TT, StringRef CPU, StringRef FS,
- ArrayRef<SubtargetFeatureKV> PF, ArrayRef<SubtargetFeatureKV> PD,
- const SubtargetInfoKV *ProcSched, const MCWriteProcResEntry *WPR,
- const MCWriteLatencyEntry *WL, const MCReadAdvanceEntry *RA,
- const InstrStage *IS, const unsigned *OC, const unsigned *FP)
- : MCSubtargetInfo(TT, CPU, FS, PF, PD, ProcSched, WPR, WL, RA, IS, OC, FP) {
- }
- TargetSubtargetInfo::~TargetSubtargetInfo() = default;
- bool TargetSubtargetInfo::enableAtomicExpand() const {
- return true;
- }
- bool TargetSubtargetInfo::enableIndirectBrExpand() const {
- return false;
- }
- bool TargetSubtargetInfo::enableMachineScheduler() const {
- return false;
- }
- bool TargetSubtargetInfo::enableJoinGlobalCopies() const {
- return enableMachineScheduler();
- }
- bool TargetSubtargetInfo::enableRALocalReassignment(
- CodeGenOpt::Level OptLevel) const {
- return true;
- }
- bool TargetSubtargetInfo::enableAdvancedRASplitCost() const {
- return false;
- }
- bool TargetSubtargetInfo::enablePostRAScheduler() const {
- return getSchedModel().PostRAScheduler;
- }
- bool TargetSubtargetInfo::useAA() const {
- return false;
- }
- static std::string createSchedInfoStr(unsigned Latency,
- Optional<double> RThroughput) {
- static const char *SchedPrefix = " sched: [";
- std::string Comment;
- raw_string_ostream CS(Comment);
- if (RThroughput.hasValue())
- CS << SchedPrefix << Latency << format(":%2.2f", RThroughput.getValue())
- << "]";
- else
- CS << SchedPrefix << Latency << ":?]";
- CS.flush();
- return Comment;
- }
- /// Returns string representation of scheduler comment
- std::string TargetSubtargetInfo::getSchedInfoStr(const MachineInstr &MI) const {
- if (MI.isPseudo() || MI.isTerminator())
- return std::string();
- // We don't cache TSchedModel because it depends on TargetInstrInfo
- // that could be changed during the compilation
- TargetSchedModel TSchedModel;
- TSchedModel.init(this);
- unsigned Latency = TSchedModel.computeInstrLatency(&MI);
- Optional<double> RThroughput = TSchedModel.computeReciprocalThroughput(&MI);
- return createSchedInfoStr(Latency, RThroughput);
- }
- /// Returns string representation of scheduler comment
- std::string TargetSubtargetInfo::getSchedInfoStr(MCInst const &MCI) const {
- // We don't cache TSchedModel because it depends on TargetInstrInfo
- // that could be changed during the compilation
- TargetSchedModel TSchedModel;
- TSchedModel.init(this);
- unsigned Latency;
- if (TSchedModel.hasInstrSchedModel())
- Latency = TSchedModel.computeInstrLatency(MCI);
- else if (TSchedModel.hasInstrItineraries()) {
- auto *ItinData = TSchedModel.getInstrItineraries();
- Latency = ItinData->getStageLatency(
- getInstrInfo()->get(MCI.getOpcode()).getSchedClass());
- } else
- return std::string();
- Optional<double> RThroughput =
- TSchedModel.computeReciprocalThroughput(MCI);
- return createSchedInfoStr(Latency, RThroughput);
- }
- void TargetSubtargetInfo::mirFileLoaded(MachineFunction &MF) const {
- }
|