Mercurial > projects > ldc
changeset 1558:3adcb70700cb
Added back option to disable metadata generation and users. Set USE_METADATA to OFF in ccmake.
author | Tomas Lindquist Olsen <tomas.l.olsen gmail com> |
---|---|
date | Fri, 31 Jul 2009 11:28:31 +0200 |
parents | d11aeae19b95 |
children | 06d5cc873350 |
files | CMakeLists.txt gen/main.cpp gen/metadata.h gen/optimizer.cpp gen/passes/GarbageCollect2Stack.cpp gen/passes/Passes.h gen/passes/StripMetaData.cpp gen/typinf.cpp ir/irclass.cpp |
diffstat | 9 files changed, 31 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/CMakeLists.txt Fri Jul 31 01:44:47 2009 +0200 +++ b/CMakeLists.txt Fri Jul 31 11:28:31 2009 +0200 @@ -64,6 +64,7 @@ set(PROGRAM_SUFFIX CACHE STRING "appended to ldc binary name") option(USE_BOEHM_GC "use the Boehm garbage collector internally") option(GENERATE_OFFTI "generate complete ClassInfo.offTi arrays") +option(USE_METADATA "use metadata and related custom optimization passes") if(D_VERSION EQUAL 1) set(DMDFE_PATH dmd) @@ -208,6 +209,10 @@ add_definitions(-DGENERATE_OFFTI) endif(GENERATE_OFFTI) +if(USE_METADATA) + add_definitions(-DUSE_METADATA) +endif(USE_METADATA) + if(CMAKE_MINOR_VERSION LESS 6) set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin CACHE PATH "output dir for built executables") set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib CACHE PATH "output dir for built libraries")
--- a/gen/main.cpp Fri Jul 31 01:44:47 2009 +0200 +++ b/gen/main.cpp Fri Jul 31 11:28:31 2009 +0200 @@ -941,12 +941,13 @@ std::string errormsg; for (int i = 0; i < llvmModules.size(); i++) { +#if USE_METADATA //FIXME: workaround for llvm metadata bug: // the LinkInModule call asserts with metadata unstripped llvm::ModulePass* stripMD = createStripMetaData(); stripMD->runOnModule(*llvmModules[i]); delete stripMD; - +#endif // USE_METADATA if(linker.LinkInModule(llvmModules[i], &errormsg)) error("%s", errormsg.c_str()); delete llvmModules[i];
--- a/gen/metadata.h Fri Jul 31 01:44:47 2009 +0200 +++ b/gen/metadata.h Fri Jul 31 11:28:31 2009 +0200 @@ -1,3 +1,5 @@ +#if USE_METADATA + #ifndef LDC_GEN_METADATA_H #define LDC_GEN_METADATA_H @@ -46,3 +48,5 @@ }; #endif + +#endif // USE_METADATA
--- a/gen/optimizer.cpp Fri Jul 31 01:44:47 2009 +0200 +++ b/gen/optimizer.cpp Fri Jul 31 11:28:31 2009 +0200 @@ -160,8 +160,10 @@ if (!disableSimplifyRuntimeCalls) addPass(pm, createSimplifyDRuntimeCalls()); +#if USE_METADATA if (!disableGCToStack) addPass(pm, createGarbageCollect2Stack()); +#endif // USE_METADATA } // Run some clean-up passes addPass(pm, createInstructionCombiningPass()); @@ -221,6 +223,7 @@ bool ldc_optimize_module(llvm::Module* m) { if (!optimize()) { +#if USE_METADATA if (!disableStripMetaData) { // This one always needs to run if metadata is generated, because // the code generator will assert if it's not used. @@ -228,6 +231,7 @@ stripMD->runOnModule(*m); delete stripMD; } +#endif return false; } @@ -266,11 +270,13 @@ if (optimize) addPassesForOptLevel(pm); +#if USE_METADATA if (!disableStripMetaData) { // This one is purposely not disabled by disableLangSpecificPasses // because the code generator will assert if it's not used. addPass(pm, createStripMetaData()); } +#endif // USE_METADATA pm.run(*m); return true;
--- a/gen/passes/GarbageCollect2Stack.cpp Fri Jul 31 01:44:47 2009 +0200 +++ b/gen/passes/GarbageCollect2Stack.cpp Fri Jul 31 11:28:31 2009 +0200 @@ -1,3 +1,5 @@ +#if USE_METADATA + //===- GarbageCollect2Stack - Optimize calls to the D garbage collector ---===// // // The LLVM D Compiler @@ -642,3 +644,5 @@ // All uses examined - not captured or live across original allocation. return true; } + +#endif // USE_METADATA
--- a/gen/passes/Passes.h Fri Jul 31 01:44:47 2009 +0200 +++ b/gen/passes/Passes.h Fri Jul 31 11:28:31 2009 +0200 @@ -10,8 +10,10 @@ // Performs simplifications on runtime calls. llvm::FunctionPass* createSimplifyDRuntimeCalls(); +#if USE_METADATA llvm::FunctionPass* createGarbageCollect2Stack(); llvm::ModulePass* createStripMetaData(); +#endif // USE_METADATA llvm::ModulePass* createStripExternalsPass();
--- a/gen/passes/StripMetaData.cpp Fri Jul 31 01:44:47 2009 +0200 +++ b/gen/passes/StripMetaData.cpp Fri Jul 31 11:28:31 2009 +0200 @@ -1,3 +1,5 @@ +#if USE_METADATA + //===- StripMetaData - Strips D-specific metadata -------------------------===// // // The LLVM D Compiler @@ -75,3 +77,5 @@ } return Changed; } + +#endif // USE_METADATA
--- a/gen/typinf.cpp Fri Jul 31 01:44:47 2009 +0200 +++ b/gen/typinf.cpp Fri Jul 31 11:28:31 2009 +0200 @@ -302,6 +302,7 @@ tid->ir.irGlobal = irg; +#if USE_METADATA // don't do this for void or llvm will crash if (tid->tinfo->ty != Tvoid) { // Add some metadata for use by optimization passes. @@ -321,6 +322,7 @@ llvm::NamedMDNode::Create(metaname, &metadata, 1, gIR->module); } } +#endif // USE_METADATA DtoDeclareTypeInfo(tid); }
--- a/ir/irclass.cpp Fri Jul 31 01:44:47 2009 +0200 +++ b/ir/irclass.cpp Fri Jul 31 11:28:31 2009 +0200 @@ -71,6 +71,7 @@ classInfo = new llvm::GlobalVariable( *gIR->module, tc->getPA().get(), false, _linkage, NULL, initname); +#if USE_METADATA // Generate some metadata on this ClassInfo if it's for a class. ClassDeclaration* classdecl = aggrdecl->isClassDeclaration(); if (classdecl && !aggrdecl->isInterfaceDeclaration()) { @@ -90,6 +91,7 @@ std::string metaname = CD_PREFIX + initname; llvm::NamedMDNode::Create(metaname, &metadata, 1, gIR->module); } +#endif // USE_METADATA return classInfo; }