ARM asm parser, just issue a warning for a duplicate reg in a list.

For better 'gas' compatibility.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@146185 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Jim Grosbach 2011-12-08 21:34:20 +00:00
parent cf405ba7a6
commit a62d11ea94

View File

@ -2596,6 +2596,7 @@ parseRegisterList(SmallVectorImpl<MCParsedAsmOperand*> &Operands) {
Parser.Lex(); // Eat the comma. Parser.Lex(); // Eat the comma.
RegLoc = Parser.getTok().getLoc(); RegLoc = Parser.getTok().getLoc();
int OldReg = Reg; int OldReg = Reg;
const AsmToken RegTok = Parser.getTok();
Reg = tryParseRegister(); Reg = tryParseRegister();
if (Reg == -1) if (Reg == -1)
return Error(RegLoc, "register expected"); return Error(RegLoc, "register expected");
@ -2609,8 +2610,13 @@ parseRegisterList(SmallVectorImpl<MCParsedAsmOperand*> &Operands) {
if (!RC->contains(Reg)) if (!RC->contains(Reg))
return Error(RegLoc, "invalid register in register list"); return Error(RegLoc, "invalid register in register list");
// List must be monotonically increasing. // List must be monotonically increasing.
if (getARMRegisterNumbering(Reg) <= getARMRegisterNumbering(OldReg)) if (getARMRegisterNumbering(Reg) < getARMRegisterNumbering(OldReg))
return Error(RegLoc, "register list not in ascending order"); return Error(RegLoc, "register list not in ascending order");
if (getARMRegisterNumbering(Reg) == getARMRegisterNumbering(OldReg)) {
Warning(RegLoc, "duplicated register (" + RegTok.getString() +
") in register list");
continue;
}
// VFP register lists must also be contiguous. // VFP register lists must also be contiguous.
// It's OK to use the enumeration values directly here rather, as the // It's OK to use the enumeration values directly here rather, as the
// VFP register classes have the enum sorted properly. // VFP register classes have the enum sorted properly.