diff options
author | Jim Grosbach <grosbach@apple.com> | 2011-08-22 18:50:36 +0000 |
---|---|---|
committer | Jim Grosbach <grosbach@apple.com> | 2011-08-22 18:50:36 +0000 |
commit | 5c932b24be74e38bd95624429465dceafb8ea6d8 (patch) | |
tree | 890ae12a6fdea2bc16ef5d9a8c0be31a48749be4 | |
parent | 4acfbcd918519a56cb4b2dff5f31ea7d989404ab (diff) | |
download | bcm5719-llvm-5c932b24be74e38bd95624429465dceafb8ea6d8.tar.gz bcm5719-llvm-5c932b24be74e38bd95624429465dceafb8ea6d8.zip |
Tighten up ARM reglist validation a bit.
llvm-svn: 138258
-rw-r--r-- | llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp | 17 |
1 files changed, 6 insertions, 11 deletions
diff --git a/llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp b/llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp index 3e768f25317..31300aea569 100644 --- a/llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp +++ b/llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp @@ -24,6 +24,7 @@ #include "llvm/Target/TargetRegistry.h" #include "llvm/Support/SourceMgr.h" #include "llvm/Support/raw_ostream.h" +#include "llvm/ADT/BitVector.h" #include "llvm/ADT/OwningPtr.h" #include "llvm/ADT/STLExtras.h" #include "llvm/ADT/SmallVector.h" @@ -1661,17 +1662,11 @@ parseRegisterList(SmallVectorImpl<MCParsedAsmOperand*> &Operands) { Parser.Lex(); // Eat right curly brace token. // Verify the register list. - SmallVectorImpl<std::pair<unsigned, SMLoc> >::const_iterator - RI = Registers.begin(), RE = Registers.end(); - - unsigned HighRegNum = getARMRegisterNumbering(RI->first); bool EmittedWarning = false; - - DenseMap<unsigned, bool> RegMap; - RegMap[HighRegNum] = true; - - for (++RI; RI != RE; ++RI) { - const std::pair<unsigned, SMLoc> &RegInfo = *RI; + unsigned HighRegNum = 0; + BitVector RegMap(32); + for (unsigned i = 0, e = Registers.size(); i != e; ++i) { + const std::pair<unsigned, SMLoc> &RegInfo = Registers[i]; unsigned Reg = getARMRegisterNumbering(RegInfo.first); if (RegMap[Reg]) { @@ -1683,7 +1678,7 @@ parseRegisterList(SmallVectorImpl<MCParsedAsmOperand*> &Operands) { Warning(RegInfo.second, "register not in ascending order in register list"); - RegMap[Reg] = true; + RegMap.set(Reg); HighRegNum = std::max(Reg, HighRegNum); } |