Bug 192680 - clang-tidy: Fix unnecessary object copies in JavaScriptCore
Summary: clang-tidy: Fix unnecessary object copies in JavaScriptCore
Status: RESOLVED FIXED
Alias: None
Product: WebKit
Classification: Unclassified
Component: JavaScriptCore (show other bugs)
Version: WebKit Local Build
Hardware: Unspecified Unspecified
: P2 Normal
Assignee: David Kilzer (:ddkilzer)
URL:
Keywords: InRadar
Depends on:
Blocks:
 
Reported: 2018-12-13 14:08 PST by David Kilzer (:ddkilzer)
Modified: 2018-12-13 16:19 PST (History)
10 users (show)

See Also:


Attachments
Patch v1 (11.97 KB, patch)
2018-12-13 14:21 PST, David Kilzer (:ddkilzer)
no flags Details | Formatted Diff | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description David Kilzer (:ddkilzer) 2018-12-13 14:08:29 PST
Running `clang-tidy -checks='-*,performance-*,-performance-noexcept-*' ...` on JavaScriptCore source files found these unnecessary object copies:

Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:6296:27: warning: the parameter 'fastTrue' is copied for each invocation but only used as a const reference; consider making it a const reference [performance-unnecessary-value-param]
    JITCompiler::JumpList fastTrue, JITCompiler::JumpList fastFalse)
                          ^
    const                &
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:6296:59: warning: the parameter 'fastFalse' is copied for each invocation but only used as a const reference; consider making it a const reference [performance-unnecessary-value-param]
    JITCompiler::JumpList fastTrue, JITCompiler::JumpList fastFalse)
                                                          ^
                                    const                &

Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:190:166: warning: the parameter 'slowPathTarget' is copied for each invocation but only used as a const reference; consider making it a const reference [performance-unnecessary-value-param]
void SpeculativeJIT::cachedGetByIdWithThis(CodeOrigin codeOrigin, GPRReg baseGPR, GPRReg thisGPR, GPRReg resultGPR, unsigned identifierNumber, JITCompiler::JumpList slowPathTarget)
                                                                                                                                                                     ^
                                                                                                                                               const                &

Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:11291:32: warning: the parameter 'set' is copied for each invocation but only used as a const reference; consider making it a const reference [performance-unnecessary-value-param]
        RegisteredStructureSet set, const Functor& weakStructureDiscriminant)
                               ^
        const                 &

Source/JavaScriptCore/jsc.cpp:820:10: warning: the variable 'referrer' is copy-construct
ed from a const reference but is only used as const reference; consider making it a const reference [performance-unneces
sary-copy-initialization]
    auto referrer = sourceOrigin.string();
         ^
    const  &
Source/JavaScriptCore/jsc.cpp:821:10: warning: the variable 'moduleName' is copy-constructed from a const reference but is only used as const reference; consider making it a const reference [performance-unnecessary-copy-initialization]
    auto moduleName = moduleNameValue->value(exec);
         ^
    const  &
Source/JavaScriptCore/jsc.cpp:1646:29: warning: the parameter 'string' is copied for each invocation but only used as a const reference; consider making it a const reference [performance-unnecessary-value-param]
void Workers::report(String string)
                            ^
                     const &
Source/JavaScriptCore/jsc.cpp:1926:107: warning: the parameter #3 is copied for each invocation but only used as a const reference; consider making it a const reference [performance-unnecessary-value-param]
typename std::enable_if<!std::is_fundamental<ValueType>::value>::type addOption(VM&, JSObject*, Identifier, ValueType) { }
                                                                                                          ^
                                                                                                const     &
Source/JavaScriptCore/jsc.cpp:1929:124: warning: the parameter 'identifier' is copied for each invocation but only used as a const reference; consider making it a const reference [performance-unnecessary-value-param]
typename std::enable_if<std::is_fundamental<ValueType>::value>::type addOption(VM& vm, JSObject* optionsObject, Identifier identifier, ValueType value)
                                                                                                                           ^
                                                                                                                const     &
Source/JavaScriptCore/jsc.cpp:2762:24: warning: the parameter 'options' is copied for each invocation but only used as a const reference; consider making it a const reference [performance-unnecessary-value-param]
int runJSC(CommandLine options, bool isWorker, const Func& func)
                       ^
           const      &
Source/JavaScriptCore/jsc.cpp:2823:22: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
        for (CString key : compileTimeKeys)
                     ^
             const  &

Source/JavaScriptCore/assembler/testmasm.cpp:156:47: warning: the parameter 'code' is copied for each invocation but only used as a const reference; consider making it a const reference [performance-unnecessary-value-param]
T invoke(MacroAssemblerCodeRef<JSEntryPtrTag> code, Arguments... arguments)
                                              ^
         const                               &

Source/JavaScriptCore/b3/testb3.cpp:167:75: warning: the parameter 'failText' is copied for each invocation but only used as a const reference; consider making it a const reference [performance-unnecessary-value-param]
void checkDisassembly(Compilation& compilation, const Func& func, CString failText)
                                                                          ^
                                                                  const  &
Comment 1 Radar WebKit Bug Importer 2018-12-13 14:09:05 PST
<rdar://problem/46708767>
Comment 2 David Kilzer (:ddkilzer) 2018-12-13 14:21:53 PST
Created attachment 357253 [details]
Patch v1
Comment 3 Mark Lam 2018-12-13 14:29:15 PST
Comment on attachment 357253 [details]
Patch v1

LGTM if EWS bots are happy.
Comment 4 David Kilzer (:ddkilzer) 2018-12-13 15:55:28 PST
(In reply to David Kilzer (:ddkilzer) from comment #0)
> Running `clang-tidy -checks='-*,performance-*,-performance-noexcept-*' ...`
> on JavaScriptCore source files found these unnecessary object copies:

It turns out that if the warning is in a header (such as a C++ template or inline function), then you need to add the "-header-filter=.*" command-line switch to clang-tidy to see warnings from headers.  (The reason they're apparently off by default is that they can be reported more than once.)

Also, it seems like clang-tidy might treat #included source files in UnifiedSource files as "headers" and not report issues in those, either, without the "-header-filter=.*" command-line switch.

TL;DR: There will be more fixes coming to JavaScriptCore.
Comment 5 WebKit Commit Bot 2018-12-13 16:19:30 PST
Comment on attachment 357253 [details]
Patch v1

Clearing flags on attachment: 357253

Committed r239187: <https://trac.webkit.org/changeset/239187>
Comment 6 WebKit Commit Bot 2018-12-13 16:19:32 PST
All reviewed patches have been landed.  Closing bug.