[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