Implement previously inoperative pragma(LDC_no_moduleinfo).

GitHub: Fixes #571.
This commit is contained in:
David Nadlinger 2014-07-10 01:08:29 +02:00
parent 1f45eadbfe
commit 04570399d4
5 changed files with 26 additions and 20 deletions

View file

@ -136,6 +136,7 @@ Module::Module(const char *filename, Identifier *ident, int doDocComment, int do
#if IN_LLVM #if IN_LLVM
// LDC // LDC
llvmForceLogging = false; llvmForceLogging = false;
noModuleInfo = false;
moduleInfoVar = NULL; moduleInfoVar = NULL;
this->doDocComment = doDocComment; this->doDocComment = doDocComment;
this->doHdrGen = doHdrGen; this->doHdrGen = doHdrGen;

View file

@ -207,6 +207,7 @@ public:
llvm::GlobalVariable* moduleInfoSymbol(); llvm::GlobalVariable* moduleInfoSymbol();
bool llvmForceLogging; bool llvmForceLogging;
bool noModuleInfo; /// Do not emit any module metadata.
llvm::GlobalVariable* moduleInfoVar; llvm::GlobalVariable* moduleInfoVar;
// array ops emitted in this module already // array ops emitted in this module already

View file

@ -626,27 +626,31 @@ llvm::Module* Module::genLLVMModule(llvm::LLVMContext& context)
// finalize debug info // finalize debug info
gIR->DBuilder.EmitModuleEnd(); gIR->DBuilder.EmitModuleEnd();
// generate ModuleInfo // Skip emission of all the additional module metadata if requested by the user.
genmoduleinfo(); if (!noModuleInfo)
{
// generate ModuleInfo
genmoduleinfo();
build_llvm_used_array(&ir); build_llvm_used_array(&ir);
#if LDC_LLVM_VER >= 303 #if LDC_LLVM_VER >= 303
// Add the linker options metadata flag. // Add the linker options metadata flag.
ir.module->addModuleFlag(llvm::Module::AppendUnique, "Linker Options", ir.module->addModuleFlag(llvm::Module::AppendUnique, "Linker Options",
llvm::MDNode::get(ir.context(), ir.LinkerMetadataArgs)); llvm::MDNode::get(ir.context(), ir.LinkerMetadataArgs));
#endif #endif
#if LDC_LLVM_VER >= 304 #if LDC_LLVM_VER >= 304
// Emit ldc version as llvm.ident metadata. // Emit ldc version as llvm.ident metadata.
llvm::NamedMDNode *IdentMetadata = ir.module->getOrInsertNamedMetadata("llvm.ident"); llvm::NamedMDNode *IdentMetadata = ir.module->getOrInsertNamedMetadata("llvm.ident");
std::string Version("ldc version "); std::string Version("ldc version ");
Version.append(global.ldc_version); Version.append(global.ldc_version);
llvm::Value *IdentNode[] = { llvm::Value *IdentNode[] = {
llvm::MDString::get(ir.context(), Version) llvm::MDString::get(ir.context(), Version)
}; };
IdentMetadata->addOperand(llvm::MDNode::get(ir.context(), IdentNode)); IdentMetadata->addOperand(llvm::MDNode::get(ir.context(), IdentNode));
#endif #endif
}
// verify the llvm // verify the llvm
verifyModule(*ir.module); verifyModule(*ir.module);

View file

@ -140,7 +140,8 @@ Pragma DtoGetPragma(Scope *sc, PragmaDeclaration *decl, std::string &arg1str)
error(Loc(), "takes no parameters"); error(Loc(), "takes no parameters");
fatal(); fatal();
} }
return LLVMno_moduleinfo; sc->module->noModuleInfo = true;
return LLVMignore;
} }
// pragma(LDC_alloca) { funcdecl(s) } // pragma(LDC_alloca) { funcdecl(s) }

View file

@ -28,7 +28,6 @@ enum Pragma
LLVMglobal_crt_ctor, LLVMglobal_crt_ctor,
LLVMglobal_crt_dtor, LLVMglobal_crt_dtor,
LLVMno_typeinfo, LLVMno_typeinfo,
LLVMno_moduleinfo,
LLVMalloca, LLVMalloca,
LLVMva_start, LLVMva_start,
LLVMva_copy, LLVMva_copy,