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
ArrayUtils.h
Assertions.cpp
Assertions.h
AtomicBitfields.h
Atomics.h
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
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
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
HashFunctions.h
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
MacroArgs.h
MacroForEach.h
MathAlgorithms.h
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
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
Range.h
RangedArray.h
RangedPtr.h
ReentrancyGuard.h
RefCounted.h
RefCountType.h
RefPtr.h
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
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
SegmentedVector.h
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
STYLE
TaggedAnonymousMemory.cpp
TaggedAnonymousMemory.h
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
Unused.cpp
Unused.h
Utf8.cpp
Utf8.h
Variant.h
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
WrappingOperations.h
XorShift128PlusRNG.h