[llvm] r235881 - [mips] [IAS] Improve warning for using AT with .set noat.
Toma Tabacu
toma.tabacu at imgtec.com
Mon Apr 27 07:05:05 PDT 2015
Author: tomatabacu
Date: Mon Apr 27 09:05:04 2015
New Revision: 235881
URL: http://llvm.org/viewvc/llvm-project?rev=235881&view=rev
Log:
[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
Modified:
llvm/trunk/lib/Target/Mips/AsmParser/MipsAsmParser.cpp
llvm/trunk/test/MC/Mips/set-at-directive-explicit-at.s
Modified: llvm/trunk/lib/Target/Mips/AsmParser/MipsAsmParser.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/AsmParser/MipsAsmParser.cpp?rev=235881&r1=235880&r2=235881&view=diff
==============================================================================
--- llvm/trunk/lib/Target/Mips/AsmParser/MipsAsmParser.cpp (original)
+++ llvm/trunk/lib/Target/Mips/AsmParser/MipsAsmParser.cpp Mon Apr 27 09:05:04 2015
@@ -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::MatchAndEmitInstruct
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
Modified: llvm/trunk/test/MC/Mips/set-at-directive-explicit-at.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/Mips/set-at-directive-explicit-at.s?rev=235881&r1=235880&r2=235881&view=diff
==============================================================================
--- llvm/trunk/test/MC/Mips/set-at-directive-explicit-at.s (original)
+++ llvm/trunk/test/MC/Mips/set-at-directive-explicit-at.s Mon Apr 27 09:05:04 2015
@@ -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
More information about the llvm-commits
mailing list