[PATCH] D43892: [YAML] speed up isNumber by doing regex matching less often
Zachary Turner via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Mar 1 10:20:46 PST 2018
zturner added inline comments.
Comment at: include/llvm/Support/YAMLTraits.h:479-480
- return false;
+ Regex FloatMatcher("^(\\.[0-9]+|[0-9]+(\\.[0-9]*)?)([eE][-+]?[0-9]+)?$");
+ return FloatMatcher.match(S);
> pelikan wrote:
> > dberris wrote:
> > > Does it make sense to make the `Regex` object `static` and `const` so that we only compile/initialise it once?
> > I was too lazy to look into Regex implementation to check whether it actually makes sense. I bet the current version is faster though.
> Why would this be faster than having it compiled once, and only the first time it's needed?
> I suspect if you do that, instead of having to do a linear search first, would be much faster if it's possible to re-use a Regex object, compile it once, and re-use for all the times it's needed.
Agree, this will make the case where it's not a number faster, but that's the uncommon case. The case where it *is* a number will become slower. I agree with Dean's suggestion of compiling the regex only once, but we can still do an early out if it's obviously not a number. However, instead of checking the entire string, how about just checking the first character?
More information about the llvm-commits