r274257 - Don't instantiate a full host toolchain in ASTMatchersTest.
Justin Lebar via cfe-commits
cfe-commits at lists.llvm.org
Thu Jun 30 13:50:55 PDT 2016
Thank you, fix in r274269.
On Thu, Jun 30, 2016 at 12:57 PM, Yaron Keren <yaron.keren at gmail.com> wrote:
> Seems this commit broke a builder,
> http://bb.pgr.jp/builders/ninja-x64-msvc-RA-centos6
>
> http://bb.pgr.jp/builders/ninja-x64-msvc-RA-centos6/builds/26133
> http://bb.pgr.jp/builders/ninja-x64-msvc-RA-centos6/builds/26134
>
> ******************** TEST 'Clang-Unit ::
> ASTMatchers/ASTMatchersTests/DeclarationMatcher.MatchClass' FAILED
> ********************
> Note: Google Test filter = DeclarationMatcher.MatchClass
> [==========] Running 1 test from 1 test case.
> [----------] Global test environment set-up.
> [----------] 1 test from DeclarationMatcher
> [ RUN ] DeclarationMatcher.MatchClass
> /home/bb/ninja-x64-msvc-RA-centos6/llvm-project/clang/unittests/ASTMatchers/ASTMatchersNodeTest.cpp:91:
> Failure
> Value of: matches("", ClassMatcher)
> Actual: false (Could not find match in "")
> Expected: true
> [ FAILED ] DeclarationMatcher.MatchClass (20 ms)
> [----------] 1 test from DeclarationMatcher (20 ms total)
>
> [----------] Global test environment tear-down
> [==========] 1 test from 1 test case ran. (20 ms total)
> [ PASSED ] 0 tests.
> [ FAILED ] 1 test, listed below:
> [ FAILED ] DeclarationMatcher.MatchClass
>
> 1 FAILED TEST
>
> ********************
>
>
>
> 2016-06-30 21:12 GMT+03:00 Justin Lebar via cfe-commits
> <cfe-commits at lists.llvm.org>:
>>
>> Author: jlebar
>> Date: Thu Jun 30 13:12:25 2016
>> New Revision: 274257
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=274257&view=rev
>> Log:
>> Don't instantiate a full host toolchain in ASTMatchersTest.
>>
>> Summary:
>> This test was stat()'ing large swaths of /usr/lib hundreds of times, as
>> every invocation of matchesConditionally*() created a new Linux
>> toolchain.
>>
>> In addition to being slow, perf indicated this was causing substantial
>> contention in the kernel.
>>
>> Something is...interesting in the kernel, as without this patch I
>> sometimes see ~11m spent in the kernel, and sometimes ~5m. This
>> corresponds to bimodal ninja check-clang times of ~30s and ~20s.
>>
>> It's not clear to me exactly what causes the bimodality. In any case,
>> this change makes this test run in 2.5s, down from 17s, and it seems to
>> cause us to get the 20s ninja check-clang time unconditionally.
>>
>> Reviewers: chandlerc
>>
>> Subscribers: cfe-commits, klimek
>>
>> Differential Revision: http://reviews.llvm.org/D21810
>>
>> Modified:
>> cfe/trunk/unittests/ASTMatchers/ASTMatchersTest.h
>>
>> Modified: cfe/trunk/unittests/ASTMatchers/ASTMatchersTest.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/ASTMatchers/ASTMatchersTest.h?rev=274257&r1=274256&r2=274257&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/unittests/ASTMatchers/ASTMatchersTest.h (original)
>> +++ cfe/trunk/unittests/ASTMatchers/ASTMatchersTest.h Thu Jun 30 13:12:25
>> 2016
>> @@ -73,12 +73,16 @@ testing::AssertionResult matchesConditio
>> return testing::AssertionFailure() << "Could not add dynamic
>> matcher";
>> std::unique_ptr<FrontendActionFactory> Factory(
>> newFrontendActionFactory(&Finder));
>> - // Some tests use typeof, which is a gnu extension.
>> - std::vector<std::string> Args;
>> - Args.push_back(CompileArg);
>> - // Some tests need rtti/exceptions on
>> - Args.push_back("-frtti");
>> - Args.push_back("-fexceptions");
>> + // Some tests need rtti/exceptions on. Use an unknown-unknown triple
>> so we
>> + // don't instantiate the full system toolchain. On Linux,
>> instantiating the
>> + // toolchain involves stat'ing large portions of /usr/lib, and this
>> slows down
>> + // not only this test, but all other tests, via contention in the
>> kernel.
>> + //
>> + // FIXME: This is a hack to work around the fact that there's no way to
>> do the
>> + // equivalent of runToolOnCodeWithArgs without instantiating a full
>> Driver.
>> + // We should consider having a function, at least for tests, that
>> invokes cc1.
>> + std::vector<std::string> Args = {CompileArg, "-frtti", "-fexceptions",
>> + "-target", "i386-unknown-unknown"};
>> if (!runToolOnCodeWithArgs(
>> Factory->create(), Code, Args, Filename, "clang-tool",
>> std::make_shared<PCHContainerOperations>(),
>> VirtualMappedFiles)) {
>> @@ -180,13 +184,12 @@ testing::AssertionResult matchesConditio
>> return testing::AssertionFailure() << "Could not add dynamic
>> matcher";
>> std::unique_ptr<FrontendActionFactory> Factory(
>> newFrontendActionFactory(&Finder));
>> - // Some tests use typeof, which is a gnu extension.
>> - std::vector<std::string> Args;
>> - Args.push_back("-xcuda");
>> - Args.push_back("-fno-ms-extensions");
>> - Args.push_back("--cuda-host-only");
>> - Args.push_back("-nocudainc");
>> - Args.push_back(CompileArg);
>> + // Some tests use typeof, which is a gnu extension. Using an explicit
>> + // unknown-unknown triple is good for a large speedup, because it lets
>> us
>> + // avoid constructing a full system triple.
>> + std::vector<std::string> Args = {
>> + "-xcuda", "-fno-ms-extensions", "--cuda-host-only",
>> "-nocudainc",
>> + "-target", "nvptx64-unknown-unknown", CompileArg};
>> if (!runToolOnCodeWithArgs(Factory->create(),
>> CudaHeader + Code, Args)) {
>> return testing::AssertionFailure() << "Parsing error in \"" << Code
>> << "\"";
>> @@ -230,8 +233,11 @@ matchAndVerifyResultConditionally(const
>> Finder.addMatcher(AMatcher, &VerifyVerifiedResult);
>> std::unique_ptr<FrontendActionFactory> Factory(
>> newFrontendActionFactory(&Finder));
>> - // Some tests use typeof, which is a gnu extension.
>> - std::vector<std::string> Args(1, "-std=gnu++98");
>> + // Some tests use typeof, which is a gnu extension. Using an explicit
>> + // unknown-unknown triple is good for a large speedup, because it lets
>> us
>> + // avoid constructing a full system triple.
>> + std::vector<std::string> Args = {"-std=gnu++98", "-target",
>> + "i386-unknown-unknown"};
>> if (!runToolOnCodeWithArgs(Factory->create(), Code, Args)) {
>> return testing::AssertionFailure() << "Parsing error in \"" << Code
>> << "\"";
>> }
>>
>>
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>
>
More information about the cfe-commits
mailing list