mirror of
https://github.com/RPCSX/llvm.git
synced 2025-03-05 19:38:13 +00:00
[mips] [IAS] Improve warning for using AT with .set noat.
Summary: Changed the warning message to show the current value of $at, similar to what clang does for typedef's, and renamed warnIfAssemblerTemporary to a more descriptive name. I also changed the type of variables which store registers from int to unsigned, updated the relevant test and tried to make the related comments clearer. Reviewers: dsanders Reviewed By: dsanders Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D8479 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@235881 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
659d53e897
commit
af3ec2cfd4
@ -436,8 +436,8 @@ public:
|
||||
// TODO: see how can we get this info.
|
||||
bool abiUsesSoftFloat() const { return false; }
|
||||
|
||||
/// Warn if RegNo is the current assembler temporary.
|
||||
void warnIfAssemblerTemporary(int RegNo, SMLoc Loc);
|
||||
/// Warn if RegIndex is the same as the current AT.
|
||||
void warnIfRegIndexIsAT(unsigned RegIndex, SMLoc Loc);
|
||||
};
|
||||
}
|
||||
|
||||
@ -546,7 +546,7 @@ public:
|
||||
/// target.
|
||||
unsigned getGPR32Reg() const {
|
||||
assert(isRegIdx() && (RegIdx.Kind & RegKind_GPR) && "Invalid access!");
|
||||
AsmParser.warnIfAssemblerTemporary(RegIdx.Index, StartLoc);
|
||||
AsmParser.warnIfRegIndexIsAT(RegIdx.Index, StartLoc);
|
||||
unsigned ClassID = Mips::GPR32RegClassID;
|
||||
return RegIdx.RegInfo->getRegClass(ClassID).getRegister(RegIdx.Index);
|
||||
}
|
||||
@ -2203,15 +2203,10 @@ bool MipsAsmParser::MatchAndEmitInstruction(SMLoc IDLoc, unsigned &Opcode,
|
||||
llvm_unreachable("Implement any new match types added!");
|
||||
}
|
||||
|
||||
void MipsAsmParser::warnIfAssemblerTemporary(int RegIndex, SMLoc Loc) {
|
||||
if ((RegIndex != 0) &&
|
||||
((int)AssemblerOptions.back()->getATRegIndex() == RegIndex)) {
|
||||
if (RegIndex == 1)
|
||||
Warning(Loc, "used $at without \".set noat\"");
|
||||
else
|
||||
Warning(Loc, Twine("used $") + Twine(RegIndex) + " with \".set at=$" +
|
||||
Twine(RegIndex) + "\"");
|
||||
}
|
||||
void MipsAsmParser::warnIfRegIndexIsAT(unsigned RegIndex, SMLoc Loc) {
|
||||
if (RegIndex != 0 && AssemblerOptions.back()->getATRegIndex() == RegIndex)
|
||||
Warning(Loc, "used $at (currently $" + Twine(RegIndex) +
|
||||
") without \".set noat\"");
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -1,32 +1,34 @@
|
||||
# RUN: llvm-mc %s -triple=mipsel-unknown-linux -show-encoding -mcpu=mips32r2 \
|
||||
# RUN: 2>%t1 | FileCheck %s
|
||||
# RUN: FileCheck -check-prefix=WARNINGS %s < %t1
|
||||
# Check that the assembler can handle the documented syntax
|
||||
# for ".set at" and set the correct value. The correct value for $at is always
|
||||
# $1 when written by the user.
|
||||
|
||||
# Check that the assembler can handle the documented syntax for ".set at" and
|
||||
# will set the correct value for $at.
|
||||
# Note that writing $at is always the same as writing $1.
|
||||
|
||||
.text
|
||||
foo:
|
||||
# CHECK: jr $1 # encoding: [0x08,0x00,0x20,0x00]
|
||||
# WARNINGS: :[[@LINE+2]]:11: warning: used $at without ".set noat"
|
||||
# WARNINGS: :[[@LINE+2]]:11: warning: used $at (currently $1) without ".set noat"
|
||||
.set at=$1
|
||||
jr $at
|
||||
|
||||
# CHECK: jr $1 # encoding: [0x08,0x00,0x20,0x00]
|
||||
# WARNINGS: :[[@LINE+2]]:11: warning: used $at without ".set noat"
|
||||
# WARNINGS: :[[@LINE+2]]:11: warning: used $at (currently $1) without ".set noat"
|
||||
.set at=$1
|
||||
jr $1
|
||||
|
||||
# CHECK: jr $1 # encoding: [0x08,0x00,0x20,0x00]
|
||||
# WARNINGS: :[[@LINE+2]]:11: warning: used $at without ".set noat"
|
||||
# WARNINGS: :[[@LINE+2]]:11: warning: used $at (currently $1) without ".set noat"
|
||||
.set at=$at
|
||||
jr $at
|
||||
|
||||
# CHECK: jr $1 # encoding: [0x08,0x00,0x20,0x00]
|
||||
# WARNINGS: :[[@LINE+2]]:11: warning: used $at without ".set noat"
|
||||
# WARNINGS: :[[@LINE+2]]:11: warning: used $at (currently $1) without ".set noat"
|
||||
.set at=$at
|
||||
jr $1
|
||||
# WARNINGS-NOT: warning: used $at without ".set noat"
|
||||
|
||||
# WARNINGS-NOT: warning: used $at (currently ${{[0-9]+}}) without ".set noat"
|
||||
# CHECK: jr $1 # encoding: [0x08,0x00,0x20,0x00]
|
||||
.set at=$2
|
||||
jr $at
|
||||
@ -41,12 +43,11 @@ foo:
|
||||
jr $at
|
||||
|
||||
# CHECK: jr $16 # encoding: [0x08,0x00,0x00,0x02]
|
||||
# WARNINGS: :[[@LINE+2]]:11: warning: used $16 with ".set at=$16"
|
||||
# WARNINGS: :[[@LINE+2]]:11: warning: used $at (currently $16) without ".set noat"
|
||||
.set at=$16
|
||||
jr $s0
|
||||
|
||||
# CHECK: jr $16 # encoding: [0x08,0x00,0x00,0x02]
|
||||
# WARNINGS: :[[@LINE+2]]:11: warning: used $16 with ".set at=$16"
|
||||
# WARNINGS: :[[@LINE+2]]:11: warning: used $at (currently $16) without ".set noat"
|
||||
.set at=$16
|
||||
jr $16
|
||||
# WARNINGS-NOT: warning
|
||||
|
Loading…
x
Reference in New Issue
Block a user