gecko-dev/mfbt
Julian Seward 518297a7d8 Bug 1795644 - A bit of tuning of inlining in the JS parser. r=arai.
Some profiling of tcampbell's React benchmark [1] shows 6.1 million calls to
js::frontend::GeneralTokenStreamChars<..>::getFullAsciiCodePoint, using 110.57
million instructions (x86_64).  That comes out to only 18 insns per call,
which suggests the method is a good candidate for inlining, but it isn't
inlined.

Merely parking an inline annotation on it doesn't help much, because it gets
inlined into js::frontend::TokenStreamSpecific<..>::getCodePoint, but that
isn't inlined into *its* caller(s), so the 6.1 million calls move to
::getCodePoint instead.

This patch requests inlining for both ::getFullAsciiCodePoint and
::getCodePoint and adds some MOZ_NEVER_INLINE annotations to ensure that cold
paths *don't* get inlined into these two, to reduce code bloat and avoid
excessive register pressure.

IsAscii functions in mfbt/TextUtils.h have been marked inline as a precaution;
this probably isn't necessary.

Run time with config [2] is reduced from 0.390 seconds to 0.379 seconds
(2.8% speedup, best of 50 runs), and from 0.402 to 0.396 seconds
(median of 50 runs).

Instruction count falls from 3511.8 million to 3395.8 million, and the number
of data accesses from 1563.7 million to 1487.4 million -- a 4.8% reduction
that is probably caused by avoidance of save/restore sequences in the inlined
fns.

[1] https://github.com/mozilla-spidermonkey/matrix-react-bench

[2] Fedora 35, x86_64, Intel Core i5 1135G7 at 4 ish GHz
    configure: --disable-debug --enable-optimize="-g -O2"
    run:       --no-threads

Differential Revision: https://phabricator.services.mozilla.com/D159500
2022-10-18 05:22:03 +00:00
..
double-conversion Bug 1749348 - Update double-conversion to version 3.2.1. r=glandium 2022-08-09 13:47:44 +00:00
lz4 Bug 1784990 - Update lz4 to 1.9.4. r=glandium 2022-08-31 16:10:45 +00:00
tests Bug 1783242 - Part 3: Remove BufferList::Extract, r=glandium,ipc-reviewers,mccr8 2022-09-28 19:25:14 +00:00
Algorithm.h
Alignment.h
AllocPolicy.h
AlreadyAddRefed.h Bug 1519636 - Reformat recent changes to the Google coding style r=andi,media-playback-reviewers,necko-reviewers,padenot,dragana 2022-06-07 12:32:55 +00:00
Array.h Bug 1733963 - Part 1: Make BitSet work as storage for EnumSet. r=glandium 2021-11-09 12:34:51 +00:00
ArrayUtils.h
Assertions.cpp Bug 1624717 - Copy release mode bounds checking from nsTArray to Array r=glandium 2021-09-09 13:29:18 +00:00
Assertions.h Bug 1748969 - Move definition of MOZ_DIAGNOSTIC_ASSERT_ENABLED to configure. r=emilio 2022-01-07 21:24:44 +00:00
AtomicBitfields.h Bug 1701879 part 5 - Add stub atomics implementation for WASI. r=wingo,glandium 2021-04-20 05:15:28 +00:00
Atomics.h Bug 1701879 part 5 - Add stub atomics implementation for WASI. r=wingo,glandium 2021-04-20 05:15:28 +00:00
Attributes.h Bug 1783051 - Turn default browser agent's EventLog into a Windows-only header utility. r=rkraesig 2022-08-17 20:01:58 +00:00
BinarySearch.h Bug 1772006 - Part 4: Simplify and move the string comparison APIs from ns[T]StringObsolete, r=xpcom-reviewers,necko-reviewers,dragana,barret 2022-07-30 00:12:48 +00:00
BitSet.h Bug 1768632: Make EnumSet compile for MSVC. r=glandium 2022-08-17 06:39:12 +00:00
BloomFilter.h
Buffer.h
BufferList.h Bug 1783242 - Part 3: Remove BufferList::Extract, r=glandium,ipc-reviewers,mccr8 2022-09-28 19:25:14 +00:00
Casting.h
ChaosMode.cpp
ChaosMode.h
Char16.h Bug 1766549 - Remove some char16ptr_t operators that allow implicit const-casting. r=nika 2022-04-27 22:28:24 +00:00
CheckedInt.h Bug 1743012 - Add missing constexpr qualifiers in CheckedInt, r=glandium 2021-11-26 19:18:49 +00:00
CompactPair.h
Compiler.h
Compression.cpp
Compression.h
DbgMacro.h
DebugOnly.h
DefineEnum.h
DoublyLinkedList.h Bug 1777925: Replaced MutationObserver array container type with linked list. r=smaug 2022-09-21 11:31:44 +00:00
EndianUtils.h
EnumeratedArray.h
EnumeratedRange.h Bug 1730774 part 1: Give EnumeratedRange.h an include for Assertions.h, since it includes MOZ_ASSERT statements. r=TYLin 2021-09-14 22:06:22 +00:00
EnumSet.h Bug 1768632: Make EnumSet compile for MSVC. r=glandium 2022-08-17 06:39:12 +00:00
EnumTypeTraits.h
fallible.h
FastBernoulliTrial.h
FloatingPoint.cpp
FloatingPoint.h
FStream.h
FunctionRef.h
FunctionTypeTraits.h
Fuzzing.h Bug 1765543 - Add snapshot fuzzing build using Nyx r=decoder,taskgraph-reviewers,ahal 2022-05-04 19:24:58 +00:00
HashFunctions.cpp Bug 1719396: Don't hash sizeof(size_t) in HashBytes r=glandium 2021-07-19 21:35:40 +00:00
HashFunctions.h Bug 1341265 - Part 11: Optimise Set.prototype.has for objects in CacheIR. r=iain 2021-08-10 09:55:22 +00:00
HashTable.h Bug 1779940 part 2 - Add HashMap::put which relies on lookup. r=arai 2022-08-25 15:03:29 +00:00
HelperMacros.h
InitializedOnce.h
IntegerRange.h
IntegerTypeTraits.h
JSONWriter.cpp
JSONWriter.h Bug 1784812 - JSONWriter may optionally not own its writer - r=canaltinova 2022-08-17 07:07:53 +00:00
JsRust.h
Latin1.h
Likely.h
LinkedList.h Bug 1750791 - Part 1: Add LinkedList::mergeBack and LinkedList::splice. r=glandium 2022-02-24 15:00:27 +00:00
MacroArgs.h
MacroForEach.h
MathAlgorithms.h Bug 1735715 - Handle gMaxSubPageClass == 0 properly r=glandium 2021-10-21 06:03:45 +00:00
Maybe.h Bug 1761040 - Prefix thread safety macros with MOZ_ r=geckoview-reviewers,media-playback-reviewers,alwu,jesup,m_kato 2022-08-03 16:39:41 +00:00
MaybeOneOf.h Bug 1766276 - Give MaybeOneOf a map method r=jandem 2022-04-26 12:29:24 +00:00
MaybeStorageBase.h
MemoryChecking.h
MemoryReporting.h
MoveOnlyFunction.h Bug 1743020 - Part 3: Export mozilla::MoveOnlyFunction based on function2, r=glandium 2022-06-02 13:24:10 +00:00
moz.build Bug 1784990 - Update lz4 to 1.9.4. r=glandium 2022-08-31 16:10:45 +00:00
NonDereferenceable.h
NotNull.h
Opaque.h
OperatorNewExtensions.h
PairHash.h
Path.h
PodOperations.h
Poison.cpp Bug 1701620 part 4 - Fix memory support for WASI. r=jandem,sfink 2021-04-13 08:25:10 +00:00
Poison.h
RandomNum.cpp Bug 1780215 - Use arc4random_buf within GenerateRandomBytesFromOS when compiling to wasi r=jandem 2022-07-20 13:17:54 +00:00
RandomNum.h Bug 1723674 - mfbt: Add new GenerateRandomBytes() function. r=cmartin 2021-10-14 03:28:48 +00:00
Range.h
RangedArray.h
RangedPtr.h
ReentrancyGuard.h
RefCounted.h Bug 1746540 - Move --enable-logrefcnt to python configure. r=nika,firefox-build-system-reviewers,mhentges 2021-12-18 00:32:35 +00:00
RefCountType.h
RefPtr.h Bug 1710145 - Deduction guide RefPtr(already_AddRefed<T>) -> RefPtr<T> - r=kmag 2021-05-11 21:55:21 +00:00
Result.h Bug 1769518 - Support Rooted<Result<V,E>> as long as V and E have GCPolicy<> defined for them. (Use IgnoreGCPolicy for whichever of them does not need tracing.) r=emilio,nbp,jonco 2022-05-26 17:22:35 +00:00
ResultExtensions.h Bug 1732642 - Handle complex types in MOZ_TO_RESULT_INVOKE_MEMBER_TYPED; r=dom-storage-reviewers,jari 2021-11-30 05:05:53 +00:00
ResultVariant.h Bug 1769518 - Support Rooted<Result<V,E>> as long as V and E have GCPolicy<> defined for them. (Use IgnoreGCPolicy for whichever of them does not need tracing.) r=emilio,nbp,jonco 2022-05-26 17:22:35 +00:00
ReverseIterator.h
RollingMean.h
Saturate.h
Scoped.h
ScopeExit.h Bug 1725572 - Part 1: Support move-only closures in ScopeExit, r=glandium 2021-09-23 18:54:31 +00:00
SegmentedVector.h Bug 1730534 - Part 1: Assert state of SegmentedVector iterator is valid r=mccr8 2021-09-27 16:41:51 +00:00
SHA1.cpp
SHA1.h
SharedLibrary.h
SmallPointerArray.h
Span.h Bug 1761536 - Part 2: Replace nsTArray::elem_type with value_type, r=mccr8 2022-04-01 17:00:25 +00:00
SplayTree.h
SPSCQueue.h Bug 1769484 - Replace std::memory_order::memory_order_XYZ with std::memory_order_XYZ. r=padenot 2022-05-17 03:24:09 +00:00
StaticAnalysisFunctions.h Bug 1699844 - Add an escape hatch for the refcounted inside lambda checker. r=andi 2021-04-14 19:12:02 +00:00
STYLE
TaggedAnonymousMemory.cpp
TaggedAnonymousMemory.h Bug 1701620 part 4 - Fix memory support for WASI. r=jandem,sfink 2021-04-13 08:25:10 +00:00
Tainting.h
TemplateLib.h
TextUtils.h Bug 1795644 - A bit of tuning of inlining in the JS parser. r=arai. 2022-10-18 05:22:03 +00:00
ThreadLocal.h
ThreadSafety.h Bug 1761040 - Prefix thread safety macros with MOZ_ r=geckoview-reviewers,media-playback-reviewers,alwu,jesup,m_kato 2022-08-03 16:39:41 +00:00
ThreadSafeWeakPtr.h Bug 1738106 - Part 2: Allow XPCOM classes to use SupportsThreadSafeWeakPtr, r=glandium,xpcom-reviewers 2022-05-02 20:37:34 +00:00
ToString.h
TsanOptions.h Bug 1768616 - TSAN suppression list update for Ubuntu 22.04 LTS. r=decoder 2022-05-10 11:54:55 +00:00
Tuple.h Bug 1788969 - Correct ForEach Tuple helper functions. r=glandium 2022-09-22 18:28:15 +00:00
TypedEnumBits.h
Types.h
TypeTraits.h
UniquePtr.h Bug 1782604 - Make UniquePtr(nullptr) constexpr r=glandium 2022-08-03 21:21:09 +00:00
UniquePtrExtensions.cpp
UniquePtrExtensions.h Bug 1734735 - Part 2: Support getter_Transfers with non-pointer UniquePtr types, r=glandium 2021-11-23 16:15:21 +00:00
Unused.cpp
Unused.h
Utf8.cpp
Utf8.h Bug 1742115 - Fix UnsafeConvertValidUtf8toUtf16 to wrap the correct Rust implementation. r=hsivonen 2021-11-19 18:57:44 +00:00
Variant.h Bug 1719959 - Better Tag type choice, fixed corresponding test - r=emilio 2021-07-11 09:43:50 +00:00
Vector.h Bug 1782562 - be more conservative in max Vector size r=jandem 2022-08-08 22:59:15 +00:00
WasiAtomic.h Bug 1758780 - Fallthrough to <atomic> for wasi when using clang >= 14. r=nika 2022-04-13 03:02:24 +00:00
WeakPtr.h
WindowsVersion.h Bug 1722208 - Fix automatically displaying the on-screen keyboard on Windows 11 when running on convertible slates r=cmartin 2021-10-28 21:08:12 +00:00
WrappingOperations.h
XorShift128PlusRNG.h