[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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@237366 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Toma Tabacu 2015-05-14 14:51:32 +00:00
parent 23b0065f29
commit e6f281a2ff
3 changed files with 89 additions and 0 deletions

View File

@ -1759,6 +1759,9 @@ bool MipsAsmParser::loadImmediate(int64_t ImmValue, unsigned DstReg,
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_t ImmValue, unsigned DstReg,
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_t ImmValue, unsigned DstReg,
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(MCInst &Inst, bool Is32BitImm, SMLoc IDLoc,
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");

View File

@ -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

View File

@ -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