CodeGen: Fix PR40605 by splitting constant struct initializers
authorAlexander Potapenko <glider@google.com>
Fri, 1 Mar 2019 09:00:41 +0000 (09:00 +0000)
committerAlexander Potapenko <glider@google.com>
Fri, 1 Mar 2019 09:00:41 +0000 (09:00 +0000)
commitfa61dddf5dc8cc35de6f814a04012b73a1afcb0e
tree06491add841101cc66bfce8fc13b53b82c86a9f2
parent90641b5581b20bee4b689733d0008d3fbba4973c
CodeGen: Fix PR40605 by splitting constant struct initializers

When emitting initializers for local structures for code built with
-ftrivial-auto-var-init, replace constant structures with sequences of
stores.

This appears to greatly help removing dead initialization stores to those
locals that are later overwritten by other data.
This also removes a lot of .rodata constants (see PR40605), replacing most
of them with immediate values (for Linux kernel the .rodata size is
reduced by ~1.9%)

llvm-svn: 355181
clang/lib/CodeGen/CGDecl.cpp
clang/test/CodeGenCXX/auto-var-init.cpp