From b24f30de8de25357eb8930ec1b4071b2ea1d8045 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Fri, 20 Feb 2004 05:49:22 +0000 Subject: [PATCH] It is totally unacceptable to print out (literally) millions of zeros when compiling 129.compress... so don't! llvm-svn: 11649 --- lib/Target/CBackend/Writer.cpp | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/lib/Target/CBackend/Writer.cpp b/lib/Target/CBackend/Writer.cpp index b52db0346a9..93e5b07f5f2 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(I->getInitializer()->getType()) || + isa(I->getInitializer()->getType())) { + Out << "{ 0 }"; + } else { + // Just print it out normally. + writeOperand(I->getInitializer()); + } } Out << ";\n"; }