Clean up the APInt function getDigit.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@79602 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Support/APInt.cpp b/lib/Support/APInt.cpp
index 6943d27..eca6324 100644
--- a/lib/Support/APInt.cpp
+++ b/lib/Support/APInt.cpp
@@ -46,30 +46,27 @@
 
 /// A utility function that converts a character to a digit.
 inline static unsigned getDigit(char cdigit, uint8_t radix) {
-  // Get a digit
-  unsigned digit = 0;
+  unsigned r;
+
   if (radix == 16) {
-    if (!isxdigit(cdigit))
-      llvm_unreachable("Invalid hex digit in string");
-    if (isdigit(cdigit))
-      digit = cdigit - '0';
-    else if (cdigit >= 'a')
-      digit = cdigit - 'a' + 10;
-    else if (cdigit >= 'A')
-      digit = cdigit - 'A' + 10;
-    else
-      llvm_unreachable("huh? we shouldn't get here");
-  } else if (isdigit(cdigit)) {
-    digit = cdigit - '0';
-    assert((radix == 10 ||
-            (radix == 8 && digit != 8 && digit != 9) ||
-            (radix == 2 && (digit == 0 || digit == 1))) &&
-           "Invalid digit in string for given radix");
-  } else {
-    llvm_unreachable("Invalid character in digit string");
+    r = cdigit - '0';
+    if (r <= 9)
+      return r;
+
+    r = cdigit - 'A';
+    if (r <= 5)
+      return r + 10;
+
+    r = cdigit - 'a';
+    if (r <= 5)
+      return r + 10;
   }
 
-  return digit;
+  r = cdigit - '0';
+  if (r < radix)
+    return r;
+
+  return -1U;
 }
 
 
@@ -2076,6 +2073,7 @@
   // Enter digit traversal loop
   for (StringRef::iterator e = str.end(); p != e; ++p) {
     unsigned digit = getDigit(*p, radix);
+    assert(digit < radix && "Invalid character in digit string");
 
     // Shift or multiply the value by the radix
     if (slen > 1) {