diff options
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Target/Mips/MipsSubtarget.cpp | 35 | ||||
| -rw-r--r-- | llvm/lib/Target/Mips/MipsSubtarget.h | 9 | 
2 files changed, 33 insertions, 11 deletions
diff --git a/llvm/lib/Target/Mips/MipsSubtarget.cpp b/llvm/lib/Target/Mips/MipsSubtarget.cpp index e5ba4fa5a8b..0c39a45467c 100644 --- a/llvm/lib/Target/Mips/MipsSubtarget.cpp +++ b/llvm/lib/Target/Mips/MipsSubtarget.cpp @@ -61,8 +61,10 @@ static cl::opt<bool>            cl::desc("Enable gp-relative addressing of mips small data items"));  bool MipsSubtarget::DspWarningPrinted = false; -  bool MipsSubtarget::MSAWarningPrinted = false; +bool MipsSubtarget::VirtWarningPrinted = false; +bool MipsSubtarget::CRCWarningPrinted = false; +bool MipsSubtarget::GINVWarningPrinted = false;  void MipsSubtarget::anchor() {} @@ -172,16 +174,27 @@ MipsSubtarget::MipsSubtarget(const Triple &TT, StringRef CPU, StringRef FS,      }    } -  if (hasMSA() && !MSAWarningPrinted) { -    if (hasMips64() && !hasMips64r5()) { -      errs() << "warning: the 'msa' ASE requires MIPS64 revision 5 or " -             << "greater\n"; -      MSAWarningPrinted = true; -    } else if (hasMips32() && !hasMips32r5()) { -      errs() << "warning: the 'msa' ASE requires MIPS32 revision 5 or " -             << "greater\n"; -      MSAWarningPrinted = true; -    } +  StringRef ArchName = hasMips64() ? "MIPS64" : "MIPS32"; + +  if (!hasMips32r5() && hasMSA() && !MSAWarningPrinted) { +    errs() << "warning: the 'msa' ASE requires " << ArchName +           << " revision 5 or greater\n"; +    MSAWarningPrinted = true; +  } +  if (!hasMips32r5() && hasVirt() && !VirtWarningPrinted) { +    errs() << "warning: the 'virt' ASE requires " << ArchName +           << " revision 5 or greater\n"; +    VirtWarningPrinted = true; +  } +  if (!hasMips32r6() && hasCRC() && !CRCWarningPrinted) { +    errs() << "warning: the 'crc' ASE requires " << ArchName +           << " revision 6 or greater\n"; +    CRCWarningPrinted = true; +  } +  if (!hasMips32r6() && hasGINV() && !GINVWarningPrinted) { +    errs() << "warning: the 'ginv' ASE requires " << ArchName +           << " revision 6 or greater\n"; +    GINVWarningPrinted = true;    }    CallLoweringInfo.reset(new MipsCallLowering(*getTargetLowering())); diff --git a/llvm/lib/Target/Mips/MipsSubtarget.h b/llvm/lib/Target/Mips/MipsSubtarget.h index 0504fc2c579..676d702ba63 100644 --- a/llvm/lib/Target/Mips/MipsSubtarget.h +++ b/llvm/lib/Target/Mips/MipsSubtarget.h @@ -54,6 +54,15 @@ class MipsSubtarget : public MipsGenSubtargetInfo {    // Used to avoid printing msa warnings multiple times.    static bool MSAWarningPrinted; +  // Used to avoid printing crc warnings multiple times. +  static bool CRCWarningPrinted; + +  // Used to avoid printing ginv warnings multiple times. +  static bool GINVWarningPrinted; + +  // Used to avoid printing virt warnings multiple times. +  static bool VirtWarningPrinted; +    // Mips architecture version    MipsArchEnum MipsArchVersion;  | 

