<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><br class=""><div><blockquote type="cite" class=""><div class="">On Oct 4, 2017, at 9:25 AM, Daniel Berlin <<a href="mailto:dberlin@dberlin.org" class="">dberlin@dberlin.org</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class="">+jakub for real.</div><div class="gmail_extra"><br class=""><div class="gmail_quote">On Wed, Oct 4, 2017 at 9:21 AM, Daniel Berlin <span dir="ltr" class=""><<a href="mailto:dberlin@dberlin.org" target="_blank" class="">dberlin@dberlin.org</a>></span> wrote:<br class=""><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="">+jakub<div class=""><br class=""></div><div class="">I don't think preservation should be controlled by a flag.  That seems like not a great path forward.</div><div class="">Either we should make it fast enough, or we should give up :)</div><div class=""><br class=""></div><div class="">Do you have any profiles on this?</div></div></blockquote></div></div></div></blockquote>I don’t, but it seems pretty clear what’s going on there - we do an extra work (preserving DT) for no benefits (we’re recomputing it a couple of passes later anyway). The pass after which it’s recomputed is SimplifyCFG, and I think it would be a much bigger endeavor to teach it to account for DT - so putting it under a flag for JumpThreading could help doing this work incrementally.</div><div><br class=""></div><div>Michael</div><div><br class=""><blockquote type="cite" class=""><div class=""><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class=""><div class=""><br class=""><br class=""></div></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br class=""><div class="gmail_quote">On Sat, Sep 30, 2017 at 12:19 PM, Michael Zolotukhin via llvm-commits <span dir="ltr" class=""><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank" class="">llvm-commits@lists.llvm.org</a>></span> wrote:<br class=""><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word" class="">For the record, we also detected significant compile-time increases caused by this patch. It caused up to 10% slow downs on sqlite3 and some other tests from CTMark/LLVM testsuite (on O3/LTO and other optsets).<div class=""><br class=""></div><div class="">Reproducer:</div><div class=""><br class=""></div><div class="">time clang-r314435/bin/clang  -DNDEBUG -O3 -arch arm64 -isysroot $SYSROOT -DSTDC_HEADERS=1  -DSQLITE_OMIT_LOAD_EXTENSION=<wbr class="">1 -DSQLITE_THREADSAFE=0  -w -o sqlite3.c.o -c $TESTSUITE/CTMark/sqlite3/sqli<wbr class="">te3.c</div><div class=""><div class="">real    0m20.235s</div><div class="">user    0m20.130s</div><div class="">sys     0m0.091s</div></div><div class=""><br class=""></div><div class=""><div class="">time clang-r314432/bin/clang  -DNDEBUG -O3 -arch arm64 -isysroot $SYSROOT -DSTDC_HEADERS=1  -DSQLITE_OMIT_LOAD_EXTENSION=<wbr class="">1 -DSQLITE_THREADSAFE=0  -w -o sqlite3.c.o -c $TESTSUITE/CTMark/sqlite3/sqli<wbr class="">te3.c</div><div class=""><div class="">real    0m19.254s</div><div class="">user    0m19.154s</div><div class="">sys     0m0.094s</div></div><div class=""><br class=""></div><div class="">JumpThreading started to consume much longer time trying to preserve DT, but DT was still being recomputed couple of passes later. In general, I agree that we should preserve DT and in the end it should be beneficial for compile time too, but can we put it under a flag for now until we can actually benefit from it?</div><div class=""><br class=""></div><div class="">Thanks,</div><div class="">Michael</div><div class=""></div></div><div class=""><div class="m_-1877988520402087529h5"><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><div class=""><blockquote type="cite" class=""><div class="">On Sep 30, 2017, at 5:02 AM, Daniel Jasper via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org" target="_blank" class="">llvm-commits@lists.llvm.org</a>> wrote:</div><br class="m_-1877988520402087529m_5149017397612556239Apple-interchange-newline"><div class=""><div dir="ltr" class="">I found other places where this Clang was running into this segfault. Reverted for now in r314589.</div><div class="gmail_extra"><br class=""><div class="gmail_quote">On Fri, Sep 29, 2017 at 10:19 PM, Friedman, Eli via llvm-commits <span dir="ltr" class=""><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank" class="">llvm-commits@lists.llvm.org</a>></span> wrote:<br class=""><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
  
    
  
  <div text="#000000" bgcolor="#FFFFFF" class=""><span class="">
    <div class="m_-1877988520402087529m_5149017397612556239m_-3717849707277701947moz-cite-prefix">On 9/28/2017 10:24 AM, Evandro Menezes
      via llvm-commits wrote:<br class="">
    </div>
    <blockquote type="cite" class="">
      <pre class="">Author: evandro
Date: Thu Sep 28 10:24:40 2017
New Revision: 314435

URL: <a class="m_-1877988520402087529m_5149017397612556239m_-3717849707277701947moz-txt-link-freetext" href="http://llvm.org/viewvc/llvm-project?rev=314435&view=rev" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr class="">oject?rev=314435&view=rev</a>
Log:
[JumpThreading] Preserve DT and LVI across the pass

JumpThreading now preserves dominance and lazy value information across the
entire pass.  The pass manager is also informed of this preservation with
the goal of DT and LVI being recalculated fewer times overall during
compilation.

This change prepares JumpThreading for enhanced opportunities; particularly
those across loop boundaries.

Patch by: Brian Rzycki <a class="m_-1877988520402087529m_5149017397612556239m_-3717849707277701947moz-txt-link-rfc2396E" href="mailto:b.rzycki@samsung.com" target="_blank"><b.rzycki@samsung.com></a>,
          Sebastian Pop <a class="m_-1877988520402087529m_5149017397612556239m_-3717849707277701947moz-txt-link-rfc2396E" href="mailto:s.pop@samsung.com" target="_blank"><s.pop@samsung.com></a>

Differential revision: <a class="m_-1877988520402087529m_5149017397612556239m_-3717849707277701947moz-txt-link-freetext" href="https://reviews.llvm.org/D37528" target="_blank">https://reviews.llvm.org/D3752<wbr class="">8</a>
</pre>
    </blockquote>
    <br class=""></span>
    It looks like this is causing an assertion failure on the polly aosp
    buildbot
(<a class="m_-1877988520402087529m_5149017397612556239m_-3717849707277701947moz-txt-link-freetext" href="http://lab.llvm.org:8011/builders/aosp-O3-polly-before-vectorizer-unprofitable/builds/266/steps/build-aosp/logs/stdio" target="_blank">http://lab.llvm.org:8011/buil<wbr class="">ders/aosp-O3-polly-before-vect<wbr class="">orizer-unprofitable/builds/266<wbr class="">/steps/build-aosp/logs/stdio</a>):<br class="">
    <pre style="font-family:'Courier New',courier,monotype,monospace;font-size:inherit;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;word-spacing:0px" class=""><span class="m_-1877988520402087529m_5149017397612556239m_-3717849707277701947stdout" style="font-family:'Courier New',courier,monotype,monospace">clang: /var/lib/buildbot/slaves/hexag<wbr class="">on-build-03/aosp/llvm.src/incl<wbr class="">ude/llvm/Support/GenericDomTre<wbr class="">eConstruction.h:906: static void llvm::DomTreeBuilder::SemiNCAI<wbr class="">nfo<llvm::DominatorTreeBase<ll<wbr class="">vm::BasicBlock, false> >::DeleteEdge(DomTreeT &, const BatchUpdatePtr, const NodePtr, const NodePtr) [DomTreeT = llvm::DominatorTreeBase<llvm::<wbr class="">BasicBlock, false>]: Assertion `!IsSuccessor(To, From) && "Deleted edge still exists in the CFG!"' failed.
#0 0x00000000014f6fc4 PrintStackTraceSignalHandler(v<wbr class="">oid*) (llvm.inst/bin/clang+0x14f6fc4<wbr class="">)
#1 0x00000000014f72d6 SignalHandler(int) (llvm.inst/bin/clang+0x14f72d6<wbr class="">)
#2 0x00007f694afddd10 __restore_rt (/lib/x86_64-linux-gnu/libpthr<wbr class="">ead.so.0+0x10d10)
#3 0x00007f6949bbb267 gsignal /build/buildd/glibc-2.21/signa<wbr class="">l/../sysdeps/unix/sysv/linux/r<wbr class="">aise.c:55:0
#4 0x00007f6949bbceca abort /build/buildd/glibc-2.21/stdli<wbr class="">b/abort.c:91:0
#5 0x00007f6949bb403d __assert_fail_base /build/buildd/glibc-2.21/asser<wbr class="">t/assert.c:92:0
#6 0x00007f6949bb40f2 (/lib/x86_64-linux-gnu/libc.so<wbr class="">.6+0x2e0f2)
#7 0x000000000104a1dc (llvm.inst/bin/clang+0x104a1dc<wbr class="">)
#8 0x0000000001357fd9 llvm::JumpThreadingPass::Proce<wbr class="">ssBlock(llvm::BasicBlock*) (llvm.inst/bin/clang+0x1357fd9<wbr class="">)
#9 0x0000000001356e6e llvm::JumpThreadingPass::runIm<wbr class="">pl(llvm::Function&, llvm::TargetLibraryInfo*, llvm::LazyValueInfo*, llvm::AAResults*, llvm::DominatorTree*, bool, std::unique_ptr<llvm::BlockFre<wbr class="">quencyInfo, std::default_delete<llvm::Bloc<wbr class="">kFrequencyInfo> >, std::unique_ptr<llvm::BranchPr<wbr class="">obabilityInfo, std::default_delete<llvm::Bran<wbr class="">chProbabilityInfo> >) (llvm.inst/bin/clang+0x1356e6e<wbr class="">)
#10 0x0000000001363c49 (anonymous namespace)::JumpThreading::run<wbr class="">OnFunction(llvm::Function&) (llvm.inst/bin/clang+0x1363c49<wbr class="">)
#11 0x00000000010a53c4 llvm::FPPassManager::runOnFunc<wbr class="">tion(llvm::Function&) (llvm.inst/bin/clang+0x10a53c4<wbr class="">)
#12 0x00000000031f7376 (anonymous namespace)::CGPassManager::run<wbr class="">OnModule(llvm::Module&) (llvm.inst/bin/clang+0x31f7376<wbr class="">)
#13 0x00000000010a5b05 llvm::legacy::PassManagerImpl:<wbr class="">:run(llvm::Module&) (llvm.inst/bin/clang+0x10a5b05<wbr class="">)
#14 0x0000000001688beb clang::EmitBackendOutput(clang<wbr class="">::DiagnosticsEngine&, clang::HeaderSearchOptions const&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, llvm::DataLayout const&, llvm::Module*, clang::BackendAction, std::unique_ptr<llvm::raw_pwri<wbr class="">te_stream, std::default_delete<llvm::raw_<wbr class="">pwrite_stream> >) (llvm.inst/bin/clang+0x1688beb<wbr class="">)
#15 0x0000000001ed7672 clang::BackendConsumer::Handle<wbr class="">TranslationUnit(clang::ASTCont<wbr class="">ext&) (llvm.inst/bin/clang+0x1ed7672<wbr class="">)
#16 0x0000000002195235 clang::ParseAST(clang::Sema&, bool, bool) (llvm.inst/bin/clang+0x2195235<wbr class="">)
#17 0x0000000001a75628 clang::FrontendAction::Execute<wbr class="">() (llvm.inst/bin/clang+0x1a75628<wbr class="">)
#18 0x0000000001a37181 clang::CompilerInstance::Execu<wbr class="">teAction(clang::FrontendAction<wbr class="">&) (llvm.inst/bin/clang+0x1a37181<wbr class="">)
#19 0x0000000001b06501 clang::ExecuteCompilerInvocati<wbr class="">on(clang::CompilerInstance*) (llvm.inst/bin/clang+0x1b06501<wbr class="">)
#20 0x000000000080e433 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (llvm.inst/bin/clang+0x80e433)
#21 0x000000000080c997 main (llvm.inst/bin/clang+0x80c997)
#22 0x00007f6949ba6a40 __libc_start_main /build/buildd/glibc-2.21/csu/l<wbr class="">ibc-start.c:323:0
#23 0x0000000000809479 _start (llvm.inst/bin/clang+0x809479)
</span></pre>
    I'll try to come up with a reduced testcase this afternoon.<br class="m_-1877988520402087529m_5149017397612556239m_-3717849707277701947Apple-interchange-newline">
    <br class="">
    -Eli<span class="m_-1877988520402087529m_5149017397612556239HOEnZb"><font color="#888888" class=""><br class="">
    <pre class="m_-1877988520402087529m_5149017397612556239m_-3717849707277701947moz-signature" cols="72">-- 
Employee of Qualcomm Innovation Center, Inc.
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project</pre>
  </font></span></div>

<br class="">______________________________<wbr class="">_________________<br class="">
llvm-commits mailing list<br class="">
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank" class="">llvm-commits@lists.llvm.org</a><br class="">
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank" class="">http://lists.llvm.org/cgi-bin/<wbr class="">mailman/listinfo/llvm-commits</a><br class="">
<br class=""></blockquote></div><br class=""></div>
______________________________<wbr class="">_________________<br class="">llvm-commits mailing list<br class=""><a href="mailto:llvm-commits@lists.llvm.org" target="_blank" class="">llvm-commits@lists.llvm.org</a><br class=""><a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" target="_blank" class="">http://lists.llvm.org/cgi-bin/<wbr class="">mailman/listinfo/llvm-commits</a><br class=""></div></blockquote></div><br class=""></div></div></div></div><br class="">______________________________<wbr class="">_________________<br class="">
llvm-commits mailing list<br class="">
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank" class="">llvm-commits@lists.llvm.org</a><br class="">
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank" class="">http://lists.llvm.org/cgi-bin/<wbr class="">mailman/listinfo/llvm-commits</a><br class="">
<br class=""></blockquote></div><br class=""></div>
</div></div></blockquote></div><br class=""></div>
</div></blockquote></div><br class=""></body></html>