mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-27 05:10:41 +00:00
Next step on the getting-rid-of-static-ctors train: begin adding per-library
initialization functions that initialize the set of passes implemented in that library. Add C bindings for these functions as well. llvm-svn: 115927
This commit is contained in:
parent
ab71dcd0ad
commit
4a9acfa34a
@ -40,6 +40,7 @@
|
||||
/* Need these includes to support the LLVM 'cast' template for the C++ 'wrap'
|
||||
and 'unwrap' conversion functions. */
|
||||
#include "llvm/Module.h"
|
||||
#include "llvm/PassRegistry.h"
|
||||
#include "llvm/Support/IRBuilder.h"
|
||||
|
||||
extern "C" {
|
||||
@ -92,6 +93,9 @@ typedef struct LLVMOpaqueMemoryBuffer *LLVMMemoryBufferRef;
|
||||
/** See the llvm::PassManagerBase class. */
|
||||
typedef struct LLVMOpaquePassManager *LLVMPassManagerRef;
|
||||
|
||||
/** See the llvm::PassRegistry class. */
|
||||
typedef struct LLVMOpaquePassRegistry *LLVMPassRegistryRef;
|
||||
|
||||
/** Used to get the users and usees of a Value. See the llvm::Use class. */
|
||||
typedef struct LLVMOpaqueUse *LLVMUseRef;
|
||||
|
||||
@ -1016,6 +1020,11 @@ LLVMBool LLVMCreateMemoryBufferWithSTDIN(LLVMMemoryBufferRef *OutMemBuf,
|
||||
char **OutMessage);
|
||||
void LLVMDisposeMemoryBuffer(LLVMMemoryBufferRef MemBuf);
|
||||
|
||||
/*===-- Pass Registry -----------------------------------------------------===*/
|
||||
|
||||
/** Return the global pass registry, for use with initialization functions.
|
||||
See llvm::PassRegistry::getPassRegistry. */
|
||||
LLVMPassRegistryRef LLVMGetGlobalPassRegistry(void);
|
||||
|
||||
/*===-- Pass Managers -----------------------------------------------------===*/
|
||||
|
||||
@ -1104,6 +1113,7 @@ namespace llvm {
|
||||
DEFINE_SIMPLE_CONVERSION_FUNCTIONS(LLVMContext, LLVMContextRef )
|
||||
DEFINE_SIMPLE_CONVERSION_FUNCTIONS(Use, LLVMUseRef )
|
||||
DEFINE_STDCXX_CONVERSION_FUNCTIONS(PassManagerBase, LLVMPassManagerRef )
|
||||
DEFINE_STDCXX_CONVERSION_FUNCTIONS(PassRegistry, LLVMPassRegistryRef )
|
||||
/* LLVMModuleProviderRef exists for historical reasons, but now just holds a
|
||||
* Module.
|
||||
*/
|
||||
|
@ -19,6 +19,14 @@ namespace llvm {
|
||||
|
||||
class PassRegistry;
|
||||
|
||||
/// initializeTransformUtilsPasses - Initialize all passes linked into the
|
||||
/// TransformUtils library.
|
||||
void initializeTransformUtils(PassRegistry&);
|
||||
|
||||
/// initializeScalarOptsPasses - Initialize all passes linked into the
|
||||
/// ScalarOpts library.
|
||||
void initializeScalarOpts(PassRegistry&);
|
||||
|
||||
void initializeAAEvalPass(PassRegistry&);
|
||||
void initializeADCEPass(PassRegistry&);
|
||||
void initializeAliasAnalysisAnalysisGroup(PassRegistry&);
|
||||
|
@ -7,12 +7,15 @@
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// This file implements the C bindings for libLLVMScalarOpts.a, which implements
|
||||
// several scalar transformations over the LLVM intermediate representation.
|
||||
// This file implements common infrastructure for libLLVMScalarOpts.a, which
|
||||
// implements several scalar transformations over the LLVM intermediate
|
||||
// representation, including the C bindings for that library.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "llvm-c/Transforms/Scalar.h"
|
||||
#include "llvm-c/Initialization.h"
|
||||
#include "llvm/InitializePasses.h"
|
||||
#include "llvm/PassManager.h"
|
||||
#include "llvm/Analysis/Verifier.h"
|
||||
#include "llvm/Target/TargetData.h"
|
||||
@ -20,6 +23,47 @@
|
||||
|
||||
using namespace llvm;
|
||||
|
||||
/// initializeScalarOptsPasses - Initialize all passes linked into the
|
||||
/// ScalarOpts library.
|
||||
void llvm::initializeScalarOpts(PassRegistry &Registry) {
|
||||
initializeADCEPass(Registry);
|
||||
initializeBlockPlacementPass(Registry);
|
||||
initializeCodeGenPreparePass(Registry);
|
||||
initializeConstantPropagationPass(Registry);
|
||||
initializeCorrelatedValuePropagationPass(Registry);
|
||||
initializeDCEPass(Registry);
|
||||
initializeDeadInstEliminationPass(Registry);
|
||||
initializeDSEPass(Registry);
|
||||
initializeGEPSplitterPass(Registry);
|
||||
initializeGVNPass(Registry);
|
||||
initializeIndVarSimplifyPass(Registry);
|
||||
initializeJumpThreadingPass(Registry);
|
||||
initializeLICMPass(Registry);
|
||||
initializeLoopDeletionPass(Registry);
|
||||
initializeLoopIndexSplitPass(Registry);
|
||||
initializeLoopRotatePass(Registry);
|
||||
initializeLoopStrengthReducePass(Registry);
|
||||
initializeLoopUnrollPass(Registry);
|
||||
initializeLoopUnswitchPass(Registry);
|
||||
initializeLowerAtomicPass(Registry);
|
||||
initializeMemCpyOptPass(Registry);
|
||||
initializeReassociatePass(Registry);
|
||||
initializeRegToMemPass(Registry);
|
||||
initializeSCCPPass(Registry);
|
||||
initializeIPSCCPPass(Registry);
|
||||
initializeSROAPass(Registry);
|
||||
initializeCFGSimplifyPassPass(Registry);
|
||||
initializeSimplifyHalfPowrLibCallsPass(Registry);
|
||||
initializeSimplifyLibCallsPass(Registry);
|
||||
initializeSinkingPass(Registry);
|
||||
initializeTailDupPass(Registry);
|
||||
initializeTailCallElimPass(Registry);
|
||||
}
|
||||
|
||||
void LLVMInitializeScalarOpts(LLVMPassRegistryRef R) {
|
||||
initializeScalarOpts(*unwrap(R));
|
||||
}
|
||||
|
||||
void LLVMAddAggressiveDCEPass(LLVMPassManagerRef PM) {
|
||||
unwrap(PM)->add(createAggressiveDCEPass());
|
||||
}
|
||||
|
@ -22,6 +22,7 @@ add_llvm_library(LLVMTransformUtils
|
||||
SSAUpdater.cpp
|
||||
SimplifyCFG.cpp
|
||||
UnifyFunctionExitNodes.cpp
|
||||
Utils.cpp
|
||||
ValueMapper.cpp
|
||||
)
|
||||
|
||||
|
36
lib/Transforms/Utils/Utils.cpp
Normal file
36
lib/Transforms/Utils/Utils.cpp
Normal file
@ -0,0 +1,36 @@
|
||||
//===-- Utils.cpp - TransformUtils Infrastructure -------------------------===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// This file defines the common initialization infrastructure for the
|
||||
// TransformUtils library.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "llvm/InitializePasses.h"
|
||||
#include "llvm-c/Initialization.h"
|
||||
|
||||
using namespace llvm;
|
||||
|
||||
/// initializeTransformUtils - Initialize all passes in the TransformUtils
|
||||
/// library.
|
||||
void llvm::initializeTransformUtils(PassRegistry &Registry) {
|
||||
initializeBreakCriticalEdgesPass(Registry);
|
||||
initializeInstNamerPass(Registry);
|
||||
initializeLCSSAPass(Registry);
|
||||
initializeLoopSimplifyPass(Registry);
|
||||
initializeLowerInvokePass(Registry);
|
||||
initializeLowerSwitchPass(Registry);
|
||||
initializePromotePassPass(Registry);
|
||||
initializeUnifyFunctionExitNodesPass(Registry);
|
||||
}
|
||||
|
||||
/// LLVMInitializeTransformUtils - C binding for initializeTransformUtilsPasses.
|
||||
void LLVMInitializeTransformUtils(LLVMPassRegistryRef R) {
|
||||
initializeTransformUtils(*unwrap(R));
|
||||
}
|
@ -2220,6 +2220,11 @@ void LLVMDisposeMemoryBuffer(LLVMMemoryBufferRef MemBuf) {
|
||||
delete unwrap(MemBuf);
|
||||
}
|
||||
|
||||
/*===-- Pass Registry -----------------------------------------------------===*/
|
||||
|
||||
LLVMPassRegistryRef LLVMGetGlobalPassRegistry(void) {
|
||||
return wrap(PassRegistry::getPassRegistry());
|
||||
}
|
||||
|
||||
/*===-- Pass Manager ------------------------------------------------------===*/
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user