]> granicus.if.org Git - clang/commit
[CodeGen] Disable aggressive structor optimizations at -O0, take 2
authorPavel Labath <labath@google.com>
Mon, 21 May 2018 11:47:45 +0000 (11:47 +0000)
committerPavel Labath <labath@google.com>
Mon, 21 May 2018 11:47:45 +0000 (11:47 +0000)
commit9f2f8904e02e234625098e8e787fbac5b5ad9431
tree86e65b01e50cd727a3fd3346178291f2d2cfd7e0
parent5ade99a7ff000a7b0077d95c7dcbd8930687d21c
[CodeGen] Disable aggressive structor optimizations at -O0, take 2

The first version of the patch (r332228) was flawed because it was
putting structors into C5/D5 comdats very eagerly. This is correct only
if we can ensure the comdat contains all required versions of the
structor (which wasn't the case). This version uses a more nuanced
approach:
- for local structor symbols we use an alias because we don't have to
  worry about comdats or other compilation units.
- linkonce symbols are emitted separately, as we cannot guarantee we
  will have all symbols we need to form a comdat (they are emitted
  lazily, only when referenced).
- available_externally symbols are also emitted separately, as the code
  seemed to be worried about emitting an alias in this case.
- other linkage types are not affected by the optimization level. They
  either get put into a comdat (weak) or get aliased (external).

Reviewers: rjmccall, aprantl

Subscribers: cfe-commits

Differential Revision: https://reviews.llvm.org/D46685

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@332839 91177308-0d34-0410-b5e6-96231b3b80d8
lib/CodeGen/ItaniumCXXABI.cpp
test/CodeGenCXX/ctor-dtor-alias.cpp
test/CodeGenCXX/float16-declarations.cpp