[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:
Toma Tabacu 2015-04-27 14:05:04 +00:00
parent 659d53e897
commit af3ec2cfd4
2 changed files with 19 additions and 23 deletions

View File

@ -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

View File

@ -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