mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-25 12:50:00 +00:00
[mips] Make it impossible to have UnknownABI in CodeGen and Integrated Assembler.
Summary: This removes the need to coerce UnknownABI to the default ABI (O32 for MIPS32, N64 for MIPS64 [*]) in both MipsSubtarget and MipsAsmParser. Clang has been updated to disable both possible default ABI's before enabling the ABI it intends to use. [*] N64 being the default for MIPS64 is not actually correct. However N32 is not fully implemented/tested yet. Depends on: D2830 Reviewers: jacksprat, matheusalmeida Reviewed By: matheusalmeida Differential Revision: http://llvm-reviews.chandlerc.com/D2832 Differential Revision: http://llvm-reviews.chandlerc.com/D2846 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@201792 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
1e3bb3fc41
commit
5c86661f15
@ -264,6 +264,12 @@ public:
|
||||
hasConsumedDollar(false) {
|
||||
// Initialize the set of available features.
|
||||
setAvailableFeatures(ComputeAvailableFeatures(STI.getFeatureBits()));
|
||||
|
||||
// Assert exactly one ABI was chosen.
|
||||
assert((((STI.getFeatureBits() & Mips::FeatureO32) != 0) +
|
||||
((STI.getFeatureBits() & Mips::FeatureEABI) != 0) +
|
||||
((STI.getFeatureBits() & Mips::FeatureN32) != 0) +
|
||||
((STI.getFeatureBits() & Mips::FeatureN64) != 0)) == 1);
|
||||
}
|
||||
|
||||
MCAsmParser &getParser() const { return Parser; }
|
||||
|
@ -90,11 +90,11 @@ def FeatureMicroMips : SubtargetFeature<"micromips", "InMicroMipsMode", "true",
|
||||
class Proc<string Name, list<SubtargetFeature> Features>
|
||||
: Processor<Name, MipsGenericItineraries, Features>;
|
||||
|
||||
def : Proc<"mips32", [FeatureMips32]>;
|
||||
def : Proc<"mips32r2", [FeatureMips32r2]>;
|
||||
def : Proc<"mips64", [FeatureMips64]>;
|
||||
def : Proc<"mips64r2", [FeatureMips64r2]>;
|
||||
def : Proc<"mips16", [FeatureMips16]>;
|
||||
def : Proc<"mips32", [FeatureMips32, FeatureO32]>;
|
||||
def : Proc<"mips32r2", [FeatureMips32r2, FeatureO32]>;
|
||||
def : Proc<"mips64", [FeatureMips64, FeatureN64]>;
|
||||
def : Proc<"mips64r2", [FeatureMips64r2, FeatureN64]>;
|
||||
def : Proc<"mips16", [FeatureMips16, FeatureO32]>;
|
||||
|
||||
def MipsAsmParser : AsmParser {
|
||||
let ShouldEmitMatchRegisterName = 0;
|
||||
|
@ -109,9 +109,12 @@ MipsSubtarget::MipsSubtarget(const std::string &TT, const std::string &CPU,
|
||||
// Initialize scheduling itinerary for the specified CPU.
|
||||
InstrItins = getInstrItineraryForCPU(CPUName);
|
||||
|
||||
// Set MipsABI if it hasn't been set yet.
|
||||
if (MipsABI == UnknownABI)
|
||||
MipsABI = hasMips64() ? N64 : O32;
|
||||
// Assert exactly one ABI was chosen.
|
||||
assert(MipsABI != UnknownABI);
|
||||
assert((((getFeatureBits() & Mips::FeatureO32) != 0) +
|
||||
((getFeatureBits() & Mips::FeatureEABI) != 0) +
|
||||
((getFeatureBits() & Mips::FeatureN32) != 0) +
|
||||
((getFeatureBits() & Mips::FeatureN64) != 0)) == 1);
|
||||
|
||||
// Check if Architecture and ABI are compatible.
|
||||
assert(((!hasMips64() && (isABI_O32() || isABI_EABI())) ||
|
||||
|
@ -1,9 +1,9 @@
|
||||
; RUN: llc -march=mipsel -relocation-model=pic < %s | FileCheck %s -check-prefix=PIC-O32
|
||||
; RUN: llc -march=mipsel -relocation-model=static < %s | FileCheck %s -check-prefix=STATIC-O32
|
||||
; RUN: llc -march=mips64el -mcpu=mips64r2 -mattr=n32 -relocation-model=pic < %s | FileCheck %s -check-prefix=PIC-N32
|
||||
; RUN: llc -march=mips64el -mcpu=mips64r2 -mattr=n32 -relocation-model=static < %s | FileCheck %s -check-prefix=STATIC-N32
|
||||
; RUN: llc -march=mips64el -mcpu=mips64r2 -mattr=n64 -relocation-model=pic < %s | FileCheck %s -check-prefix=PIC-N64
|
||||
; RUN: llc -march=mips64el -mcpu=mips64r2 -mattr=n64 -relocation-model=static < %s | FileCheck %s -check-prefix=STATIC-N64
|
||||
; RUN: llc -march=mips64el -mcpu=mips64r2 -mattr=-n64,n32 -relocation-model=pic < %s | FileCheck %s -check-prefix=PIC-N32
|
||||
; RUN: llc -march=mips64el -mcpu=mips64r2 -mattr=-n64,n32 -relocation-model=static < %s | FileCheck %s -check-prefix=STATIC-N32
|
||||
; RUN: llc -march=mips64el -mcpu=mips64r2 -mattr=-n64,n64 -relocation-model=pic < %s | FileCheck %s -check-prefix=PIC-N64
|
||||
; RUN: llc -march=mips64el -mcpu=mips64r2 -mattr=-n64,n64 -relocation-model=static < %s | FileCheck %s -check-prefix=STATIC-N64
|
||||
|
||||
define float @h() nounwind readnone {
|
||||
entry:
|
||||
|
@ -1,9 +1,9 @@
|
||||
; RUN: llc -march=mipsel -relocation-model=pic < %s | FileCheck %s -check-prefix=PIC-O32
|
||||
; RUN: llc -march=mipsel -relocation-model=static < %s | FileCheck %s -check-prefix=STATIC-O32
|
||||
; RUN: llc -march=mips64el -mcpu=mips64r2 -mattr=n32 -relocation-model=pic < %s | FileCheck %s -check-prefix=PIC-N32
|
||||
; RUN: llc -march=mips64el -mcpu=mips64r2 -mattr=n32 -relocation-model=static < %s | FileCheck %s -check-prefix=STATIC-N32
|
||||
; RUN: llc -march=mips64el -mcpu=mips64r2 -mattr=n64 -relocation-model=pic < %s | FileCheck %s -check-prefix=PIC-N64
|
||||
; RUN: llc -march=mips64el -mcpu=mips64r2 -mattr=n64 -relocation-model=static < %s | FileCheck %s -check-prefix=STATIC-N64
|
||||
; RUN: llc -march=mips64el -mcpu=mips64r2 -mattr=-n64,n32 -relocation-model=pic < %s | FileCheck %s -check-prefix=PIC-N32
|
||||
; RUN: llc -march=mips64el -mcpu=mips64r2 -mattr=-n64,n32 -relocation-model=static < %s | FileCheck %s -check-prefix=STATIC-N32
|
||||
; RUN: llc -march=mips64el -mcpu=mips64r2 -mattr=-n64,n64 -relocation-model=pic < %s | FileCheck %s -check-prefix=PIC-N64
|
||||
; RUN: llc -march=mips64el -mcpu=mips64r2 -mattr=-n64,n64 -relocation-model=static < %s | FileCheck %s -check-prefix=STATIC-N64
|
||||
; RUN: llc -mtriple=mipsel-linux-gnu -march=mipsel -mcpu=mips32 -mattr=+mips16 -relocation-model=static < %s | FileCheck %s -check-prefix=STATIC-MIPS16-1
|
||||
; RUN: llc -mtriple=mipsel-linux-gnu -march=mipsel -mcpu=mips32 -mattr=+mips16 -relocation-model=static < %s | FileCheck %s -check-prefix=STATIC-MIPS16-2
|
||||
|
||||
|
@ -1,9 +1,9 @@
|
||||
; RUN: llc -march=mipsel -relocation-model=pic < %s | FileCheck %s -check-prefix=PIC-O32
|
||||
; RUN: llc -march=mipsel -relocation-model=static -mtriple=mipsel-linux-gnu < %s | FileCheck %s -check-prefix=STATIC-O32
|
||||
; RUN: llc -march=mips64el -mcpu=mips64r2 -mattr=n32 -relocation-model=pic < %s | FileCheck %s -check-prefix=PIC-N32
|
||||
; RUN: llc -march=mips64el -mcpu=mips64r2 -mattr=n32 -relocation-model=static -mtriple=mipsel-linux-gnu < %s | FileCheck %s -check-prefix=STATIC-N32
|
||||
; RUN: llc -march=mips64el -mcpu=mips64r2 -mattr=n64 -relocation-model=pic < %s | FileCheck %s -check-prefix=PIC-N64
|
||||
; RUN: llc -march=mips64el -mcpu=mips64r2 -mattr=n64 -relocation-model=static < %s | FileCheck %s -check-prefix=STATIC-N64
|
||||
; RUN: llc -march=mips64el -mcpu=mips64r2 -mattr=-n64,n32 -relocation-model=pic < %s | FileCheck %s -check-prefix=PIC-N32
|
||||
; RUN: llc -march=mips64el -mcpu=mips64r2 -mattr=-n64,n32 -relocation-model=static -mtriple=mipsel-linux-gnu < %s | FileCheck %s -check-prefix=STATIC-N32
|
||||
; RUN: llc -march=mips64el -mcpu=mips64r2 -mattr=-n64,n64 -relocation-model=pic < %s | FileCheck %s -check-prefix=PIC-N64
|
||||
; RUN: llc -march=mips64el -mcpu=mips64r2 -mattr=-n64,n64 -relocation-model=static < %s | FileCheck %s -check-prefix=STATIC-N64
|
||||
|
||||
@s1 = internal unnamed_addr global i32 8, align 4
|
||||
@g1 = external global i32
|
||||
|
@ -1,5 +1,5 @@
|
||||
; RUN: llc < %s -march=mips64el -mcpu=mips64 -mattr=n64 | FileCheck %s -check-prefix=CHECK-N64
|
||||
; RUN: llc < %s -march=mips64el -mcpu=mips64 -mattr=n32 | FileCheck %s -check-prefix=CHECK-N32
|
||||
; RUN: llc < %s -march=mips64el -mcpu=mips64 -mattr=-n64,n64 | FileCheck %s -check-prefix=CHECK-N64
|
||||
; RUN: llc < %s -march=mips64el -mcpu=mips64 -mattr=-n64,n32 | FileCheck %s -check-prefix=CHECK-N32
|
||||
|
||||
@f0 = common global float 0.000000e+00, align 4
|
||||
@d0 = common global double 0.000000e+00, align 8
|
||||
|
@ -1,5 +1,5 @@
|
||||
; RUN: llc < %s -march=mips64el -mcpu=mips64 -mattr=n64 | FileCheck %s -check-prefix=CHECK-N64
|
||||
; RUN: llc < %s -march=mips64el -mcpu=mips64 -mattr=n32 | FileCheck %s -check-prefix=CHECK-N32
|
||||
; RUN: llc < %s -march=mips64el -mcpu=mips64 -mattr=-n64,n64 | FileCheck %s -check-prefix=CHECK-N64
|
||||
; RUN: llc < %s -march=mips64el -mcpu=mips64 -mattr=-n64,n32 | FileCheck %s -check-prefix=CHECK-N32
|
||||
|
||||
@c = common global i8 0, align 4
|
||||
@s = common global i16 0, align 4
|
||||
|
@ -13,10 +13,10 @@
|
||||
# RUN: llvm-mc -filetype=obj -triple mipsel-unknown-linux -mcpu=mips32 %s -o -| llvm-readobj -h | FileCheck --check-prefix=MIPSEL-MIPS32 %s
|
||||
# MIPSEL-MIPS32: Flags [ (0x50001000)
|
||||
|
||||
# RUN: llvm-mc -filetype=obj -triple mips64el-unknown-linux -mcpu=mips64r2 -mattr=n32 %s -o -| llvm-readobj -h | FileCheck --check-prefix=MIPS64EL-MIPS64R2-N32 %s
|
||||
# RUN: llvm-mc -filetype=obj -triple mips64el-unknown-linux -mcpu=mips64r2 -mattr=-n64,n32 %s -o -| llvm-readobj -h | FileCheck --check-prefix=MIPS64EL-MIPS64R2-N32 %s
|
||||
# MIPS64EL-MIPS64R2-N32: Flags [ (0x80000020)
|
||||
|
||||
# RUN: llvm-mc -filetype=obj -triple mips64el-unknown-linux -mcpu=mips64 -mattr=n32 %s -o -| llvm-readobj -h | FileCheck --check-prefix=MIPS64EL-MIPS64-N32 %s
|
||||
# RUN: llvm-mc -filetype=obj -triple mips64el-unknown-linux -mcpu=mips64 -mattr=-n64,n32 %s -o -| llvm-readobj -h | FileCheck --check-prefix=MIPS64EL-MIPS64-N32 %s
|
||||
# MIPS64EL-MIPS64-N32: Flags [ (0x60000020)
|
||||
|
||||
# RUN: llvm-mc -filetype=obj -triple mips64el-unknown-linux -mcpu=mips64r2 -mattr=n64 %s -o -| llvm-readobj -h | FileCheck --check-prefix=MIPS64EL-MIPS64R2-N64 %s
|
||||
@ -25,10 +25,10 @@
|
||||
# RUN: llvm-mc -filetype=obj -triple mips64el-unknown-linux -mcpu=mips64 %s -mattr=n64 -o -| llvm-readobj -h | FileCheck --check-prefix=MIPS64EL-MIPS64-N64 %s
|
||||
# MIPS64EL-MIPS64-N64: Flags [ (0x60000000)
|
||||
|
||||
# RUN: llvm-mc -filetype=obj -triple mips64el-unknown-linux -mcpu=mips64r2 -mattr=o32 %s -o -| llvm-readobj -h | FileCheck --check-prefix=MIPS64EL-MIPS64R2-O32 %s
|
||||
# RUN: llvm-mc -filetype=obj -triple mips64el-unknown-linux -mcpu=mips64r2 -mattr=-n64,o32 %s -o -| llvm-readobj -h | FileCheck --check-prefix=MIPS64EL-MIPS64R2-O32 %s
|
||||
# MIPS64EL-MIPS64R2-O32: Flags [ (0x80001100)
|
||||
|
||||
# RUN: llvm-mc -filetype=obj -triple mips64el-unknown-linux -mcpu=mips64 %s -mattr=o32 -o -| llvm-readobj -h | FileCheck --check-prefix=MIPS64EL-MIPS64-O32 %s
|
||||
# RUN: llvm-mc -filetype=obj -triple mips64el-unknown-linux -mcpu=mips64 %s -mattr=-n64,o32 -o -| llvm-readobj -h | FileCheck --check-prefix=MIPS64EL-MIPS64-O32 %s
|
||||
# MIPS64EL-MIPS64-O32: Flags [ (0x60001100)
|
||||
|
||||
# Default ABI for MIPS64 is N64 as opposed to GCC/GAS (N32)
|
||||
|
@ -1,9 +1,9 @@
|
||||
# These *MUST* match the output of gas compiled with the same triple and
|
||||
# corresponding options (-mabi=64 -> -mattr=+n64 for example).
|
||||
|
||||
# RUN: llvm-mc -filetype=obj -triple=mips64el-linux -mattr=+n64 %s -o - \
|
||||
# RUN: llvm-mc -filetype=obj -triple=mips64el-linux -mattr=-n64,+n64 %s -o - \
|
||||
# RUN: | llvm-readobj -s | FileCheck --check-prefix=CHECK_64 %s
|
||||
# RUN: llvm-mc -filetype=obj -triple=mipsel %s -mattr=+n32 -o - \
|
||||
# RUN: llvm-mc -filetype=obj -triple=mipsel %s -mattr=-o32,+n32 -o - \
|
||||
# RUN: | llvm-readobj -s | FileCheck --check-prefix=CHECK_32 %s
|
||||
|
||||
# Check for register information sections.
|
||||
|
@ -7,10 +7,10 @@
|
||||
# RUN: -mcpu=mips64r2 -arch=mips64 | FileCheck %s
|
||||
#
|
||||
# RUN: llvm-mc %s -triple=mipsel-unknown-linux -show-encoding \
|
||||
# RUN: -mcpu=mips64r2 -arch=mips64 -mattr=+n32 | FileCheck %s
|
||||
# RUN: -mcpu=mips64r2 -arch=mips64 -mattr=-n64,+n32 | FileCheck %s
|
||||
#
|
||||
# RUN: llvm-mc %s -triple=mipsel-unknown-linux -show-encoding \
|
||||
# RUN: -mcpu=mips64r2 -arch=mips64 -mattr=+n64 | FileCheck %s
|
||||
# RUN: -mcpu=mips64r2 -arch=mips64 -mattr=-n64,+n64 | FileCheck %s
|
||||
|
||||
.text
|
||||
foo:
|
||||
|
Loading…
Reference in New Issue
Block a user