[CodeGen] Use the zero initializer instead of storing an all zero representation.
authorMatt Davis <Matthew.Davis@sony.com>
Fri, 9 Feb 2018 22:10:09 +0000 (22:10 +0000)
committerMatt Davis <Matthew.Davis@sony.com>
Fri, 9 Feb 2018 22:10:09 +0000 (22:10 +0000)
commit2930d7662e9c7a90976d41be9086298c5305d7a6
tree8b889241b26e394baa5e9ce16e8bfc13a2f89dd5
parent95a0f39e35040e7385cfde680721c1ea578a1d0f
[CodeGen] Use the zero initializer instead of storing an all zero representation.

Summary:
This change avoids the overhead of storing, and later crawling,
an initializer list of all zeros for arrays. When LLVM
visits this (llvm/IR/Constants.cpp) ConstantArray::getImpl()
it will scan the list looking for an array of all zero.

We can avoid the store, and short-cut the scan, by detecting
all zeros when clang builds-up the initialization representation.

This was brought to my attention when investigating PR36030

Reviewers: majnemer, rjmccall

Reviewed By: rjmccall

Subscribers: cfe-commits

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

llvm-svn: 324776
clang/lib/CodeGen/CGExprConstant.cpp
clang/test/CodeGen/array-init.c [new file with mode: 0644]