| //===- MBlazeSubtarget.cpp - MBlaze 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 implements the MBlaze specific subclass of TargetSubtargetInfo. | |
| // | |
| //===----------------------------------------------------------------------===// | |
| #include "MBlazeSubtarget.h" | |
| #include "MBlaze.h" | |
| #include "MBlazeRegisterInfo.h" | |
| #include "llvm/Support/CommandLine.h" | |
| #include "llvm/Support/TargetRegistry.h" | |
| #define GET_SUBTARGETINFO_TARGET_DESC | |
| #define GET_SUBTARGETINFO_CTOR | |
| #include "MBlazeGenSubtargetInfo.inc" | |
| using namespace llvm; | |
| MBlazeSubtarget::MBlazeSubtarget(const std::string &TT, | |
| const std::string &CPU, | |
| const std::string &FS): | |
| MBlazeGenSubtargetInfo(TT, CPU, FS), | |
| HasBarrel(false), HasDiv(false), HasMul(false), HasPatCmp(false), | |
| HasFPU(false), HasMul64(false), HasSqrt(false) | |
| { | |
| // Parse features string. | |
| std::string CPUName = CPU; | |
| if (CPUName.empty()) | |
| CPUName = "mblaze"; | |
| ParseSubtargetFeatures(CPUName, FS); | |
| // Only use instruction scheduling if the selected CPU has an instruction | |
| // itinerary (the default CPU is the only one that doesn't). | |
| HasItin = CPUName != "mblaze"; | |
| DEBUG(dbgs() << "CPU " << CPUName << "(" << HasItin << ")\n"); | |
| // Initialize scheduling itinerary for the specified CPU. | |
| InstrItins = getInstrItineraryForCPU(CPUName); | |
| // Compute the issue width of the MBlaze itineraries | |
| computeIssueWidth(); | |
| } | |
| void MBlazeSubtarget::computeIssueWidth() { | |
| InstrItins.IssueWidth = 1; | |
| } | |
| bool MBlazeSubtarget:: | |
| enablePostRAScheduler(CodeGenOpt::Level OptLevel, | |
| TargetSubtargetInfo::AntiDepBreakMode& Mode, | |
| RegClassVector& CriticalPathRCs) const { | |
| Mode = TargetSubtargetInfo::ANTIDEP_CRITICAL; | |
| CriticalPathRCs.clear(); | |
| CriticalPathRCs.push_back(&MBlaze::GPRRegClass); | |
| return HasItin && OptLevel >= CodeGenOpt::Default; | |
| } |