diff options
| author | Vladimir Stefanovic <vladimir.stefanovic@rt-rk.com> | 2018-07-04 19:26:31 +0000 |
|---|---|---|
| committer | Vladimir Stefanovic <vladimir.stefanovic@rt-rk.com> | 2018-07-04 19:26:31 +0000 |
| commit | 87b60a0e008026743d6bfb3d5286c0c5a7a073de (patch) | |
| tree | 8df2632d7a3bd1642a6e449a619d580b5610f48c | |
| parent | cb4f0c5c07af1ce096c1609bd6576a0aee57700a (diff) | |
| download | bcm5719-llvm-87b60a0e008026743d6bfb3d5286c0c5a7a073de.tar.gz bcm5719-llvm-87b60a0e008026743d6bfb3d5286c0c5a7a073de.zip | |
[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
| -rw-r--r-- | llvm/lib/Target/Mips/MipsSubtarget.cpp | 35 | ||||
| -rw-r--r-- | llvm/lib/Target/Mips/MipsSubtarget.h | 9 | ||||
| -rw-r--r-- | llvm/test/CodeGen/Mips/ase_warnings.ll (renamed from llvm/test/CodeGen/Mips/dsp_msa_warning.ll) | 45 |
3 files changed, 78 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; diff --git a/llvm/test/CodeGen/Mips/dsp_msa_warning.ll b/llvm/test/CodeGen/Mips/ase_warnings.ll index 500ca18df60..ede830c72eb 100644 --- a/llvm/test/CodeGen/Mips/dsp_msa_warning.ll +++ b/llvm/test/CodeGen/Mips/ase_warnings.ll @@ -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 |

