forked from OSchip/llvm-project
[mips] Warn when crc, ginv, virt flags are used with too old revision
CRC and GINV ASE require revision 6, Virtualization requires revision 5. Print a warning when revision is older than required. Differential Revision: https://reviews.llvm.org/D48843 llvm-svn: 336296
This commit is contained in:
parent
cb4f0c5c07
commit
87b60a0e00
|
@ -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()));
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -28,6 +28,36 @@
|
|||
; RUN: llc -march=mips64 -mattr=+mips64r2 -mattr=+dsp < %s 2>&1 | \
|
||||
; RUN: FileCheck %s -check-prefix=DSP_64_NO_WARNING
|
||||
|
||||
; Check virt warnings.
|
||||
; RUN: llc -march=mips -mattr=+mips32r2 -mattr=+virt < %s 2>&1 | \
|
||||
; RUN: FileCheck %s -check-prefix=VIRT_32
|
||||
; RUN: llc -march=mips64 -mattr=+mips64r2 -mattr=+virt < %s 2>&1 | \
|
||||
; RUN: FileCheck %s -check-prefix=VIRT_64
|
||||
; RUN: llc -march=mips -mattr=+mips32r5 -mattr=+virt < %s 2>&1 | \
|
||||
; RUN: FileCheck %s -check-prefix=VIRT_32_NO_WARNING
|
||||
; RUN: llc -march=mips64 -mattr=+mips64r5 -mattr=+virt < %s 2>&1 | \
|
||||
; RUN: FileCheck %s -check-prefix=VIRT_64_NO_WARNING
|
||||
|
||||
; Check crc warnings.
|
||||
; RUN: llc -march=mips -mattr=+mips32r2 -mattr=+crc < %s 2>&1 | \
|
||||
; RUN: FileCheck %s -check-prefix=CRC_32
|
||||
; RUN: llc -march=mips64 -mattr=+mips64r2 -mattr=+crc < %s 2>&1 | \
|
||||
; RUN: FileCheck %s -check-prefix=CRC_64
|
||||
; RUN: llc -march=mips -mattr=+mips32r6 -mattr=+crc < %s 2>&1 | \
|
||||
; RUN: FileCheck %s -check-prefix=CRC_32_NO_WARNING
|
||||
; RUN: llc -march=mips64 -mattr=+mips64r6 -mattr=+crc < %s 2>&1 | \
|
||||
; RUN: FileCheck %s -check-prefix=CRC_64_NO_WARNING
|
||||
|
||||
; Check ginv warnings.
|
||||
; RUN: llc -march=mips -mattr=+mips32r2 -mattr=+ginv < %s 2>&1 | \
|
||||
; RUN: FileCheck %s -check-prefix=GINV_32
|
||||
; RUN: llc -march=mips64 -mattr=+mips64r2 -mattr=+ginv < %s 2>&1 | \
|
||||
; RUN: FileCheck %s -check-prefix=GINV_64
|
||||
; RUN: llc -march=mips -mattr=+mips32r6 -mattr=+ginv < %s 2>&1 | \
|
||||
; RUN: FileCheck %s -check-prefix=GINV_32_NO_WARNING
|
||||
; RUN: llc -march=mips64 -mattr=+mips64r6 -mattr=+ginv < %s 2>&1 | \
|
||||
; RUN: FileCheck %s -check-prefix=GINV_64_NO_WARNING
|
||||
|
||||
; MSA_32: warning: the 'msa' ASE requires MIPS32 revision 5 or greater
|
||||
; MSA_64: warning: the 'msa' ASE requires MIPS64 revision 5 or greater
|
||||
; MSA_32_NO_WARNING-NOT: warning: the 'msa' ASE requires MIPS32 revision 5 or greater
|
||||
|
@ -42,3 +72,18 @@
|
|||
; DSP_64: warning: the 'dsp' ASE requires MIPS64 revision 2 or greater
|
||||
; DSP_32_NO_WARNING-NOT: warning: the 'dsp' ASE requires MIPS32 revision 2 or greater
|
||||
; DSP_64_NO_WARNING-NOT: warning: the 'dsp' ASE requires MIPS64 revision 2 or greater
|
||||
|
||||
; VIRT_32: warning: the 'virt' ASE requires MIPS32 revision 5 or greater
|
||||
; VIRT_64: warning: the 'virt' ASE requires MIPS64 revision 5 or greater
|
||||
; VIRT_32_NO_WARNING-NOT: warning: the 'virt' ASE requires MIPS32 revision 5 or greater
|
||||
; VIRT_64_NO_WARNING-NOT: warning: the 'virt' ASE requires MIPS64 revision 5 or greater
|
||||
|
||||
; CRC_32: warning: the 'crc' ASE requires MIPS32 revision 6 or greater
|
||||
; CRC_64: warning: the 'crc' ASE requires MIPS64 revision 6 or greater
|
||||
; CRC_32_NO_WARNING-NOT: warning: the 'crc' ASE requires MIPS32 revision 6 or greater
|
||||
; CRC_64_NO_WARNING-NOT: warning: the 'crc' ASE requires MIPS64 revision 6 or greater
|
||||
|
||||
; GINV_32: warning: the 'ginv' ASE requires MIPS32 revision 6 or greater
|
||||
; GINV_64: warning: the 'ginv' ASE requires MIPS64 revision 6 or greater
|
||||
; GINV_32_NO_WARNING-NOT: warning: the 'ginv' ASE requires MIPS32 revision 6 or greater
|
||||
; GINV_64_NO_WARNING-NOT: warning: the 'ginv' ASE requires MIPS64 revision 6 or greater
|
Loading…
Reference in New Issue