From af38a8fed6c51303febfd8c423ed425bef25f9ac Mon Sep 17 00:00:00 2001 From: Simon Dardis Date: Tue, 19 Jun 2018 16:05:44 +0000 Subject: [PATCH] [mips] Mark microMIPS64 as being unsupported. There are no provided instruction definitions for this architecture. Reviewers: smaksimovic, atanasyan, abeserminji Differential Revision: https://reviews.llvm.org/D48320 llvm-svn: 335057 --- .../Target/Mips/AsmParser/MipsAsmParser.cpp | 3 ++ llvm/lib/Target/Mips/MipsSubtarget.cpp | 2 + .../CodeGen/Mips/micromips64-unsupported.ll | 7 ++++ .../CodeGen/Mips/micromips64r6-unsupported.ll | 5 --- llvm/test/MC/Mips/expansion-j-sym-pic.s | 6 --- llvm/test/MC/Mips/expansion-jal-sym-pic.s | 42 ------------------- llvm/test/MC/Mips/micromips64-unsupported.s | 8 ++++ 7 files changed, 20 insertions(+), 53 deletions(-) create mode 100644 llvm/test/CodeGen/Mips/micromips64-unsupported.ll delete mode 100644 llvm/test/CodeGen/Mips/micromips64r6-unsupported.ll create mode 100644 llvm/test/MC/Mips/micromips64-unsupported.s diff --git a/llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp b/llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp index 2ed3ff87f122..fb220715d48c 100644 --- a/llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp +++ b/llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp @@ -521,6 +521,9 @@ public: if (getSTI().getCPU() == "mips64r6" && inMicroMipsMode()) report_fatal_error("microMIPS64R6 is not supported", false); + + if (!isABI_O32() && inMicroMipsMode()) + report_fatal_error("microMIPS64 is not supported", false); } /// True if all of $fcc0 - $fcc7 exist for the current ISA. diff --git a/llvm/lib/Target/Mips/MipsSubtarget.cpp b/llvm/lib/Target/Mips/MipsSubtarget.cpp index f71031c9cf62..e5ba4fa5a8be 100644 --- a/llvm/lib/Target/Mips/MipsSubtarget.cpp +++ b/llvm/lib/Target/Mips/MipsSubtarget.cpp @@ -116,6 +116,8 @@ MipsSubtarget::MipsSubtarget(const Triple &TT, StringRef CPU, StringRef FS, if (hasMips64r6() && InMicroMipsMode) report_fatal_error("microMIPS64R6 is not supported", false); + if (!isABI_O32() && InMicroMipsMode) + report_fatal_error("microMIPS64 is not supported.", false); if (UseIndirectJumpsHazard) { if (InMicroMipsMode) diff --git a/llvm/test/CodeGen/Mips/micromips64-unsupported.ll b/llvm/test/CodeGen/Mips/micromips64-unsupported.ll new file mode 100644 index 000000000000..713722ea1200 --- /dev/null +++ b/llvm/test/CodeGen/Mips/micromips64-unsupported.ll @@ -0,0 +1,7 @@ +; RUN: not llc -mtriple=mips64-unknown-linux -mcpu=mips64r6 -mattr=+micromips %s 2>&1 | FileCheck %s --check-prefix=MICROMIPS64R6 +; RUN: not llc -mtriple=mips64-unknown-linux -mcpu=mips64 -mattr=+micromips %s 2>&1 | FileCheck %s --check-prefix=MICROMIPS64 + +; Test that microMIPS64(R6) is not supported. + +; MICROMIPS64R6: LLVM ERROR: microMIPS64R6 is not supported +; MICROMIPS64: LLVM ERROR: microMIPS64 is not supported diff --git a/llvm/test/CodeGen/Mips/micromips64r6-unsupported.ll b/llvm/test/CodeGen/Mips/micromips64r6-unsupported.ll deleted file mode 100644 index 6c3cd1be3e47..000000000000 --- a/llvm/test/CodeGen/Mips/micromips64r6-unsupported.ll +++ /dev/null @@ -1,5 +0,0 @@ -; RUN: not llc -mtriple=mips64-unknown-linux -mcpu=mips64r6 -mattr=+micromips %s 2>&1 | FileCheck %s - -; Test that microMIPS64R6 is not supported. - -; CHECK: LLVM ERROR: microMIPS64R6 is not supported diff --git a/llvm/test/MC/Mips/expansion-j-sym-pic.s b/llvm/test/MC/Mips/expansion-j-sym-pic.s index 4a6521907ecc..6bb67a87eda6 100644 --- a/llvm/test/MC/Mips/expansion-j-sym-pic.s +++ b/llvm/test/MC/Mips/expansion-j-sym-pic.s @@ -10,12 +10,6 @@ # RUN: llvm-mc %s -arch=mips -mcpu=mips32 -mattr=micromips -show-encoding |\ # RUN: FileCheck %s -check-prefix=MICRO -# RUN: llvm-mc %s -arch=mips64 -mcpu=mips64 -target-abi n32 -mattr=micromips -show-encoding |\ -# RUN: FileCheck %s -check-prefix=MICRO - -# RUN: llvm-mc %s -arch=mips64 -mcpu=mips64 -target-abi n64 -mattr=micromips -show-encoding |\ -# RUN: FileCheck %s -check-prefix=MICRO - # Repeat the tests using ELF output. # RUN: llvm-mc %s -arch=mips -mcpu=mips32 -filetype=obj | \ diff --git a/llvm/test/MC/Mips/expansion-jal-sym-pic.s b/llvm/test/MC/Mips/expansion-jal-sym-pic.s index a3a5cb714e7a..dddd7aa275f3 100644 --- a/llvm/test/MC/Mips/expansion-jal-sym-pic.s +++ b/llvm/test/MC/Mips/expansion-jal-sym-pic.s @@ -10,12 +10,6 @@ # RUN: llvm-mc %s -arch=mips -mcpu=mips32 -mattr=micromips -show-encoding |\ # RUN: FileCheck %s -check-prefixes=ALL,MM,O32-MM -# RUN: llvm-mc %s -arch=mips64 -mcpu=mips64 -target-abi n32 -mattr=micromips -show-encoding |\ -# RUN: FileCheck %s -check-prefixes=ALL,MM,N32-MM - -# RUN: llvm-mc %s -arch=mips64 -mcpu=mips64 -target-abi n64 -mattr=micromips -show-encoding |\ -# RUN: FileCheck %s -check-prefixes=ALL,MM,N64-MM - # Repeat the tests but using ELF output. An initial version of this patch did # this as the output different depending on whether it went through # MCAsmStreamer or MCELFStreamer. This ensures that the assembly expansion and @@ -68,12 +62,6 @@ local_label: # O32-MM: addiu $25, $25, %lo(local_label) # encoding: [0x33,0x39,A,A] # O32-MM: # fixup A - offset: 0, value: %lo(local_label), kind: fixup_MICROMIPS_LO16 -# N32-MM: lw $25, %got_disp(local_label)($gp) # encoding: [0xff,0x3c,A,A] -# N32-MM: # fixup A - offset: 0, value: %got_disp(local_label), kind: fixup_MICROMIPS_GOT_DISP - -# N64-MM: ld $25, %got_disp(local_label)($gp) # encoding: [0xdf,0x99,A,A] -# N64-MM: # fixup A - offset: 0, value: %got_disp(local_label), kind: fixup_MICROMIPS_GOT_DISP - # MIPS: jalr $25 # encoding: [0x03,0x20,0xf8,0x09] # MM: jalr $ra, $25 # encoding: [0x03,0xf9,0x0f,0x3c] # ALL: nop # encoding: [0x00,0x00,0x00,0x00] @@ -103,12 +91,6 @@ local_label: # O32-MM: lw $25, %call16(weak_label)($gp) # encoding: [0xff,0x3c,A,A] # O32-MM: # fixup A - offset: 0, value: %call16(weak_label), kind: fixup_MICROMIPS_CALL16 -# N32-MM: lw $25, %call16(weak_label)($gp) # encoding: [0xff,0x3c,A,A] -# N32-MM: # fixup A - offset: 0, value: %call16(weak_label), kind: fixup_MICROMIPS_CALL16 - -# N64-MM: ld $25, %call16(weak_label)($gp) # encoding: [0xdf,0x99,A,A] -# N64-MM: # fixup A - offset: 0, value: %call16(weak_label), kind: fixup_MICROMIPS_CALL16 - # MIPS: jalr $25 # encoding: [0x03,0x20,0xf8,0x09] # MM: jalr $ra, $25 # encoding: [0x03,0xf9,0x0f,0x3c] # ALL: nop # encoding: [0x00,0x00,0x00,0x00] @@ -138,12 +120,6 @@ local_label: # O32-MM: lw $25, %call16(global_label)($gp) # encoding: [0xff,0x3c,A,A] # O32-MM: # fixup A - offset: 0, value: %call16(global_label), kind: fixup_MICROMIPS_CALL16 -# N32-MM: lw $25, %call16(global_label)($gp) # encoding: [0xff,0x3c,A,A] -# N32-MM: # fixup A - offset: 0, value: %call16(global_label), kind: fixup_MICROMIPS_CALL16 - -# N64-MM: ld $25, %call16(global_label)($gp) # encoding: [0xdf,0x99,A,A] -# N64-MM: # fixup A - offset: 0, value: %call16(global_label), kind: fixup_MICROMIPS_CALL16 - # MIPS: jalr $25 # encoding: [0x03,0x20,0xf8,0x09] # MM: jalr $ra, $25 # encoding: [0x03,0xf9,0x0f,0x3c] # ALL: nop # encoding: [0x00,0x00,0x00,0x00] @@ -175,12 +151,6 @@ local_label: # O32-MM-NEXT: addiu $25, $25, %lo(.text) # encoding: [0x33,0x39,A,A] # O32-MM-NEXT: # fixup A - offset: 0, value: %lo(.text), kind: fixup_MICROMIPS_LO16 -# N32-MM: lw $25, %got_disp(.text)($gp) # encoding: [0xff,0x3c,A,A] -# N32-MM-NEXT: # fixup A - offset: 0, value: %got_disp(.text), kind: fixup_MICROMIPS_GOT_DISP - -# N64-MM: ld $25, %got_disp(.text)($gp) # encoding: [0xdf,0x99,A,A] -# N64-MM-NEXT: # fixup A - offset: 0, value: %got_disp(.text), kind: fixup_MICROMIPS_GOT_DISP - # MIPS: jalr $25 # encoding: [0x03,0x20,0xf8,0x09] # MM: jalr $ra, $25 # encoding: [0x03,0xf9,0x0f,0x3c] # ALL: nop # encoding: [0x00,0x00,0x00,0x00] @@ -217,12 +187,6 @@ local_label: # O32-MM: addiu $25, $25, %lo($tmp0) # encoding: [0x33,0x39,A,A] # O32-MM: # fixup A - offset: 0, value: %lo($tmp0), kind: fixup_MICROMIPS_LO16 -# N32-MM: lw $25, %got_disp(.Ltmp0)($gp) # encoding: [0xff,0x3c,A,A] -# N32-MM: # fixup A - offset: 0, value: %got_disp(.Ltmp0), kind: fixup_MICROMIPS_GOT_DISP - -# N64-MM: ld $25, %got_disp(.Ltmp0)($gp) # encoding: [0xdf,0x99,A,A] -# N64-MM: # fixup A - offset: 0, value: %got_disp(.Ltmp0), kind: fixup_MICROMIPS_GOT_DISP - # MIPS: jalr $25 # encoding: [0x03,0x20,0xf8,0x09] # MM: jalr $ra, $25 # encoding: [0x03,0xf9,0x0f,0x3c] # ALL: nop # encoding: [0x00,0x00,0x00,0x00] @@ -259,12 +223,6 @@ local_label: # O32-MM-FIXME: addiu $25, $25, %lo(forward_local) # encoding: [0x33,0x39,A,A] # O32-MM-FIXME: # fixup A - offset: 0, value: %lo(forward_local), kind: fixup_MICROMIPS_LO16 -# N32-MM-FIXME: lw $25, %got_disp(forward_local)($gp) # encoding: [0xff,0x3c,A,A] -# N32-MM-FIXME: # fixup A - offset: 0, value: %got_disp(forward_local), kind: fixup_MICROMIPS_GOT_DISP - -# N64-MM-FIXME: ld $25, %got_disp(forward_local)($gp) # encoding: [0xdf,0x99,A,A] -# N64-MM-FIXME: # fixup A - offset: 0, value: %got_disp(forward_local), kind: fixup_MICROMIPS_GOT_DISP - # MIPS: jalr $25 # encoding: [0x03,0x20,0xf8,0x09] # MM: jalr $ra, $25 # encoding: [0x03,0xf9,0x0f,0x3c] # ALL: nop # encoding: [0x00,0x00,0x00,0x00] diff --git a/llvm/test/MC/Mips/micromips64-unsupported.s b/llvm/test/MC/Mips/micromips64-unsupported.s new file mode 100644 index 000000000000..bc38cfb41f74 --- /dev/null +++ b/llvm/test/MC/Mips/micromips64-unsupported.s @@ -0,0 +1,8 @@ +# RUN: not llvm-mc %s -arch=mips64 -mcpu=mips64r6 -target-abi n64 2>&1 -mattr=+micromips | FileCheck %s --check-prefix=64R6 +# RUN: not llvm-mc %s -arch=mips64 -mcpu=mips64r6 -target-abi n32 2>&1 -mattr=+micromips | FileCheck %s --check-prefix=64R6 + +# RUN: not llvm-mc %s -arch=mips64 -mcpu=mips64 -target-abi n64 2>&1 -mattr=+micromips | FileCheck %s --check-prefix=64 +# RUN: not llvm-mc %s -arch=mips64 -mcpu=mips64 -target-abi n32 2>&1 -mattr=+micromips | FileCheck %s --check-prefix=64 + +# 64R6: microMIPS64R6 is not supported +# 64: microMIPS64 is not supported