Emit the warning about the register list not being in ascending order only once.
authorBill Wendling <isanbard@gmail.com>
Tue, 9 Nov 2010 23:45:59 +0000 (23:45 +0000)
committerBill Wendling <isanbard@gmail.com>
Tue, 9 Nov 2010 23:45:59 +0000 (23:45 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@118653 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/ARM/AsmParser/ARMAsmParser.cpp

index 12225b00ed0556c03541b6c73900be24f6f1253e..dc5a4170595956c25870c2c0fdef6c0149aeefdc 100644 (file)
@@ -512,24 +512,27 @@ ARMOperand *ARMAsmParser::ParseRegisterList() {
   SmallVectorImpl<std::pair<unsigned, SMLoc> >::const_iterator
     RI = Registers.begin(), RE = Registers.end();
 
-  unsigned HighRegNum = RI->first;
   DenseMap<unsigned, bool> RegMap;
   RegMap[RI->first] = true;
 
+  unsigned HighRegNum = RI->first;
+  bool EmittedWarning = false;
+
   for (++RI; RI != RE; ++RI) {
     const std::pair<unsigned, SMLoc> &RegInfo = *RI;
+    unsigned Reg = RegInfo.first;
 
-    if (RegMap[RegInfo.first]) {
+    if (RegMap[Reg]) {
       Error(RegInfo.second, "register duplicated in register list");
       return 0;
     }
 
-    if (RegInfo.first < HighRegNum)
+    if (!EmittedWarning && Reg < HighRegNum)
       Warning(RegInfo.second,
               "register not in ascending order in register list");
 
-    RegMap[RegInfo.first] = true;
-    HighRegNum = std::max(RegInfo.first, HighRegNum);
+    RegMap[Reg] = true;
+    HighRegNum = std::max(Reg, HighRegNum);
   }
 
   return ARMOperand::CreateRegList(Registers, S, E);