[PATCH] D90320: [llvm][StringExtras] Use a lookup table for `hexDigitValue`
River Riddle via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Oct 28 11:46:31 PDT 2020
rriddle updated this revision to Diff 301359.
rriddle added a comment.
Rebase
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D90320/new/
https://reviews.llvm.org/D90320
Files:
llvm/include/llvm/ADT/StringExtras.h
Index: llvm/include/llvm/ADT/StringExtras.h
===================================================================
--- llvm/include/llvm/ADT/StringExtras.h
+++ llvm/include/llvm/ADT/StringExtras.h
@@ -66,10 +66,51 @@
///
/// If \p C is not a valid hex digit, -1U is returned.
inline unsigned hexDigitValue(char C) {
- if (C >= '0' && C <= '9') return C-'0';
- if (C >= 'a' && C <= 'f') return C-'a'+10U;
- if (C >= 'A' && C <= 'F') return C-'A'+10U;
- return -1U;
+ // clang-format off
+ static const unsigned LUT[255] = {
+ /// 0-47: Non hexadecimal digits
+ -1U, -1U, -1U, -1U, -1U, -1U, -1U, -1U,
+ -1U, -1U, -1U, -1U, -1U, -1U, -1U, -1U,
+ -1U, -1U, -1U, -1U, -1U, -1U, -1U, -1U,
+ -1U, -1U, -1U, -1U, -1U, -1U, -1U, -1U,
+ -1U, -1U, -1U, -1U, -1U, -1U, -1U, -1U,
+ -1U, -1U, -1U, -1U, -1U, -1U, -1U, -1U,
+ /// 48-57: `0`-`9` hexadecimal digits
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+ /// 58-64: Non hexadecimal digits
+ -1U, -1U, -1U, -1U, -1U, -1U, -1U,
+ /// 65-70: `A`-`F` hexadecimal digits
+ 10, 11, 12, 13, 14, 15,
+ /// 71-96: Non hexadecimal digits
+ -1U, -1U, -1U, -1U, -1U, -1U, -1U, -1U,
+ -1U, -1U, -1U, -1U, -1U, -1U, -1U, -1U,
+ -1U, -1U, -1U, -1U, -1U, -1U, -1U, -1U,
+ -1U, -1U,
+ /// 97-102: `a`-`f` hexadecimal digits
+ 10, 11, 12, 13, 14, 15,
+ /// 103-254: Non hexadecimal digits
+ -1U, -1U, -1U, -1U, -1U, -1U, -1U, -1U,
+ -1U, -1U, -1U, -1U, -1U, -1U, -1U, -1U,
+ -1U, -1U, -1U, -1U, -1U, -1U, -1U, -1U,
+ -1U, -1U, -1U, -1U, -1U, -1U, -1U, -1U,
+ -1U, -1U, -1U, -1U, -1U, -1U, -1U, -1U,
+ -1U, -1U, -1U, -1U, -1U, -1U, -1U, -1U,
+ -1U, -1U, -1U, -1U, -1U, -1U, -1U, -1U,
+ -1U, -1U, -1U, -1U, -1U, -1U, -1U, -1U,
+ -1U, -1U, -1U, -1U, -1U, -1U, -1U, -1U,
+ -1U, -1U, -1U, -1U, -1U, -1U, -1U, -1U,
+ -1U, -1U, -1U, -1U, -1U, -1U, -1U, -1U,
+ -1U, -1U, -1U, -1U, -1U, -1U, -1U, -1U,
+ -1U, -1U, -1U, -1U, -1U, -1U, -1U, -1U,
+ -1U, -1U, -1U, -1U, -1U, -1U, -1U, -1U,
+ -1U, -1U, -1U, -1U, -1U, -1U, -1U, -1U,
+ -1U, -1U, -1U, -1U, -1U, -1U, -1U, -1U,
+ -1U, -1U, -1U, -1U, -1U, -1U, -1U, -1U,
+ -1U, -1U, -1U, -1U, -1U, -1U, -1U, -1U,
+ -1U, -1U, -1U, -1U, -1U, -1U, -1U, -1U
+ };
+ // clang-format on
+ return LUT[static_cast<unsigned char>(C)];
}
/// Checks if character \p C is one of the 10 decimal digits.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D90320.301359.patch
Type: text/x-patch
Size: 2365 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20201028/381631f5/attachment.bin>
More information about the llvm-commits
mailing list