Recognize alternative register names like ip -> r12.
authorOwen Anderson <resistor@mac.com>
Thu, 13 Jan 2011 22:50:36 +0000 (22:50 +0000)
committerOwen Anderson <resistor@mac.com>
Thu, 13 Jan 2011 22:50:36 +0000 (22:50 +0000)
Fixes <rdar://problem/8857982>.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123409 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/ARM/AsmParser/ARMAsmParser.cpp

index d849fa59961a72bf94d40e3c26794b62516663a7..a34fdb66cf256a5fd6b6e269a474476c7199f031 100644 (file)
@@ -24,6 +24,7 @@
 #include "llvm/Support/SourceMgr.h"
 #include "llvm/Support/raw_ostream.h"
 #include "llvm/ADT/SmallVector.h"
+#include "llvm/ADT/StringExtras.h"
 #include "llvm/ADT/StringSwitch.h"
 #include "llvm/ADT/Twine.h"
 using namespace llvm;
@@ -495,9 +496,19 @@ int ARMAsmParser::TryParseRegister() {
 
   // FIXME: Validate register for the current architecture; we have to do
   // validation later, so maybe there is no need for this here.
-  unsigned RegNum = MatchRegisterName(Tok.getString());
-  if (RegNum == 0)
-    return -1;
+  std::string upperCase = Tok.getString().str();
+  std::string lowerCase = LowercaseString(upperCase);
+  unsigned RegNum = MatchRegisterName(lowerCase);
+  if (!RegNum) {
+    RegNum = StringSwitch<unsigned>(lowerCase)
+      .Case("r13", ARM::SP)
+      .Case("r14", ARM::LR)
+      .Case("r15", ARM::PC)
+      .Case("ip", ARM::R12)
+      .Default(0);
+  }
+  if (!RegNum) return -1;
+  
   Parser.Lex(); // Eat identifier token.
   return RegNum;
 }