[llvm] r204711 - [mips] Correct testcase for .set at=$reg and emit the new warnings for numeric registers too.

Daniel Sanders daniel.sanders at imgtec.com
Tue Mar 25 04:16:03 PDT 2014


Author: dsanders
Date: Tue Mar 25 06:16:03 2014
New Revision: 204711

URL: http://llvm.org/viewvc/llvm-project?rev=204711&view=rev
Log:
[mips] Correct testcase for .set at=$reg and emit the new warnings for numeric registers too.

Summary:
Remove the XFAIL added in my previous commit and correct the test such that
it correctly tests the expansion of the assembler temporary.

Also added a test to check that $at is always $1 when written by the
user.

Corrected the new assembler temporary warnings so that they are emitted for
numeric registers too.

Differential Revision: http://llvm-reviews.chandlerc.com/D3169

Added:
    llvm/trunk/test/MC/Mips/set-at-directive-explicit-at.s
Modified:
    llvm/trunk/lib/Target/Mips/AsmParser/MipsAsmParser.cpp
    llvm/trunk/test/MC/Mips/set-at-directive.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=204711&r1=204710&r2=204711&view=diff
==============================================================================
--- llvm/trunk/lib/Target/Mips/AsmParser/MipsAsmParser.cpp (original)
+++ llvm/trunk/lib/Target/Mips/AsmParser/MipsAsmParser.cpp Tue Mar 25 06:16:03 2014
@@ -250,6 +250,9 @@ class MipsAsmParser : public MCTargetAsm
 
   int getATReg();
 
+  // Warn if RegNo is the current assembler temporary.
+  void warnIfAssemblerTemporary(int RegNo);
+
   bool processInstruction(MCInst &Inst, SMLoc IDLoc,
                           SmallVectorImpl<MCInst> &Instructions);
 
@@ -982,19 +985,23 @@ bool MipsAsmParser::MatchAndEmitInstruct
   return true;
 }
 
-int MipsAsmParser::matchCPURegisterName(StringRef Name) {
-  int CC;
-
-  if (Name == "at") {
-    // If noat is set then the at register is 0, otherwise it's defined as a
-    // specific register.  Warn if the assembler is free to use it.
-    if (Options.getATRegNum() != 0)
+void MipsAsmParser::warnIfAssemblerTemporary(int RegNo) {
+  if ((RegNo != 0) && ((int)Options.getATRegNum() == RegNo)) {
+    if (RegNo == 1)
       Warning(getLexer().getLoc(), "Used $at without \".set noat\"");
-    return 1;
+    else
+      Warning(getLexer().getLoc(), Twine("Used $") + Twine(RegNo) +
+                                       " with \".set at=$" + Twine(RegNo) +
+                                       "\"");
   }
+}
+
+int MipsAsmParser::matchCPURegisterName(StringRef Name) {
+  int CC;
 
   CC = StringSwitch<unsigned>(Name)
            .Case("zero", 0)
+           .Case("at", 1)
            .Case("a0", 4)
            .Case("a1", 5)
            .Case("a2", 6)
@@ -1044,9 +1051,7 @@ int MipsAsmParser::matchCPURegisterName(
              .Case("s8", 30)
              .Default(-1);
 
-  if ((CC != 0) && ((int)Options.getATRegNum() == CC))
-      Warning(getLexer().getLoc(), Twine("Used $") + Name + " with \".set at=$"
-          + Name + "\"");
+  warnIfAssemblerTemporary(CC);
 
   return CC;
 }
@@ -1199,6 +1204,9 @@ int MipsAsmParser::matchRegisterByNumber
       getContext().getRegisterInfo()->getRegClass(RegClass).getNumRegs())
     return -1;
 
+  if (RegClass == Mips::GPR32RegClassID || RegClass == Mips::GPR64RegClassID)
+    warnIfAssemblerTemporary(RegNum);
+
   return getReg(RegClass, RegNum);
 }
 

Added: 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=204711&view=auto
==============================================================================
--- llvm/trunk/test/MC/Mips/set-at-directive-explicit-at.s (added)
+++ llvm/trunk/test/MC/Mips/set-at-directive-explicit-at.s Tue Mar 25 06:16:03 2014
@@ -0,0 +1,39 @@
+# 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.
+    .text
+foo:
+# CHECK:   jr    $1                      # encoding: [0x08,0x00,0x20,0x00]
+# WARNINGS: :[[@LINE+2]]:12: warning: Used $at without ".set noat"
+    .set    at=$1
+    jr    $at
+
+# CHECK:   jr    $1                      # encoding: [0x08,0x00,0x20,0x00]
+# WARNINGS: :[[@LINE+2]]:12: warning: Used $at without ".set noat"
+    .set    at=$1
+    jr    $1
+# WARNINGS-NOT: warning: Used $at without ".set noat"
+
+# CHECK:   jr    $1                      # encoding: [0x08,0x00,0x20,0x00]
+    .set    at=$2
+    jr    $at
+# CHECK:   jr    $1                      # encoding: [0x08,0x00,0x20,0x00]
+    .set    at=$3
+    jr    $at
+# CHECK:   jr    $1                      # encoding: [0x08,0x00,0x20,0x00]
+    .set noat
+    jr    $at
+
+# CHECK:   jr    $16                     # encoding: [0x08,0x00,0x00,0x02]
+# WARNINGS: :[[@LINE+2]]:12: warning: Used $16 with ".set at=$16"
+    .set    at=$16
+    jr    $s0
+
+# CHECK:   jr    $16                     # encoding: [0x08,0x00,0x00,0x02]
+# WARNINGS: :[[@LINE+2]]:12: warning: Used $16 with ".set at=$16"
+    .set    at=$16
+    jr    $16
+# WARNINGS-NOT: warning

Modified: llvm/trunk/test/MC/Mips/set-at-directive.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/Mips/set-at-directive.s?rev=204711&r1=204710&r2=204711&view=diff
==============================================================================
--- llvm/trunk/test/MC/Mips/set-at-directive.s (original)
+++ llvm/trunk/test/MC/Mips/set-at-directive.s Tue Mar 25 06:16:03 2014
@@ -2,130 +2,160 @@
 # RUN: FileCheck %s
 # Check that the assembler can handle the documented syntax
 # for ".set at" and set the correct value.
-# XFAIL:
     .text
 foo:
-# CHECK:   jr    $1                      # encoding: [0x08,0x00,0x20,0x00]
+# CHECK: lui  $1, 1
+# CHECK: addu $1, $1, $2
+# CHECK: lw   $2, 0($1)
     .set    at=$1
-    jr    $at
-    nop
-# CHECK:   jr    $2                      # encoding: [0x08,0x00,0x40,0x00]
+        lw      $2, 65536($2)
+# CHECK: lui  $2, 1
+# CHECK: addu $2, $2, $1
+# CHECK: lw   $1, 0($2)
     .set    at=$2
-    jr    $at
-    nop
-# CHECK:   jr    $3                      # encoding: [0x08,0x00,0x60,0x00]
+        lw      $1, 65536($1)
+# CHECK: lui  $3, 1
+# CHECK: addu $3, $3, $1
+# CHECK: lw   $1, 0($3)
     .set    at=$3
-    jr    $at
-    nop
-# CHECK:   jr    $4                      # encoding: [0x08,0x00,0x80,0x00]
+        lw      $1, 65536($1)
+# CHECK: lui  $4, 1
+# CHECK: addu $4, $4, $1
+# CHECK: lw   $1, 0($4)
     .set    at=$a0
-    jr    $at
-    nop
-# CHECK:   jr    $5                      # encoding: [0x08,0x00,0xa0,0x00]
+        lw      $1, 65536($1)
+# CHECK: lui  $5, 1
+# CHECK: addu $5, $5, $1
+# CHECK: lw   $1, 0($5)
     .set    at=$a1
-    jr    $at
-    nop
-# CHECK:   jr    $6                      # encoding: [0x08,0x00,0xc0,0x00]
+        lw      $1, 65536($1)
+# CHECK: lui  $6, 1
+# CHECK: addu $6, $6, $1
+# CHECK: lw   $1, 0($6)
     .set    at=$a2
-    jr    $at
-    nop
-# CHECK:   jr $7                # encoding: [0x08,0x00,0xe0,0x00]
+        lw      $1, 65536($1)
+# CHECK: lui  $7, 1
+# CHECK: addu $7, $7, $1
+# CHECK: lw   $1, 0($7)
     .set    at=$a3
-    jr    $at
-    nop
-# CHECK:   jr    $8                      # encoding: [0x08,0x00,0x00,0x01]
+        lw      $1, 65536($1)
+# CHECK: lui  $8, 1
+# CHECK: addu $8, $8, $1
+# CHECK: lw   $1, 0($8)
     .set    at=$8
-    jr    $at
-    nop
-# CHECK:   jr    $9                      # encoding: [0x08,0x00,0x20,0x01]
+        lw      $1, 65536($1)
+# CHECK: lui  $9, 1
+# CHECK: addu $9, $9, $1
+# CHECK: lw   $1, 0($9)
     .set    at=$9
-    jr    $at
-    nop
-# CHECK:   jr    $10                     # encoding: [0x08,0x00,0x40,0x01]
+        lw      $1, 65536($1)
+# CHECK: lui  $10, 1
+# CHECK: addu $10, $10, $1
+# CHECK: lw   $1, 0($10)
     .set    at=$10
-    jr    $at
-    nop
-# CHECK:   jr    $11                     # encoding: [0x08,0x00,0x60,0x01]
+        lw      $1, 65536($1)
+# CHECK: lui  $11, 1
+# CHECK: addu $11, $11, $1
+# CHECK: lw   $1, 0($11)
     .set    at=$11
-    jr    $at
-    nop
-# CHECK:   jr    $12                     # encoding: [0x08,0x00,0x80,0x01]
+        lw      $1, 65536($1)
+# CHECK: lui  $12, 1
+# CHECK: addu $12, $12, $1
+# CHECK: lw   $1, 0($12)
     .set    at=$12
-    jr    $at
-    nop
-# CHECK:   jr    $13                     # encoding: [0x08,0x00,0xa0,0x01]
+        lw      $1, 65536($1)
+# CHECK: lui  $13, 1
+# CHECK: addu $13, $13, $1
+# CHECK: lw   $1, 0($13)
     .set    at=$13
-    jr    $at
-    nop
-# CHECK:   jr    $14                     # encoding: [0x08,0x00,0xc0,0x01]
+        lw      $1, 65536($1)
+# CHECK: lui  $14, 1
+# CHECK: addu $14, $14, $1
+# CHECK: lw   $1, 0($14)
     .set    at=$14
-    jr    $at
-    nop
-# CHECK:   jr    $15                     # encoding: [0x08,0x00,0xe0,0x01]
+        lw      $1, 65536($1)
+# CHECK: lui  $15, 1
+# CHECK: addu $15, $15, $1
+# CHECK: lw   $1, 0($15)
     .set    at=$15
-    jr    $at
-    nop
-# CHECK:   jr    $16                     # encoding: [0x08,0x00,0x00,0x02]
+        lw      $1, 65536($1)
+# CHECK: lui  $16, 1
+# CHECK: addu $16, $16, $1
+# CHECK: lw   $1, 0($16)
     .set    at=$s0
-    jr    $at
-    nop
-# CHECK:   jr    $17                     # encoding: [0x08,0x00,0x20,0x02]
+        lw      $1, 65536($1)
+# CHECK: lui  $17, 1
+# CHECK: addu $17, $17, $1
+# CHECK: lw   $1, 0($17)
     .set    at=$s1
-    jr    $at
-    nop
-# CHECK:   jr    $18                     # encoding: [0x08,0x00,0x40,0x02]
+        lw      $1, 65536($1)
+# CHECK: lui  $18, 1
+# CHECK: addu $18, $18, $1
+# CHECK: lw   $1, 0($18)
     .set    at=$s2
-    jr    $at
-    nop
-# CHECK:   jr    $19                     # encoding: [0x08,0x00,0x60,0x02]
+        lw      $1, 65536($1)
+# CHECK: lui  $19, 1
+# CHECK: addu $19, $19, $1
+# CHECK: lw   $1, 0($19)
     .set    at=$s3
-    jr    $at
-    nop
-# CHECK:   jr    $20                     # encoding: [0x08,0x00,0x80,0x02]
+        lw      $1, 65536($1)
+# CHECK: lui  $20, 1
+# CHECK: addu $20, $20, $1
+# CHECK: lw   $1, 0($20)
     .set    at=$s4
-    jr    $at
-    nop
-# CHECK:   jr    $21                     # encoding: [0x08,0x00,0xa0,0x02]
+        lw      $1, 65536($1)
+# CHECK: lui  $21, 1
+# CHECK: addu $21, $21, $1
+# CHECK: lw   $1, 0($21)
     .set    at=$s5
-    jr    $at
-    nop
-# CHECK:   jr    $22                     # encoding: [0x08,0x00,0xc0,0x02]
+        lw      $1, 65536($1)
+# CHECK: lui  $22, 1
+# CHECK: addu $22, $22, $1
+# CHECK: lw   $1, 0($22)
     .set    at=$s6
-    jr    $at
-    nop
-# CHECK:   jr    $23                     # encoding: [0x08,0x00,0xe0,0x02]
+        lw      $1, 65536($1)
+# CHECK: lui  $23, 1
+# CHECK: addu $23, $23, $1
+# CHECK: lw   $1, 0($23)
     .set    at=$s7
-    jr    $at
-    nop
-# CHECK:   jr    $24                     # encoding: [0x08,0x00,0x00,0x03]
+        lw      $1, 65536($1)
+# CHECK: lui  $24, 1
+# CHECK: addu $24, $24, $1
+# CHECK: lw   $1, 0($24)
     .set    at=$24
-    jr    $at
-    nop
-# CHECK:   jr    $25                     # encoding: [0x08,0x00,0x20,0x03]
+        lw      $1, 65536($1)
+# CHECK: lui  $25, 1
+# CHECK: addu $25, $25, $1
+# CHECK: lw   $1, 0($25)
     .set    at=$25
-    jr    $at
-    nop
-# CHECK:   jr    $26                     # encoding: [0x08,0x00,0x40,0x03]
+        lw      $1, 65536($1)
+# CHECK: lui  $26, 1
+# CHECK: addu $26, $26, $1
+# CHECK: lw   $1, 0($26)
     .set    at=$26
-    jr    $at
-    nop
-# CHECK:   jr    $27                     # encoding: [0x08,0x00,0x60,0x03]
+        lw      $1, 65536($1)
+# CHECK: lui  $27, 1
+# CHECK: addu $27, $27, $1
+# CHECK: lw   $1, 0($27)
     .set    at=$27
-    jr    $at
-    nop
-# CHECK:   jr    $gp                     # encoding: [0x08,0x00,0x80,0x03]
+        lw      $1, 65536($1)
+# CHECK: lui  $gp, 1
+# CHECK: addu $gp, $gp, $1
+# CHECK: lw   $1, 0($gp)
     .set    at=$gp
-    jr    $at
-    nop
-# CHECK:   jr    $fp                     # encoding: [0x08,0x00,0xc0,0x03]
+        lw      $1, 65536($1)
+# CHECK: lui  $fp, 1
+# CHECK: addu $fp, $fp, $1
+# CHECK: lw   $1, 0($fp)
     .set    at=$fp
-    jr    $at
-    nop
-# CHECK:   jr    $sp                     # encoding: [0x08,0x00,0xa0,0x03]
+        lw      $1, 65536($1)
+# CHECK: lui  $sp, 1
+# CHECK: addu $sp, $sp, $1
+# CHECK: lw   $1, 0($sp)
     .set    at=$sp
-    jr    $at
-    nop
-# CHECK:   jr    $ra                     # encoding: [0x08,0x00,0xe0,0x03]
+        lw      $1, 65536($1)
+# CHECK: lui  $ra, 1
+# CHECK: addu $ra, $ra, $1
+# CHECK: lw   $1, 0($ra)
     .set    at=$ra
-    jr    $at
-    nop
+        lw      $1, 65536($1)





More information about the llvm-commits mailing list