]> CyberLeo.Net >> Repos - FreeBSD/stable/10.git/commit
MFC r274442:
authordim <dim@ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f>
Wed, 19 Nov 2014 07:24:43 +0000 (07:24 +0000)
committerdim <dim@ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f>
Wed, 19 Nov 2014 07:24:43 +0000 (07:24 +0000)
commit0e7cc6080672e5d2a8ebdace97b053f13b7c1276
tree63cd9df3b439af266b26dc0ee9f0438693f265e0
parente0d7dd6227a76fd05b213879766813621c984cf2
MFC r274442:

Pull in r221709 from upstream llvm trunk (by Frédéric Riss):

  Totally forget deallocated SDNodes in SDDbgInfo.

  What would happen before that commit is that the SDDbgValues associated with
  a deallocated SDNode would be marked Invalidated, but SDDbgInfo would keep
  a map entry keyed by the SDNode pointer pointing to this list of invalidated
  SDDbgNodes. As the memory gets reused, the list might get wrongly associated
  with another new SDNode. As the SDDbgValues are cloned when they are transfered,
  this can lead to an exponential number of SDDbgValues being produced during
  DAGCombine like in http://llvm.org/bugs/show_bug.cgi?id=20893

  Note that the previous behavior wasn't really buggy as the invalidation made
  sure that the SDDbgValues won't be used. This commit can be considered a
  memory optimization and as such is really hard to validate in a unit-test.

This should fix abnormally large memory usage and resulting OOM crashes
when compiling certain ports with debug information.

Reported by: Dmitry Marakasov <amdmi3@amdmi3.ru>
Upstream PRs: http://llvm.org/PR19031 http://llvm.org/PR20893

MFC r274483:

The fix imported into llvm in r274442 contains some C++11 constructs,
which gcc in base cannot handle.  Replace these with C++98 equivalents.

While here, add the patch for the adapted fix.

Reported by: bz, kib
Pointy hat to: dim

git-svn-id: svn://svn.freebsd.org/base/stable/10@274696 ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f
contrib/llvm/include/llvm/CodeGen/SelectionDAG.h
contrib/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
contrib/llvm/patches/patch-r274442-llvm-r221709-debug-oom.diff [new file with mode: 0644]