<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body dir="auto"><div dir="ltr"></div><div dir="ltr">Hi,</div><div dir="ltr"><br></div><div dir="ltr">Do you have a reproducer you could share? That would be really helpful, as It looks like the problem is triggered in a downstream pass.</div><div dir="ltr"><br></div><div dir="ltr">Cheers</div><div dir="ltr">Florian</div><div dir="ltr"><br>On 10 May 2019, at 23:28, Jordan Rupprecht <<a href="mailto:rupprecht@google.com">rupprecht@google.com</a>> wrote:<br><br></div><blockquote type="cite"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div>Here's the full crash (minus the boiler plate) for the one in Machine InstCombiner:</div><div> #9 0x00007fb8d52cf5d2 (anonymous namespace)::DataDep::DataDep(llvm::MachineRegisterInfo const*, unsigned int, unsigned int) ${LLVM_SRC}/llvm/lib/CodeGen/MachineTraceMetrics.cpp:640:13</div><div>#10 0x00007fb8d52cb644 getDataDeps(llvm::MachineInstr const&, llvm::SmallVectorImpl<(anonymous namespace)::DataDep>&, llvm::MachineRegisterInfo const*) ${LLVM_SRC}/llvm/lib/CodeGen/MachineTraceMetrics.cpp:672:22</div><div>#11 0x00007fb8d52cb064 llvm::MachineTraceMetrics::Ensemble::updateDepth(llvm::MachineTraceMetrics::TraceBlockInfo&, llvm::MachineInstr const&, llvm::SparseSet<llvm::LiveRegUnit, llvm::identity<unsigned int>, unsigned char>&) ${LLVM_SRC}/llvm/lib/CodeGen/MachineTraceMetrics.cpp:788:12</div><div>#12 0x00007fb8d52cc300 llvm::MachineTraceMetrics::Ensemble::computeInstrDepths(llvm::MachineBasicBlock const*) ${LLVM_SRC}/llvm/lib/CodeGen/MachineTraceMetrics.cpp:883:28</div><div>#13 0x00007fb8d52cde9e llvm::MachineTraceMetrics::Ensemble::getTrace(llvm::MachineBasicBlock const*) ${LLVM_SRC}/llvm/lib/CodeGen/MachineTraceMetrics.cpp:1166:8</div><div>#14 0x00007fb8d515ead4 (anonymous namespace)::MachineCombiner::combineInstructions(llvm::MachineBasicBlock*) ${LLVM_SRC}/llvm/lib/CodeGen/MachineCombiner.cpp:596:59</div><div>#15 0x00007fb8d515e342 (anonymous namespace)::MachineCombiner::runOnMachineFunction(llvm::MachineFunction&) ${LLVM_SRC}/llvm/lib/CodeGen/MachineCombiner.cpp:654:16</div><div>#16 0x00007fb8d51bf637 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) ${LLVM_SRC}/llvm/lib/CodeGen/MachineFunctionPass.cpp:73:8</div><div>#17 0x00007fb8d47dd759 llvm::FPPassManager::runOnFunction(llvm::Function&) ${LLVM_SRC}/llvm/lib/IR/LegacyPassManager.cpp:1648:23</div><div>#18 0x00007fb8d47ddb9f llvm::FPPassManager::runOnModule(llvm::Module&) ${LLVM_SRC}/llvm/lib/IR/LegacyPassManager.cpp:1685:16</div><div>#19 0x00007fb8d47de305 (anonymous namespace)::MPPassManager::runOnModule(llvm::Module&) ${LLVM_SRC}/llvm/lib/IR/LegacyPassManager.cpp:1752:23</div><div>#20 0x00007fb8d47dde45 llvm::legacy::PassManagerImpl::run(llvm::Module&) ${LLVM_SRC}/llvm/lib/IR/LegacyPassManager.cpp:1865:16</div><div>#21 0x00007fb8d47de881 llvm::legacy::PassManager::run(llvm::Module&) ${LLVM_SRC}/llvm/lib/IR/LegacyPassManager.cpp:1896:3</div><div>#22 0x00007fb8d117e15a (anonymous namespace)::EmitAssemblyHelper::EmitAssembly(clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream> >) ${LLVM_SRC}/clang/lib/CodeGen/BackendUtil.cpp:894:3</div><div><br></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr"><strong>From: </strong>Jordan Rupprecht <span dir="ltr"><<a href="mailto:rupprecht@google.com">rupprecht@google.com</a>></span><br><strong>Date: </strong>Fri, May 10, 2019 at 12:58 PM<br><strong>To: </strong>Florian Hahn<br><strong>Cc: </strong>llvm-commits<br><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr">Looks like this causes some asan/msan crashes (or in some cases, test failure/miscompiles). I'll see if I can get a crash with debug+asserts enabled. In release mode, it's crashing during Machine InstCombiner/Live Variable Analysis for different repros.<div><br></div></div></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr"><strong>From: </strong>Florian Hahn via llvm-commits <span dir="ltr"><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>></span><br><strong>Date: </strong>Tue, May 7, 2019 at 9:45 AM<br><strong>To: </strong> <<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>><br><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Author: fhahn<br>
Date: Tue May  7 09:47:27 2019<br>
New Revision: 360171<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=360171&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=360171&view=rev</a><br>
Log:<br>
[DAGCombiner] Avoid creating large tokenfactors in visitTokenFactor<br>
<br>
When simplifying TokenFactors, we potentially iterate over all<br>
operands of a large number of TokenFactors. This causes quadratic<br>
compile times in some cases and the large token factors cause additional<br>
scalability problems elsewhere.<br>
<br>
This patch adds some limits to the number of nodes explored for the<br>
cases mentioned above.<br>
<br>
Reviewers: niravd, spatel, craig.topper<br>
<br>
Reviewed By: niravd<br>
<br>
Differential Revision: <a href="https://reviews.llvm.org/D61397" rel="noreferrer" target="_blank">https://reviews.llvm.org/D61397</a><br>
<br>
Modified:<br>
    llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp<br>
<br>
Modified: llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp?rev=360171&r1=360170&r2=360171&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp?rev=360171&r1=360170&r2=360171&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp (original)<br>
+++ llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp Tue May  7 09:47:27 2019<br>
@@ -1792,8 +1792,9 @@ SDValue DAGCombiner::visitTokenFactor(SD<br>
   TFs.push_back(N);<br>
<br>
   // Iterate through token factors.  The TFs grows when new token factors are<br>
-  // encountered.<br>
-  for (unsigned i = 0; i < TFs.size(); ++i) {<br>
+  // encountered. Limit number of nodes to inline, to avoid quadratic compile<br>
+  // times.<br>
+  for (unsigned i = 0; i < TFs.size() && Ops.size() <= 2048; ++i) {<br>
     SDNode *TF = TFs[i];<br>
<br>
     // Check each of the operands.<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div>
</blockquote></div>
</div></blockquote></body></html>