[llvm] r237366 - [mips] [IAS] Enforce .set nomacro.

Toma Tabacu toma.tabacu at imgtec.com
Thu May 14 07:51:33 PDT 2015


Author: tomatabacu
Date: Thu May 14 09:51:32 2015
New Revision: 237366

URL: http://llvm.org/viewvc/llvm-project?rev=237366&view=rev
Log:
[mips] [IAS] Enforce .set nomacro.

Summary: When used, ".set nomacro" causes warning messages to be reported when we expand pseudo-instructions to multiple machine instructions.

Reviewers: dsanders

Reviewed By: dsanders

Subscribers: llvm-commits

Differential Revision: http://reviews.llvm.org/D9564

Added:
    llvm/trunk/test/MC/Mips/set-nomacro-micromips.s
    llvm/trunk/test/MC/Mips/set-nomacro.s
Modified:
    llvm/trunk/lib/Target/Mips/AsmParser/MipsAsmParser.cpp

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=237366&r1=237365&r2=237366&view=diff
==============================================================================
--- llvm/trunk/lib/Target/Mips/AsmParser/MipsAsmParser.cpp (original)
+++ llvm/trunk/lib/Target/Mips/AsmParser/MipsAsmParser.cpp Thu May 14 09:51:32 2015
@@ -1759,6 +1759,9 @@ bool MipsAsmParser::loadImmediate(int64_
     tmpInst.addOperand(MCOperand::createImm(ImmValue));
     Instructions.push_back(tmpInst);
   } else if ((ImmValue & 0xffffffff) == ImmValue) {
+    if (!AssemblerOptions.back()->isMacro())
+      Warning(IDLoc, "macro instruction expanded into multiple instructions");
+
     // For all other values which are representable as a 32-bit integer:
     // li d,j => lui d,hi16(j)
     //           ori d,d,lo16(j)
@@ -1779,6 +1782,8 @@ bool MipsAsmParser::loadImmediate(int64_
       Error(IDLoc, "instruction requires a 32-bit immediate");
       return true;
     }
+    if (!AssemblerOptions.back()->isMacro())
+      Warning(IDLoc, "macro instruction expanded into multiple instructions");
 
     //            <-------  lo32 ------>
     // <-------  hi32 ------>
@@ -1812,6 +1817,8 @@ bool MipsAsmParser::loadImmediate(int64_
       Error(IDLoc, "instruction requires a 32-bit immediate");
       return true;
     }
+    if (!AssemblerOptions.back()->isMacro())
+      Warning(IDLoc, "macro instruction expanded into multiple instructions");
 
     // <-------  hi32 ------> <-------  lo32 ------>
     // <- hi16 ->                        <- lo16 ->
@@ -1914,6 +1921,9 @@ MipsAsmParser::expandLoadAddressImm(MCIn
 void MipsAsmParser::expandLoadAddressSym(
     const MCOperand &DstRegOp, const MCOperand &SymOp, bool Is32BitSym,
     SMLoc IDLoc, SmallVectorImpl<MCInst> &Instructions) {
+  if (!AssemblerOptions.back()->isMacro())
+    Warning(IDLoc, "macro instruction expanded into multiple instructions");
+
   if (Is32BitSym && isABI_N64())
     Warning(IDLoc, "instruction loads the 32-bit address of a 64-bit symbol");
 

Added: llvm/trunk/test/MC/Mips/set-nomacro-micromips.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/Mips/set-nomacro-micromips.s?rev=237366&view=auto
==============================================================================
--- llvm/trunk/test/MC/Mips/set-nomacro-micromips.s (added)
+++ llvm/trunk/test/MC/Mips/set-nomacro-micromips.s Thu May 14 09:51:32 2015
@@ -0,0 +1,33 @@
+# RUN: llvm-mc %s -arch=mips -mcpu=mips32 -mattr=micromips 2>&1 | FileCheck %s
+
+  .text
+  .type main, @function
+  .set micromips
+main:
+# CHECK-NOT: warning: macro instruction expanded into multiple instructions
+  .set macro
+  b 132
+  b 1332
+  b bar
+
+  lwm $16, $17, 8($sp)
+  swm $16, $17, 8($sp)
+
+  add $4, $5, $6
+
+  .set noreorder
+  .set nomacro
+  b 132
+# CHECK-NOT: [[@LINE-1]]:3: warning: macro instruction expanded into multiple instructions
+  b 1332
+# CHECK-NOT: [[@LINE-1]]:3: warning: macro instruction expanded into multiple instructions
+  b bar
+# CHECK-NOT: [[@LINE-1]]:3: warning: macro instruction expanded into multiple instructions
+
+  lwm $16, $17, 8($sp)
+# CHECK-NOT: [[@LINE-1]]:3: warning: macro instruction expanded into multiple instructions
+  swm $16, $17, 8($sp)
+# CHECK-NOT: [[@LINE-1]]:3: warning: macro instruction expanded into multiple instructions
+
+  add $4, $5, $6
+# CHECK-NOT: [[@LINE-1]]:3: warning: macro instruction expanded into multiple instructions

Added: llvm/trunk/test/MC/Mips/set-nomacro.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/Mips/set-nomacro.s?rev=237366&view=auto
==============================================================================
--- llvm/trunk/test/MC/Mips/set-nomacro.s (added)
+++ llvm/trunk/test/MC/Mips/set-nomacro.s Thu May 14 09:51:32 2015
@@ -0,0 +1,46 @@
+# RUN: llvm-mc %s -arch=mips -mcpu=mips32 2>&1 | FileCheck %s
+
+# CHECK-NOT: warning: macro instruction expanded into multiple instructions
+  .set macro
+  li  $8, -16
+  li  $8, 16
+  li  $8, 161616
+
+  la  $8, 16
+  la  $8, 161616
+  la  $8, 16($9)
+  la  $8, 161616($9)
+  la  $8, symbol
+
+  jal $25
+  jal $4, $25
+
+  add $4, $5, $6
+
+  .set noreorder
+  .set nomacro
+  li  $8, -16
+# CHECK-NOT: [[@LINE-1]]:3: warning: macro instruction expanded into multiple instructions
+  li  $8, 16
+# CHECK-NOT: [[@LINE-1]]:3: warning: macro instruction expanded into multiple instructions
+  li  $8, 161616
+# CHECK: [[@LINE-1]]:3: warning: macro instruction expanded into multiple instructions
+
+  la  $8, 16
+# CHECK-NOT: [[@LINE-1]]:3: warning: macro instruction expanded into multiple instructions
+  la  $8, 161616
+# CHECK: [[@LINE-1]]:3: warning: macro instruction expanded into multiple instructions
+  la  $8, 16($9)
+# CHECK-NOT: [[@LINE-1]]:3: warning: macro instruction expanded into multiple instructions
+  la  $8, 161616($9)
+# CHECK: [[@LINE-1]]:3: warning: macro instruction expanded into multiple instructions
+  la  $8, symbol
+# CHECK: [[@LINE-1]]:3: warning: macro instruction expanded into multiple instructions
+
+  jal $25
+# CHECK-NOT: [[@LINE-1]]:3: warning: macro instruction expanded into multiple instructions
+  jal $4, $25
+# CHECK-NOT: [[@LINE-1]]:3: warning: macro instruction expanded into multiple instructions
+
+  add $4, $5, $6
+# CHECK-NOT: [[@LINE-1]]:3: warning: macro instruction expanded into multiple instructions





More information about the llvm-commits mailing list