summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVladimir Stefanovic <vladimir.stefanovic@rt-rk.com>2018-07-04 19:26:31 +0000
committerVladimir Stefanovic <vladimir.stefanovic@rt-rk.com>2018-07-04 19:26:31 +0000
commit87b60a0e008026743d6bfb3d5286c0c5a7a073de (patch)
tree8df2632d7a3bd1642a6e449a619d580b5610f48c
parentcb4f0c5c07af1ce096c1609bd6576a0aee57700a (diff)
downloadbcm5719-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.cpp35
-rw-r--r--llvm/lib/Target/Mips/MipsSubtarget.h9
-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
OpenPOWER on IntegriCloud