diff options
author | Chris Lattner <sabre@nondot.org> | 2004-02-20 05:49:22 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2004-02-20 05:49:22 +0000 |
commit | f358c5ad1576157f0610305099b2c04bd53aabd4 (patch) | |
tree | 925a870c75bf69547886a1956c688b4c7dbc91ee /lib/Target/CBackend/Writer.cpp | |
parent | a8032090aa4e7748d573af0769ac912d47ba1eaa (diff) |
It is totally unacceptable to print out (literally) millions of zeros when
compiling 129.compress... so don't!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11649 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/CBackend/Writer.cpp')
-rw-r--r-- | lib/Target/CBackend/Writer.cpp | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/lib/Target/CBackend/Writer.cpp b/lib/Target/CBackend/Writer.cpp index b52db0346a..93e5b07f5f 100644 --- a/lib/Target/CBackend/Writer.cpp +++ b/lib/Target/CBackend/Writer.cpp @@ -728,10 +728,21 @@ bool CWriter::doInitialization(Module &M) { // this, however, occurs when the variable has weak linkage. In this // case, the assembler will complain about the variable being both weak // and common, so we disable this optimization. - if (!I->getInitializer()->isNullValue() || - I->hasWeakLinkage()) { + if (!I->getInitializer()->isNullValue()) { Out << " = " ; writeOperand(I->getInitializer()); + } else if (I->hasWeakLinkage()) { + // We have to specify an initializer, but it doesn't have to be + // complete. If the value is an aggregate, print out { 0 }, and let + // the compiler figure out the rest of the zeros. + Out << " = " ; + if (isa<StructType>(I->getInitializer()->getType()) || + isa<ArrayType>(I->getInitializer()->getType())) { + Out << "{ 0 }"; + } else { + // Just print it out normally. + writeOperand(I->getInitializer()); + } } Out << ";\n"; } |