[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