diff options
author | George Burgess IV <george.burgess.iv@gmail.com> | 2016-12-28 07:27:40 +0000 |
---|---|---|
committer | George Burgess IV <george.burgess.iv@gmail.com> | 2016-12-28 07:27:40 +0000 |
commit | 1a39b86d0f412e5d645b6e05770d5ae821063ca2 (patch) | |
tree | 892a2f1514439231c3010002210c5fd58aea0df2 /llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp | |
parent | 15361a21e01026e74cb17011b702c7d1c881ae94 (diff) | |
download | llvm-1a39b86d0f412e5d645b6e05770d5ae821063ca2.zip llvm-1a39b86d0f412e5d645b6e05770d5ae821063ca2.tar.gz llvm-1a39b86d0f412e5d645b6e05770d5ae821063ca2.tar.bz2 |
[CodeGen] Unique constant CompoundLiterals.
Our newly aggressive constant folding logic makes it possible for
CGExprConstant to see the same CompoundLiteralExpr more than once. So,
emitting a new GlobalVariable every time we see a CompoundLiteral is no
longer correct.
We had a similar issue with BlockExprs that was caught while testing
said aggressive folding, so I applied the same style of fix (see D26410)
here. If we find yet another case where this needs to happen, we should
probably refactor this so we don't have a third DenseMap+getter+setter.
As a design note: getAddrOfConstantCompoundLiteralIfEmitted is really
only intended to be called by ConstExprEmitter::EmitLValue. So,
returning a GlobalVariable* instead of a ConstantAddress costs us
effectively nothing, and saves us either a few bytes per entry in our
map or a bit of code duplication.
llvm-svn: 290661
Diffstat (limited to 'llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp')
0 files changed, 0 insertions, 0 deletions