r217586 - Avoid some unnecessary SmallVector copies.

Benjamin Kramer benny.kra at gmail.com
Thu Sep 11 09:43:02 PDT 2014


On Thu, Sep 11, 2014 at 6:04 PM, David Blaikie <dblaikie at gmail.com> wrote:
>
>
> On Thu, Sep 11, 2014 at 7:13 AM, Benjamin Kramer <benny.kra at googlemail.com>
> wrote:
>>
>> Author: d0k
>> Date: Thu Sep 11 09:13:49 2014
>> New Revision: 217586
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=217586&view=rev
>> Log:
>> Avoid some unnecessary SmallVector copies.
>
>
> What technique did you use to find these cases?

Looking at all calls to SmallVector's copy ctor (even implicit ones)
in the clang AST for all files. There aren't that many and unnecessary
ones are easy to spot.

- Ben
>
>>
>>
>> No functionality change.
>>
>> Modified:
>>     cfe/trunk/include/clang/ASTMatchers/ASTMatchFinder.h
>>     cfe/trunk/lib/CodeGen/MicrosoftCXXABI.cpp
>>     cfe/trunk/lib/Driver/Driver.cpp
>>     cfe/trunk/lib/Driver/Tools.cpp
>>     cfe/trunk/lib/StaticAnalyzer/Checkers/SimpleStreamChecker.cpp
>>
>> Modified: cfe/trunk/include/clang/ASTMatchers/ASTMatchFinder.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/ASTMatchers/ASTMatchFinder.h?rev=217586&r1=217585&r2=217586&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/include/clang/ASTMatchers/ASTMatchFinder.h (original)
>> +++ cfe/trunk/include/clang/ASTMatchers/ASTMatchFinder.h Thu Sep 11
>> 09:13:49 2014
>> @@ -253,7 +253,7 @@ match(MatcherT Matcher, const ast_type_t
>>    MatchFinder Finder;
>>    Finder.addMatcher(Matcher, &Callback);
>>    Finder.match(Node, Context);
>> -  return Callback.Nodes;
>> +  return std::move(Callback.Nodes);
>>  }
>>
>>  template <typename MatcherT, typename NodeT>
>>
>> Modified: cfe/trunk/lib/CodeGen/MicrosoftCXXABI.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/MicrosoftCXXABI.cpp?rev=217586&r1=217585&r2=217586&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/lib/CodeGen/MicrosoftCXXABI.cpp (original)
>> +++ cfe/trunk/lib/CodeGen/MicrosoftCXXABI.cpp Thu Sep 11 09:13:49 2014
>> @@ -1162,7 +1162,7 @@ void MicrosoftCXXABI::EmitDestructorCall
>>  void MicrosoftCXXABI::emitVTableDefinitions(CodeGenVTables &CGVT,
>>                                              const CXXRecordDecl *RD) {
>>    MicrosoftVTableContext &VFTContext = CGM.getMicrosoftVTableContext();
>> -  VPtrInfoVector VFPtrs = VFTContext.getVFPtrOffsets(RD);
>> +  const VPtrInfoVector &VFPtrs = VFTContext.getVFPtrOffsets(RD);
>>
>>    for (VPtrInfo *Info : VFPtrs) {
>>      llvm::GlobalVariable *VTable = getAddrOfVTable(RD,
>> Info->FullOffsetInMDC);
>>
>> Modified: cfe/trunk/lib/Driver/Driver.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Driver.cpp?rev=217586&r1=217585&r2=217586&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/lib/Driver/Driver.cpp (original)
>> +++ cfe/trunk/lib/Driver/Driver.cpp Thu Sep 11 09:13:49 2014
>> @@ -518,7 +518,7 @@ void Driver::generateCompilationDiagnost
>>        << "\n********************\n\n"
>>        "PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:\n"
>>        "Preprocessed source(s) and associated run script(s) are located
>> at:";
>> -    ArgStringList Files = C.getTempFiles();
>> +    const ArgStringList &Files = C.getTempFiles();
>>      for (ArgStringList::const_iterator it = Files.begin(), ie =
>> Files.end();
>>           it != ie; ++it) {
>>        Diag(clang::diag::note_drv_command_failed_diag_msg) << *it;
>>
>> Modified: cfe/trunk/lib/Driver/Tools.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=217586&r1=217585&r2=217586&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/lib/Driver/Tools.cpp (original)
>> +++ cfe/trunk/lib/Driver/Tools.cpp Thu Sep 11 09:13:49 2014
>> @@ -6599,7 +6599,7 @@ void freebsd::Link::ConstructJob(Compila
>>    }
>>
>>    Args.AddAllArgs(CmdArgs, options::OPT_L);
>> -  const ToolChain::path_list Paths = ToolChain.getFilePaths();
>> +  const ToolChain::path_list &Paths = ToolChain.getFilePaths();
>>    for (const auto &Path : Paths)
>>      CmdArgs.push_back(Args.MakeArgString(StringRef("-L") + Path));
>>    Args.AddAllArgs(CmdArgs, options::OPT_T_Group);
>> @@ -7425,7 +7425,7 @@ void gnutools::Link::ConstructJob(Compil
>>    Args.AddAllArgs(CmdArgs, options::OPT_L);
>>    Args.AddAllArgs(CmdArgs, options::OPT_u);
>>
>> -  const ToolChain::path_list Paths = ToolChain.getFilePaths();
>> +  const ToolChain::path_list &Paths = ToolChain.getFilePaths();
>>
>>    for (const auto &Path : Paths)
>>      CmdArgs.push_back(Args.MakeArgString(StringRef("-L") + Path));
>>
>> Modified: cfe/trunk/lib/StaticAnalyzer/Checkers/SimpleStreamChecker.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Checkers/SimpleStreamChecker.cpp?rev=217586&r1=217585&r2=217586&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/lib/StaticAnalyzer/Checkers/SimpleStreamChecker.cpp
>> (original)
>> +++ cfe/trunk/lib/StaticAnalyzer/Checkers/SimpleStreamChecker.cpp Thu Sep
>> 11 09:13:49 2014
>> @@ -63,8 +63,7 @@ class SimpleStreamChecker : public Check
>>                           const CallEvent &Call,
>>                           CheckerContext &C) const;
>>
>> -  void reportLeaks(SymbolVector LeakedStreams,
>> -                   CheckerContext &C,
>> +  void reportLeaks(ArrayRef<SymbolRef> LeakedStreams, CheckerContext &C,
>>                     ExplodedNode *ErrNode) const;
>>
>>    bool guaranteedNotToCloseFile(const CallEvent &Call) const;
>> @@ -222,16 +221,15 @@ void SimpleStreamChecker::reportDoubleCl
>>    C.emitReport(R);
>>  }
>>
>> -void SimpleStreamChecker::reportLeaks(SymbolVector LeakedStreams,
>> -                                               CheckerContext &C,
>> -                                               ExplodedNode *ErrNode)
>> const {
>> +void SimpleStreamChecker::reportLeaks(ArrayRef<SymbolRef> LeakedStreams,
>> +                                      CheckerContext &C,
>> +                                      ExplodedNode *ErrNode) const {
>>    // Attach bug reports to the leak node.
>>    // TODO: Identify the leaked file descriptor.
>> -  for (SmallVectorImpl<SymbolRef>::iterator
>> -         I = LeakedStreams.begin(), E = LeakedStreams.end(); I != E; ++I)
>> {
>> +  for (SymbolRef LeakedStream : LeakedStreams) {
>>      BugReport *R = new BugReport(*LeakBugType,
>>          "Opened file is never closed; potential resource leak", ErrNode);
>> -    R->markInteresting(*I);
>> +    R->markInteresting(LeakedStream);
>>      C.emitReport(R);
>>    }
>>  }
>>
>>
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
>



More information about the cfe-commits mailing list