From 4b807e0381be558f3c9173c971ecf640cb9a9176 Mon Sep 17 00:00:00 2001 From: Jeff Cohen Date: Thu, 6 Jan 2005 06:02:53 +0000 Subject: [PATCH] Add project opt to Visual Studio. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@19307 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Transforms/LinkAllPasses.h | 114 ++++++++++++++++++++ tools/opt/opt.cpp | 1 + win32/Transforms/Transforms.vcproj | 9 ++ win32/llvm.sln | 16 +++ win32/opt/opt.vcproj | 137 ++++++++++++++++++++++++ 5 files changed, 277 insertions(+) create mode 100644 include/llvm/Transforms/LinkAllPasses.h create mode 100644 win32/opt/opt.vcproj diff --git a/include/llvm/Transforms/LinkAllPasses.h b/include/llvm/Transforms/LinkAllPasses.h new file mode 100644 index 00000000000..5d58064f1cb --- /dev/null +++ b/include/llvm/Transforms/LinkAllPasses.h @@ -0,0 +1,114 @@ +//===- llvm/Transforms/IPO.h - Interprocedural Transformations --*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file was developed by Jeff Cohen and is distributed under the +// University of Illinois Open Source License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This header file is required for building with Microsoft's VC++, as it has +// no way of linking all registered passes into executables other than by +// explicit use. +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_TRANSFORMS_LINKALLPASSES_H +#define LLVM_TRANSFORMS_LINKALLPASSES_H + +#include "llvm/Config/config.h" + +#ifdef LLVM_ON_WIN32 + +#include "llvm/Transforms/Instrumentation.h" +#include "llvm/Transforms/IPO.h" +#include "llvm/Transforms/Scalar.h" +#include "llvm/Transforms/Utils/UnifyFunctionExitNodes.h" + +// Trying not to include , though maybe we should... +extern "C" __declspec(dllimport) void* __stdcall GetCurrentProcess(); + +namespace { + struct ForceLinking { + ForceLinking() { + // We must reference the passes in such a way that VC++ will not + // delete it all as dead code, even with whole program optimization, + // yet is effectively a NO-OP. As the compiler isn't smart enough + // to know that GetCurrentProcess() never returns + // INVALID_HANDLE_VALUE, this will do the job. + if (GetCurrentProcess() != (void *) -1) + return; + + std::vector bbv; + + // The commented out calls below refer to non-existant creation + // functions. They will be uncommented as the functions are added. + + // (void) llvm::createADCEPass(); + // (void) llvm::createArgPromotionPass(); + // (void) llvm::createBasicBlockTracerPass(); + (void) llvm::createBlockExtractorPass(bbv); + // (void) llvm::createBlockPlacementPass(); + // (void) llvm::createBlockProfilerPass(); + (void) llvm::createBreakCriticalEdgesPass(); + // (void) llvm::createCEEPass(); + // (void) llvm::createCFGSimplifyPass(); + (void) llvm::createCombineBranchesPass(); + // (void) llvm::createConstantExpressionsLowerPass(); + (void) llvm::createConstantMergePass(); + (void) llvm::createConstantPropagationPass(); + // (void) llvm::createDAEPass(); + // (void) llvm::createDCEPass(); + // (void) llvm::createDSEPass(); + // (void) llvm::createDTEPass(); + (void) llvm::createDeadInstEliminationPass(); + // (void) llvm::createEdgeProfilerPass(); + (void) llvm::createEmitFunctionTablePass(); + // (void) llvm::createFunctionProfilerPass(); + (void) llvm::createFunctionResolvingPass(); + // (void) llvm::createFunctionTracerPass(); + (void) llvm::createGCSEPass(); + (void) llvm::createGlobalDCEPass(); + (void) llvm::createGlobalOptimizerPass(); + // (void) llvm::createIPCPPass(); + (void) llvm::createIPSCCPPass(); + (void) llvm::createIndVarSimplifyPass(); + // (void) llvm::createInstCombinerPass(); + // (void) llvm::createInstLoopsPass(); + (void) llvm::createInternalizePass(); + (void) llvm::createLICMPass(); + // (void) llvm::createLoopExtractorPass(); + (void) llvm::createLoopSimplifyPass(); + (void) llvm::createLoopStrengthReducePass(); + (void) llvm::createLoopUnrollPass(); + (void) llvm::createLoopUnswitchPass(); + (void) llvm::createLowerAllocationsPass(); + (void) llvm::createLowerGCPass(); + (void) llvm::createLowerInvokePass(); + (void) llvm::createLowerPackedPass(); + (void) llvm::createLowerSelectPass(); + (void) llvm::createLowerSetJmpPass(); + (void) llvm::createLowerSwitchPass(); + // (void) llvm::createPREPass(); + // (void) llvm::createProfilePathsPass(); + // (void) llvm::createPromotePass(); + (void) llvm::createPruneEHPass(); + // (void) llvm::createRPRPass(); + (void) llvm::createRaiseAllocationsPass(); + (void) llvm::createReassociatePass(); + (void) llvm::createSCCPPass(); + // (void) llvm::createSROAPass(); + // (void) llvm::createSimpleInlinerPass(); + (void) llvm::createSingleLoopExtractorPass(); + (void) llvm::createStripSymbolsPass(); + (void) llvm::createTailCallEliminationPass(); + (void) llvm::createTailDuplicationPass(); + // (void) llvm::createTraceBasicBlocksPass(); + (void) llvm::createUnifyFunctionExitNodesPass(); + } + } X; +}; + +#endif // LLVM_ON_WIN32 + +#endif diff --git a/tools/opt/opt.cpp b/tools/opt/opt.cpp index 56bc16b6bdd..fd339d92d98 100644 --- a/tools/opt/opt.cpp +++ b/tools/opt/opt.cpp @@ -23,6 +23,7 @@ #include "llvm/System/Signals.h" #include "llvm/Support/PluginLoader.h" #include "llvm/Support/SystemUtils.h" +#include "llvm/Transforms/LinkAllPasses.h" #include #include #include diff --git a/win32/Transforms/Transforms.vcproj b/win32/Transforms/Transforms.vcproj index 547c238557e..ba900b2a627 100644 --- a/win32/Transforms/Transforms.vcproj +++ b/win32/Transforms/Transforms.vcproj @@ -229,6 +229,9 @@ + + + + @@ -400,6 +406,9 @@ + + diff --git a/win32/llvm.sln b/win32/llvm.sln index 4a23fbcabc4..df24ada781a 100644 --- a/win32/llvm.sln +++ b/win32/llvm.sln @@ -163,6 +163,18 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CBackend", "CBackend\CBacke {19514E48-456C-4B9D-8637-F2285476461E} = {19514E48-456C-4B9D-8637-F2285476461E} EndProjectSection EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "opt", "opt\opt.vcproj", "{006D8B41-C3C7-4448-85E1-AF8907E591E5}" + ProjectSection(ProjectDependencies) = postProject + {0622E827-8464-489D-8B1C-B0B496F35C08} = {0622E827-8464-489D-8B1C-B0B496F35C08} + {28AA9146-3482-4F41-9CC6-407B1D258508} = {28AA9146-3482-4F41-9CC6-407B1D258508} + {19514E48-456C-4B9D-8637-F2285476461E} = {19514E48-456C-4B9D-8637-F2285476461E} + {F1EFF064-8869-4DFF-8E1A-CD8F4A5F8D61} = {F1EFF064-8869-4DFF-8E1A-CD8F4A5F8D61} + {059FBAB8-C76D-48A0-AA75-3C57BD3EAFE4} = {059FBAB8-C76D-48A0-AA75-3C57BD3EAFE4} + {C59374C1-9FC0-4147-B836-327DFDC52D99} = {C59374C1-9FC0-4147-B836-327DFDC52D99} + {45CD78D7-C5D9-47FE-AD12-F3251EEDAFFB} = {45CD78D7-C5D9-47FE-AD12-F3251EEDAFFB} + {0F8407F3-FA23-4CF1-83A9-DCBE0B361489} = {0F8407F3-FA23-4CF1-83A9-DCBE0B361489} + EndProjectSection +EndProject Global GlobalSection(SolutionConfiguration) = preSolution Debug = Debug @@ -261,6 +273,10 @@ Global {057777CD-DED5-46DF-BF9A-6B76DE212549}.Debug.Build.0 = Debug|Win32 {057777CD-DED5-46DF-BF9A-6B76DE212549}.Release.ActiveCfg = Release|Win32 {057777CD-DED5-46DF-BF9A-6B76DE212549}.Release.Build.0 = Release|Win32 + {006D8B41-C3C7-4448-85E1-AF8907E591E5}.Debug.ActiveCfg = Debug|Win32 + {006D8B41-C3C7-4448-85E1-AF8907E591E5}.Debug.Build.0 = Debug|Win32 + {006D8B41-C3C7-4448-85E1-AF8907E591E5}.Release.ActiveCfg = Release|Win32 + {006D8B41-C3C7-4448-85E1-AF8907E591E5}.Release.Build.0 = Release|Win32 EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution EndGlobalSection diff --git a/win32/opt/opt.vcproj b/win32/opt/opt.vcproj new file mode 100644 index 00000000000..0c6efc50f47 --- /dev/null +++ b/win32/opt/opt.vcproj @@ -0,0 +1,137 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +