Updated for LLVM 2.7 (will not work with LLVM 2.6). Work-in-progress.

git-svn-id: http://llvm-py.googlecode.com/svn/trunk@86 8d1e9007-1d4e-0410-b67e-1979fd6579aa
This commit is contained in:
mdevan.foobar@gmail.com 2010-07-24 18:15:49 +00:00
commit d51eb76fec
10 changed files with 1136 additions and 1012 deletions

View file

@ -1,6 +1,7 @@
0.6, in progress: 0.6, in progress:
* Migrate to LLVM 2.7.
* Migrate to LLVM 2.6 (KS Sreeram) (Issue #25). * Migrate to LLVM 2.6 (KS Sreeram) (Issue #25).
* Inline function (Corrado Zoccolo). * Inline function (Corrado Zoccolo).
* Get pointer to function (Corrado Zoccolo). * Get pointer to function (Corrado Zoccolo).

6
README
View file

@ -12,13 +12,13 @@ Home page:
Versions: Versions:
--------- ---------
This package will work only with LLVM 2.6. If you need llvm-py for LLVM This package will work only with LLVM 2.7, and Python 2.4 or later,
2.5, use SVN r82 or older. but not 3.x.
Quickstart: Quickstart:
----------- -----------
1. Get 2.6 version of LLVM, build it. Make sure '--enable-pic' is passed to 1. Get 2.7 version of LLVM, build it. Make sure '--enable-pic' is passed to
LLVM's 'configure'. LLVM's 'configure'.
2. Get llvm-py from SVN, install it: 2. Get llvm-py from SVN, install it:

View file

@ -70,6 +70,7 @@ _wrap_obj2str(LLVMGetTarget, LLVMModuleRef)
_wrap_objstr2none(LLVMSetTarget, LLVMModuleRef) _wrap_objstr2none(LLVMSetTarget, LLVMModuleRef)
_wrap_objstrobj2obj(LLVMAddTypeName, LLVMModuleRef, LLVMTypeRef, int) _wrap_objstrobj2obj(LLVMAddTypeName, LLVMModuleRef, LLVMTypeRef, int)
_wrap_objstr2none(LLVMDeleteTypeName, LLVMModuleRef) _wrap_objstr2none(LLVMDeleteTypeName, LLVMModuleRef)
_wrap_objstr2obj(LLVMGetTypeByName, LLVMModuleRef, LLVMTypeRef)
_wrap_obj2none(LLVMDumpModule, LLVMModuleRef) _wrap_obj2none(LLVMDumpModule, LLVMModuleRef)
_wrap_obj2none(LLVMDisposeModule, LLVMModuleRef) _wrap_obj2none(LLVMDisposeModule, LLVMModuleRef)
_wrap_dumper(LLVMDumpModuleToString, LLVMModuleRef) _wrap_dumper(LLVMDumpModuleToString, LLVMModuleRef)
@ -783,69 +784,96 @@ _wrap_obj2none(LLVMDisposePassManager, LLVMPassManagerRef)
#define _wrap_pass(P) \ #define _wrap_pass(P) \
_wrap_obj2none( LLVMAdd ## P ## Pass, LLVMPassManagerRef) _wrap_obj2none( LLVMAdd ## P ## Pass, LLVMPassManagerRef)
_wrap_pass( AAEval )
_wrap_pass( ABCD )
_wrap_pass( AggressiveDCE ) _wrap_pass( AggressiveDCE )
_wrap_pass( AliasAnalysisCounter )
_wrap_pass( AlwaysInliner )
_wrap_pass( ArgumentPromotion ) _wrap_pass( ArgumentPromotion )
_wrap_pass( BasicAliasAnalysis )
_wrap_pass( BlockPlacement ) _wrap_pass( BlockPlacement )
_wrap_pass( BreakCriticalEdges ) _wrap_pass( BreakCriticalEdges )
_wrap_pass( CFGSimplification )
_wrap_pass( CodeGenPrepare ) _wrap_pass( CodeGenPrepare )
_wrap_pass( CondPropagation )
_wrap_pass( ConstantMerge ) _wrap_pass( ConstantMerge )
_wrap_pass( ConstantPropagation ) _wrap_pass( ConstantPropagation )
_wrap_pass( DeadCodeElimination ) _wrap_pass( DbgInfoPrinter )
_wrap_pass( DeadArgElimination ) _wrap_pass( DeadArgElimination )
_wrap_pass( DeadTypeElimination ) _wrap_pass( DeadCodeElimination )
_wrap_pass( DeadInstElimination ) _wrap_pass( DeadInstElimination )
_wrap_pass( DeadStoreElimination ) _wrap_pass( DeadStoreElimination )
/* _wrap_pass( GCSE ): removed in LLVM 2.4. */ _wrap_pass( DeadTypeElimination )
_wrap_pass( DemoteRegisterToMemory )
_wrap_pass( DomOnlyPrinter )
_wrap_pass( DomOnlyViewer )
_wrap_pass( DomPrinter )
_wrap_pass( DomViewer )
_wrap_pass( EdgeProfiler )
_wrap_pass( FunctionAttrs )
_wrap_pass( FunctionInlining )
_wrap_pass( GEPSplitter )
_wrap_pass( GlobalDCE ) _wrap_pass( GlobalDCE )
_wrap_pass( GlobalOptimizer ) _wrap_pass( GlobalOptimizer )
_wrap_pass( GlobalsModRef )
_wrap_pass( GVN ) _wrap_pass( GVN )
_wrap_pass( GVNPRE )
_wrap_pass( IndMemRem )
_wrap_pass( IndVarSimplify ) _wrap_pass( IndVarSimplify )
_wrap_pass( FunctionInlining ) _wrap_pass( InstCount )
_wrap_pass( BlockProfiler )
_wrap_pass( EdgeProfiler )
_wrap_pass( FunctionProfiler )
_wrap_pass( NullProfilerRS )
_wrap_pass( RSProfiling )
_wrap_pass( InstructionCombining ) _wrap_pass( InstructionCombining )
_wrap_pass( Internalize ) _wrap_pass( InstructionNamer )
_wrap_pass( IPConstantPropagation ) _wrap_pass( IPConstantPropagation )
_wrap_pass( IPSCCP ) _wrap_pass( IPSCCP )
_wrap_pass( JumpThreading ) _wrap_pass( JumpThreading )
_wrap_pass( LazyValueInfo )
_wrap_pass( LCSSA ) _wrap_pass( LCSSA )
_wrap_pass( LICM ) _wrap_pass( LICM )
_wrap_pass( LiveValues )
_wrap_pass( LoopDeletion ) _wrap_pass( LoopDeletion )
_wrap_pass( LoopDependenceAnalysis )
_wrap_pass( LoopExtractor ) _wrap_pass( LoopExtractor )
_wrap_pass( SingleLoopExtractor )
_wrap_pass( LoopIndexSplit ) _wrap_pass( LoopIndexSplit )
_wrap_pass( LoopStrengthReduce )
_wrap_pass( LoopRotate ) _wrap_pass( LoopRotate )
_wrap_pass( LoopSimplify )
_wrap_pass( LoopStrengthReduce )
_wrap_pass( LoopUnroll ) _wrap_pass( LoopUnroll )
_wrap_pass( LoopUnswitch ) _wrap_pass( LoopUnswitch )
_wrap_pass( LoopSimplify )
_wrap_pass( LowerAllocations )
_wrap_pass( LowerInvoke ) _wrap_pass( LowerInvoke )
_wrap_pass( LowerSetJmp ) _wrap_pass( LowerSetJmp )
_wrap_pass( LowerSwitch ) _wrap_pass( LowerSwitch )
_wrap_pass( PromoteMemoryToRegister )
_wrap_pass( MemCpyOpt ) _wrap_pass( MemCpyOpt )
_wrap_pass( UnifyFunctionExitNodes ) _wrap_pass( MergeFunctions )
_wrap_pass( PredicateSimplifier ) _wrap_pass( NoAA )
_wrap_pass( NoProfileInfo )
_wrap_pass( OptimalEdgeProfiler )
_wrap_pass( PartialInlining )
_wrap_pass( PartialSpecialization )
_wrap_pass( PostDomOnlyPrinter )
_wrap_pass( PostDomOnlyViewer )
_wrap_pass( PostDomPrinter )
_wrap_pass( PostDomViewer )
_wrap_pass( ProfileEstimator )
_wrap_pass( ProfileLoader )
_wrap_pass( ProfileVerifier )
_wrap_pass( PromoteMemoryToRegister )
_wrap_pass( PruneEH ) _wrap_pass( PruneEH )
_wrap_pass( RaiseAllocations )
_wrap_pass( Reassociate ) _wrap_pass( Reassociate )
_wrap_pass( DemoteRegisterToMemory ) _wrap_pass( ScalarEvolutionAliasAnalysis )
_wrap_pass( ScalarReplAggregates ) _wrap_pass( ScalarReplAggregates )
_wrap_pass( SCCP ) _wrap_pass( SCCP )
_wrap_pass( SCCVN )
_wrap_pass( SimplifyHalfPowrLibCalls )
_wrap_pass( SimplifyLibCalls ) _wrap_pass( SimplifyLibCalls )
_wrap_pass( CFGSimplification ) _wrap_pass( SingleLoopExtractor )
_wrap_pass( StripSymbols ) _wrap_pass( SSI )
_wrap_pass( SSIEverything )
_wrap_pass( StripDeadPrototypes ) _wrap_pass( StripDeadPrototypes )
_wrap_pass( StripNonDebugSymbols )
_wrap_pass( StripSymbols )
_wrap_pass( StructRetPromotion ) _wrap_pass( StructRetPromotion )
_wrap_pass( TailCallElimination ) _wrap_pass( TailCallElimination )
_wrap_pass( TailDuplication ) _wrap_pass( TailDuplication )
_wrap_pass( UnifyFunctionExitNodes )
_wrap_pass( Internalize )
/*===----------------------------------------------------------------------===*/ /*===----------------------------------------------------------------------===*/
/* Target Data */ /* Target Data */
@ -1143,6 +1171,7 @@ static PyMethodDef core_methods[] = {
_method( LLVMSetTarget ) _method( LLVMSetTarget )
_method( LLVMAddTypeName ) _method( LLVMAddTypeName )
_method( LLVMDeleteTypeName ) _method( LLVMDeleteTypeName )
_method( LLVMGetTypeByName )
_method( LLVMDumpModule ) _method( LLVMDumpModule )
_method( LLVMDisposeModule ) _method( LLVMDisposeModule )
_method( LLVMDumpModuleToString ) _method( LLVMDumpModuleToString )
@ -1485,69 +1514,96 @@ static PyMethodDef core_methods[] = {
_method( LLVMDisposePassManager ) _method( LLVMDisposePassManager )
/* Passes */ /* Passes */
_pass( AAEval )
_pass( ABCD )
_pass( AggressiveDCE ) _pass( AggressiveDCE )
_pass( AliasAnalysisCounter )
_pass( AlwaysInliner )
_pass( ArgumentPromotion ) _pass( ArgumentPromotion )
_pass( BasicAliasAnalysis )
_pass( BlockPlacement ) _pass( BlockPlacement )
_pass( BreakCriticalEdges ) _pass( BreakCriticalEdges )
_pass( CFGSimplification )
_pass( CodeGenPrepare ) _pass( CodeGenPrepare )
_pass( CondPropagation )
_pass( ConstantMerge ) _pass( ConstantMerge )
_pass( ConstantPropagation ) _pass( ConstantPropagation )
_pass( DeadCodeElimination ) _pass( DbgInfoPrinter )
_pass( DeadArgElimination ) _pass( DeadArgElimination )
_pass( DeadTypeElimination ) _pass( DeadCodeElimination )
_pass( DeadInstElimination ) _pass( DeadInstElimination )
_pass( DeadStoreElimination ) _pass( DeadStoreElimination )
/* _pass( GCSE ): removed in LLVM 2.4. */ _pass( DeadTypeElimination )
_pass( DemoteRegisterToMemory )
_pass( DomOnlyPrinter )
_pass( DomOnlyViewer )
_pass( DomPrinter )
_pass( DomViewer )
_pass( EdgeProfiler )
_pass( FunctionAttrs )
_pass( FunctionInlining )
_pass( GEPSplitter )
_pass( GlobalDCE ) _pass( GlobalDCE )
_pass( GlobalOptimizer ) _pass( GlobalOptimizer )
_pass( GlobalsModRef )
_pass( GVN ) _pass( GVN )
_pass( GVNPRE )
_pass( IndMemRem )
_pass( IndVarSimplify ) _pass( IndVarSimplify )
_pass( FunctionInlining ) _pass( InstCount )
_pass( BlockProfiler )
_pass( EdgeProfiler )
_pass( FunctionProfiler )
_pass( NullProfilerRS )
_pass( RSProfiling )
_pass( InstructionCombining ) _pass( InstructionCombining )
_pass( Internalize ) _pass( InstructionNamer )
_pass( IPConstantPropagation ) _pass( IPConstantPropagation )
_pass( IPSCCP ) _pass( IPSCCP )
_pass( JumpThreading ) _pass( JumpThreading )
_pass( LazyValueInfo )
_pass( LCSSA ) _pass( LCSSA )
_pass( LICM ) _pass( LICM )
_pass( LiveValues )
_pass( LoopDeletion ) _pass( LoopDeletion )
_pass( LoopDependenceAnalysis )
_pass( LoopExtractor ) _pass( LoopExtractor )
_pass( SingleLoopExtractor )
_pass( LoopIndexSplit ) _pass( LoopIndexSplit )
_pass( LoopStrengthReduce )
_pass( LoopRotate ) _pass( LoopRotate )
_pass( LoopSimplify )
_pass( LoopStrengthReduce )
_pass( LoopUnroll ) _pass( LoopUnroll )
_pass( LoopUnswitch ) _pass( LoopUnswitch )
_pass( LoopSimplify )
_pass( LowerAllocations )
_pass( LowerInvoke ) _pass( LowerInvoke )
_pass( LowerSetJmp ) _pass( LowerSetJmp )
_pass( LowerSwitch ) _pass( LowerSwitch )
_pass( PromoteMemoryToRegister )
_pass( MemCpyOpt ) _pass( MemCpyOpt )
_pass( UnifyFunctionExitNodes ) _pass( MergeFunctions )
_pass( PredicateSimplifier ) _pass( NoAA )
_pass( NoProfileInfo )
_pass( OptimalEdgeProfiler )
_pass( PartialInlining )
_pass( PartialSpecialization )
_pass( PostDomOnlyPrinter )
_pass( PostDomOnlyViewer )
_pass( PostDomPrinter )
_pass( PostDomViewer )
_pass( ProfileEstimator )
_pass( ProfileLoader )
_pass( ProfileVerifier )
_pass( PromoteMemoryToRegister )
_pass( PruneEH ) _pass( PruneEH )
_pass( RaiseAllocations )
_pass( Reassociate ) _pass( Reassociate )
_pass( DemoteRegisterToMemory ) _pass( ScalarEvolutionAliasAnalysis )
_pass( ScalarReplAggregates ) _pass( ScalarReplAggregates )
_pass( SCCP ) _pass( SCCP )
_pass( SCCVN )
_pass( SimplifyHalfPowrLibCalls )
_pass( SimplifyLibCalls ) _pass( SimplifyLibCalls )
_pass( CFGSimplification ) _pass( SingleLoopExtractor )
_pass( StripSymbols ) _pass( SSI )
_pass( SSIEverything )
_pass( StripDeadPrototypes ) _pass( StripDeadPrototypes )
_pass( StripNonDebugSymbols )
_pass( StripSymbols )
_pass( StructRetPromotion ) _pass( StructRetPromotion )
_pass( TailCallElimination ) _pass( TailCallElimination )
_pass( TailDuplication ) _pass( TailDuplication )
_pass( UnifyFunctionExitNodes )
_pass( Internalize )
/* Target Data */ /* Target Data */
_method( LLVMCreateTargetData ) _method( LLVMCreateTargetData )

File diff suppressed because it is too large Load diff

View file

@ -51,93 +51,96 @@ TYPE_X86_FP80 = 3
TYPE_FP128 = 4 TYPE_FP128 = 4
TYPE_PPC_FP128 = 5 TYPE_PPC_FP128 = 5
TYPE_LABEL = 6 TYPE_LABEL = 6
TYPE_METADATA = 7 TYPE_INTEGER = 7
TYPE_INTEGER = 8 TYPE_FUNCTION = 8
TYPE_FUNCTION = 9 TYPE_STRUCT = 9
TYPE_STRUCT = 10 TYPE_ARRAY = 10
TYPE_ARRAY = 11 TYPE_POINTER = 11
TYPE_POINTER = 12 TYPE_OPAQUE = 12
TYPE_OPAQUE = 13 TYPE_VECTOR = 13
TYPE_VECTOR = 14 TYPE_METADATA = 14
TYPE_UNION = 15
# value IDs (llvm::Value::ValueTy enum) # value IDs (llvm::Value::ValueTy enum)
VALUE_ARGUMENT = 0 VALUE_ARGUMENT = 0
VALUE_BASIC_BLOCK = 1 VALUE_BASIC_BLOCK = 1
VALUE_FUNCTION = 2 VALUE_FUNCTION = 2
VALUE_GLOBAL_ALIAS = 3 VALUE_GLOBAL_ALIAS = 3
VALUE_GLOBAL_VARIABLE = 4 VALUE_GLOBAL_VARIABLE = 4
VALUE_UNDEF_VALUE = 5 VALUE_UNDEF_VALUE = 5
VALUE_CONSTANT_EXPR = 6 VALUE_BLOCK_ADDRESS = 6
VALUE_CONSTANT_AGGREGATE_ZERO = 7 VALUE_CONSTANT_EXPR = 7
VALUE_CONSTANT_INT = 8 VALUE_CONSTANT_AGGREGATE_ZERO = 8
VALUE_CONSTANT_FP = 9 VALUE_CONSTANT_INT = 9
VALUE_CONSTANT_ARRAY = 10 VALUE_CONSTANT_FP = 10
VALUE_CONSTANT_STRUCT = 11 VALUE_CONSTANT_ARRAY = 11
VALUE_CONSTANT_VECTOR = 12 VALUE_CONSTANT_STRUCT = 12
VALUE_CONSTANT_POINTER_NULL = 13 VALUE_CONSTANT_UNION = 13
VALUE_MD_NODE = 14 VALUE_CONSTANT_VECTOR = 14
VALUE_MD_STRING = 15 VALUE_CONSTANT_POINTER_NULL = 15
VALUE_NAMED_MD_NODE = 16 VALUE_MD_NODE = 16
VALUE_INLINE_ASM = 17 VALUE_MD_STRING = 17
VALUE_PSEUDO_SOURCE_VALUE = 18 VALUE_NAMED_MD_NODE = 18
VALUE_INSTRUCTION = 19 VALUE_INLINE_ASM = 19
VALUE_PSEUDO_SOURCE_VALUE = 20
VALUE_FIXED_STACK_PSEUDO_SOURCE_VALUE = 21
VALUE_INSTRUCTION = 22
# instruction opcodes (from include/llvm/Instruction.def) # instruction opcodes (from include/llvm/Instruction.def)
OPCODE_RET = 1 OPCODE_RET = 1
OPCODE_BR = 2 OPCODE_BR = 2
OPCODE_SWITCH = 3 OPCODE_SWITCH = 3
OPCODE_INVOKE = 4 OPCODE_INDIRECT_BR = 4
OPCODE_UNWIND = 5 OPCODE_INVOKE = 5
OPCODE_UNREACHABLE = 6 OPCODE_UNWIND = 6
OPCODE_ADD = 7 OPCODE_UNREACHABLE = 7
OPCODE_FADD = 8 OPCODE_ADD = 8
OPCODE_SUB = 9 OPCODE_FADD = 9
OPCODE_FSUB = 10 OPCODE_SUB = 10
OPCODE_MUL = 11 OPCODE_FSUB = 11
OPCODE_FMUL = 12 OPCODE_MUL = 12
OPCODE_UDIV = 13 OPCODE_FMUL = 13
OPCODE_SDIV = 14 OPCODE_UDIV = 14
OPCODE_FDIV = 15 OPCODE_SDIV = 15
OPCODE_UREM = 16 OPCODE_FDIV = 16
OPCODE_SREM = 17 OPCODE_UREM = 17
OPCODE_FREM = 18 OPCODE_SREM = 18
OPCODE_SHL = 19 OPCODE_FREM = 19
OPCODE_LSHR = 20 OPCODE_SHL = 20
OPCODE_ASHR = 21 OPCODE_LSHR = 21
OPCODE_AND = 22 OPCODE_ASHR = 22
OPCODE_OR = 23 OPCODE_AND = 23
OPCODE_XOR = 24 OPCODE_OR = 24
OPCODE_MALLOC = 25 OPCODE_XOR = 25
OPCODE_FREE = 26 OPCODE_ALLOCA = 26
OPCODE_ALLOCA = 27 OPCODE_LOAD = 27
OPCODE_LOAD = 28 OPCODE_STORE = 28
OPCODE_STORE = 29 OPCODE_GETELEMENTPTR = 29
OPCODE_GETELEMENTPTR = 30 OPCODE_TRUNC = 30
OPCODE_TRUNC = 31 OPCODE_ZEXT = 31
OPCODE_ZEXT = 32 OPCODE_SEXT = 32
OPCODE_SEXT = 33 OPCODE_FPTOUI = 33
OPCODE_FPTOUI = 34 OPCODE_FPTOSI = 34
OPCODE_FPTOSI = 35 OPCODE_UITOFP = 35
OPCODE_UITOFP = 36 OPCODE_SITOFP = 36
OPCODE_SITOFP = 37 OPCODE_FPTRUNC = 37
OPCODE_FPTRUNC = 38 OPCODE_FPEXT = 38
OPCODE_FPEXT = 39 OPCODE_PTRTOINT = 39
OPCODE_PTRTOINT = 40 OPCODE_INTTOPTR = 40
OPCODE_INTTOPTR = 41 OPCODE_BITCAST = 41
OPCODE_BITCAST = 42 OPCODE_ICMP = 42
OPCODE_ICMP = 43 OPCODE_FCMP = 43
OPCODE_FCMP = 44 OPCODE_PHI = 44
OPCODE_PHI = 45 OPCODE_CALL = 45
OPCODE_CALL = 46 OPCODE_SELECT = 46
OPCODE_SELECT = 47 OPCODE_USEROP1 = 47
OPCODE_USEROP1 = 48 OPCODE_USEROP2 = 48
OPCODE_USEROP2 = 49 OPCODE_VAARG = 59
OPCODE_VAARG = 50 OPCODE_EXTRACTELEMENT = 50
OPCODE_EXTRACTELEMENT = 51 OPCODE_INSERTELEMENT = 51
OPCODE_INSERTELEMENT = 52 OPCODE_SHUFFLEVECTOR = 52
OPCODE_SHUFFLEVECTOR = 53 OPCODE_EXTRACTVALUE = 53
OPCODE_EXTRACTVALUE = 54 OPCODE_INSERTVALUE = 54
OPCODE_INSERTVALUE = 55
# calling conventions # calling conventions
CC_C = 0 CC_C = 0
@ -206,7 +209,7 @@ RPRED_ULE = FCMP_ULE
RPRED_UNE = FCMP_UNE RPRED_UNE = FCMP_UNE
RPRED_TRUE = FCMP_TRUE RPRED_TRUE = FCMP_TRUE
# linkages # linkages (see llvm-c/Core.h)
LINKAGE_EXTERNAL = 0 LINKAGE_EXTERNAL = 0
LINKAGE_AVAILABLE_EXTERNALLY = 1 LINKAGE_AVAILABLE_EXTERNALLY = 1
LINKAGE_LINKONCE_ANY = 2 LINKAGE_LINKONCE_ANY = 2
@ -216,39 +219,41 @@ LINKAGE_WEAK_ODR = 5
LINKAGE_APPENDING = 6 LINKAGE_APPENDING = 6
LINKAGE_INTERNAL = 7 LINKAGE_INTERNAL = 7
LINKAGE_PRIVATE = 8 LINKAGE_PRIVATE = 8
LINKAGE_LINKER_PRIVATE = 9 LINKAGE_DLLIMPORT = 9
LINKAGE_DLLIMPORT = 10 LINKAGE_DLLEXPORT = 10
LINKAGE_DLLEXPORT = 11 LINKAGE_EXTERNAL_WEAK = 11
LINKAGE_EXTERNAL_WEAK = 12 LINKAGE_GHOST = 12
LINKAGE_GHOST = 13 LINKAGE_COMMON = 13
LINKAGE_COMMON = 14 LINKAGE_LINKER_PRIVATE = 14
# visibility # visibility (see llvm/GlobalValue.h)
VISIBILITY_DEFAULT = 0 VISIBILITY_DEFAULT = 0
VISIBILITY_HIDDEN = 1 VISIBILITY_HIDDEN = 1
VISIBILITY_PROTECTED = 2 VISIBILITY_PROTECTED = 2
# parameter attributes (see llvm/Attributes.h) # parameter attributes (see llvm/Attributes.h)
ATTR_ZEXT = 1 ATTR_NONE = 0
ATTR_SEXT = 2 ATTR_ZEXT = 1
ATTR_NO_RETURN = 4 ATTR_SEXT = 2
ATTR_IN_REG = 8 ATTR_NO_RETURN = 4
ATTR_STRUCT_RET = 16 ATTR_IN_REG = 8
ATTR_NO_UNWIND = 32 ATTR_STRUCT_RET = 16
ATTR_NO_ALIAS = 64 ATTR_NO_UNWIND = 32
ATTR_BY_VAL = 128 ATTR_NO_ALIAS = 64
ATTR_NEST = 256 ATTR_BY_VAL = 128
ATTR_READ_NONE = 512 ATTR_NEST = 256
ATTR_READONLY = 1024 ATTR_READ_NONE = 512
ATTR_NO_INLINE = 1<<11 ATTR_READONLY = 1024
ATTR_ALWAYS_INLINE = 1<<12 ATTR_NO_INLINE = 1<<11
ATTR_OPTIMIZE_FOR_SIZE = 1<<13 ATTR_ALWAYS_INLINE = 1<<12
ATTR_STACK_PROTECT = 1<<14 ATTR_OPTIMIZE_FOR_SIZE = 1<<13
ATTR_STACK_PROTECT_REQ = 1<<15 ATTR_STACK_PROTECT = 1<<14
ATTR_NO_CAPTURE = 1<<21 ATTR_STACK_PROTECT_REQ = 1<<15
ATTR_NO_REDZONE = 1<<22 ATTR_NO_CAPTURE = 1<<21
ATTR_NO_IMPLICIT_FLOAT = 1<<23 ATTR_NO_REDZONE = 1<<22
ATTR_NAKED = 1<<24 ATTR_NO_IMPLICIT_FLOAT = 1<<23
ATTR_NAKED = 1<<24
ATTR_INLINE_HINT = 1<<25
# intrinsic IDs # intrinsic IDs
from llvm._intrinsic_ids import * from llvm._intrinsic_ids import *
@ -439,6 +444,14 @@ class Module(llvm.Ownable, llvm.Cacheable):
""" """
_core.LLVMDeleteTypeName(self.ptr, name) _core.LLVMDeleteTypeName(self.ptr, name)
def get_type_named(self, name):
"""Return a Type object with the given name."""
ptr = _core.LLVMGetTypeByName(self.ptr, name)
if ptr:
kind = _core.LLVMGetTypeKind(ptr)
return _make_type(ptr, kind)
return None
def add_global_variable(self, ty, name): def add_global_variable(self, ty, name):
"""Add a global variable of given type with given name.""" """Add a global variable of given type with given name."""
return GlobalVariable.new(self, ty, name) return GlobalVariable.new(self, ty, name)

View file

@ -41,6 +41,7 @@
#include <sstream> #include <sstream>
// LLVM includes // LLVM includes
#include "llvm/LLVMContext.h"
#include "llvm/Bitcode/ReaderWriter.h" #include "llvm/Bitcode/ReaderWriter.h"
#include "llvm/Support/MemoryBuffer.h" #include "llvm/Support/MemoryBuffer.h"
#include "llvm/Support/Casting.h" #include "llvm/Support/Casting.h"
@ -48,7 +49,6 @@
#include "llvm/DerivedTypes.h" #include "llvm/DerivedTypes.h"
#include "llvm/GlobalVariable.h" #include "llvm/GlobalVariable.h"
#include "llvm/TypeSymbolTable.h" #include "llvm/TypeSymbolTable.h"
#include "llvm/ModuleProvider.h"
#include "llvm/Support/MemoryBuffer.h" #include "llvm/Support/MemoryBuffer.h"
#include "llvm/Support/CallSite.h" #include "llvm/Support/CallSite.h"
#include "llvm/IntrinsicInst.h" #include "llvm/IntrinsicInst.h"
@ -58,6 +58,8 @@
#include "llvm/PassManager.h" #include "llvm/PassManager.h"
#include "llvm/ExecutionEngine/ExecutionEngine.h" #include "llvm/ExecutionEngine/ExecutionEngine.h"
#include "llvm/Analysis/LoopPass.h" #include "llvm/Analysis/LoopPass.h"
#include "llvm/Analysis/Passes.h"
#include "llvm/Analysis/DomPrinter.h"
#include "llvm/Transforms/Scalar.h" #include "llvm/Transforms/Scalar.h"
#include "llvm/Transforms/IPO.h" #include "llvm/Transforms/IPO.h"
#include "llvm/Transforms/Utils/UnifyFunctionExitNodes.h" #include "llvm/Transforms/Utils/UnifyFunctionExitNodes.h"
@ -461,13 +463,6 @@ int LLVMInlineFunction(LLVMValueRef call)
/* Passes. A few passes (listed below) are used directly from LLVM-C, /* Passes. A few passes (listed below) are used directly from LLVM-C,
* rest are defined here. * rest are defined here.
*
* ConstantPropagation
* GVN
* InstructionCombining
* PromoteMemoryToRegister
* Reassociate
* CFGSimplification
*/ */
#define define_pass(P) \ #define define_pass(P) \
@ -478,47 +473,62 @@ void LLVMAdd ## P ## Pass (LLVMPassManagerRef passmgr) { \
pmp->add( create ## P ## Pass ()); \ pmp->add( create ## P ## Pass ()); \
} }
define_pass( ArgumentPromotion ) define_pass( AAEval )
define_pass( ABCD )
define_pass( AliasAnalysisCounter )
define_pass( AlwaysInliner )
define_pass( BasicAliasAnalysis )
define_pass( BlockPlacement ) define_pass( BlockPlacement )
define_pass( BreakCriticalEdges ) define_pass( BreakCriticalEdges )
define_pass( CodeGenPrepare ) define_pass( CodeGenPrepare )
define_pass( ConstantMerge ) define_pass( DbgInfoPrinter )
define_pass( DeadCodeElimination ) define_pass( DeadCodeElimination )
define_pass( DeadArgElimination )
define_pass( DeadTypeElimination )
define_pass( DeadInstElimination ) define_pass( DeadInstElimination )
/* define_pass( GCSE ): removed in LLVM 2.4 */ define_pass( DemoteRegisterToMemory )
define_pass( GlobalDCE ) define_pass( DomOnlyPrinter )
define_pass( GlobalOptimizer ) define_pass( DomOnlyViewer )
define_pass( GVNPRE ) define_pass( DomPrinter )
define_pass( IndMemRem ) define_pass( DomViewer )
define_pass( FunctionInlining )
define_pass( BlockProfiler )
define_pass( EdgeProfiler ) define_pass( EdgeProfiler )
define_pass( FunctionProfiler ) define_pass( GEPSplitter )
define_pass( NullProfilerRS ) define_pass( GlobalsModRef )
define_pass( RSProfiling ) define_pass( InstCount )
define_pass( InstructionNamer )
define_pass( IPSCCP )
define_pass( LazyValueInfo )
define_pass( LCSSA )
define_pass( LiveValues )
define_pass( LoopDependenceAnalysis )
define_pass( LoopExtractor )
define_pass( LoopSimplify )
define_pass( LoopStrengthReduce )
define_pass( LowerInvoke )
define_pass( LowerSwitch )
define_pass( MergeFunctions )
define_pass( NoAA )
define_pass( NoProfileInfo )
define_pass( OptimalEdgeProfiler )
define_pass( PartialInlining )
define_pass( PartialSpecialization )
define_pass( PostDomOnlyPrinter )
define_pass( PostDomOnlyViewer )
define_pass( PostDomPrinter )
define_pass( PostDomViewer )
define_pass( ProfileEstimator )
define_pass( ProfileLoader )
define_pass( ProfileVerifier )
define_pass( ScalarEvolutionAliasAnalysis )
define_pass( SCCVN )
define_pass( SimplifyHalfPowrLibCalls )
define_pass( SingleLoopExtractor )
define_pass( SSI )
define_pass( SSIEverything )
define_pass( StripNonDebugSymbols )
define_pass( StructRetPromotion )
define_pass( TailDuplication )
define_pass( UnifyFunctionExitNodes )
/* we support only internalize(true) */ /* we support only internalize(true) */
llvm::ModulePass *createInternalizePass() { return llvm::createInternalizePass(true); } llvm::ModulePass *createInternalizePass() { return llvm::createInternalizePass(true); }
define_pass( Internalize ) define_pass( Internalize )
define_pass( IPConstantPropagation )
define_pass( IPSCCP )
define_pass( LCSSA )
define_pass( LoopExtractor )
define_pass( SingleLoopExtractor )
define_pass( LoopStrengthReduce )
define_pass( LoopSimplify )
define_pass( LowerAllocations )
define_pass( LowerInvoke )
define_pass( LowerSetJmp )
define_pass( LowerSwitch )
define_pass( UnifyFunctionExitNodes )
define_pass( PredicateSimplifier )
define_pass( PruneEH )
define_pass( RaiseAllocations )
define_pass( DemoteRegisterToMemory )
define_pass( StripSymbols )
define_pass( StripDeadPrototypes )
define_pass( StructRetPromotion )
define_pass( TailDuplication )

View file

@ -183,77 +183,68 @@ void *LLVMGetPointerToFunction(LLVMExecutionEngineRef ee, LLVMValueRef fn);
* containing the call is still in a proper state (not changed). */ * containing the call is still in a proper state (not changed). */
int LLVMInlineFunction(LLVMValueRef call); int LLVMInlineFunction(LLVMValueRef call);
/* Passes. A few passes (listed below) are used directly from LLVM-C, /* Passes. Some passes are used directly from LLVM-C, rest are declared
* rest are declared here. * here. */
*
* ConstantPropagation
* GVN
* InstructionCombining
* PromoteMemoryToRegister
* Reassociate
* CFGSimplification
*/
#define declare_pass(P) \ #define declare_pass(P) \
void LLVMAdd ## P ## Pass (LLVMPassManagerRef PM); void LLVMAdd ## P ## Pass (LLVMPassManagerRef PM);
declare_pass( AggressiveDCE ) declare_pass( AAEval )
declare_pass( ArgumentPromotion ) declare_pass( ABCD )
declare_pass( AliasAnalysisCounter )
declare_pass( AlwaysInliner )
declare_pass( BasicAliasAnalysis )
declare_pass( BlockPlacement ) declare_pass( BlockPlacement )
declare_pass( BreakCriticalEdges ) declare_pass( BreakCriticalEdges )
declare_pass( CodeGenPrepare ) declare_pass( CodeGenPrepare )
declare_pass( CondPropagation ) declare_pass( DbgInfoPrinter )
declare_pass( ConstantMerge )
declare_pass( DeadCodeElimination ) declare_pass( DeadCodeElimination )
declare_pass( DeadArgElimination )
declare_pass( DeadTypeElimination )
declare_pass( DeadInstElimination ) declare_pass( DeadInstElimination )
declare_pass( DeadStoreElimination )
/* declare_pass( GCSE ): removed in LLVM 2.4. */
declare_pass( GlobalDCE )
declare_pass( GlobalOptimizer )
declare_pass( GVNPRE )
declare_pass( IndMemRem )
declare_pass( IndVarSimplify )
declare_pass( FunctionInlining )
declare_pass( BlockProfiler )
declare_pass( EdgeProfiler )
declare_pass( FunctionProfiler )
declare_pass( NullProfilerRS )
declare_pass( RSProfiling )
declare_pass( Internalize )
declare_pass( IPConstantPropagation )
declare_pass( IPSCCP )
declare_pass( JumpThreading )
declare_pass( LCSSA )
declare_pass( LICM )
declare_pass( LoopDeletion )
declare_pass( LoopExtractor )
declare_pass( SingleLoopExtractor )
declare_pass( LoopIndexSplit )
declare_pass( LoopStrengthReduce )
declare_pass( LoopRotate )
declare_pass( LoopUnroll )
declare_pass( LoopUnswitch )
declare_pass( LoopSimplify )
declare_pass( LowerAllocations )
declare_pass( LowerInvoke )
declare_pass( LowerSetJmp )
declare_pass( LowerSwitch )
declare_pass( MemCpyOpt )
declare_pass( UnifyFunctionExitNodes )
declare_pass( PredicateSimplifier )
declare_pass( PruneEH )
declare_pass( RaiseAllocations )
declare_pass( DemoteRegisterToMemory ) declare_pass( DemoteRegisterToMemory )
declare_pass( ScalarReplAggregates ) declare_pass( DomOnlyPrinter )
declare_pass( SCCP ) declare_pass( DomOnlyViewer )
declare_pass( SimplifyLibCalls ) declare_pass( DomPrinter )
declare_pass( StripSymbols ) declare_pass( DomViewer )
declare_pass( StripDeadPrototypes ) declare_pass( EdgeProfiler )
declare_pass( GEPSplitter )
declare_pass( GlobalsModRef )
declare_pass( InstCount )
declare_pass( InstructionNamer )
declare_pass( IPSCCP )
declare_pass( LazyValueInfo )
declare_pass( LCSSA )
declare_pass( LiveValues )
declare_pass( LoopDependenceAnalysis )
declare_pass( LoopExtractor )
declare_pass( LoopSimplify )
declare_pass( LoopStrengthReduce )
declare_pass( LowerInvoke )
declare_pass( LowerSwitch )
declare_pass( MergeFunctions )
declare_pass( NoAA )
declare_pass( NoProfileInfo )
declare_pass( OptimalEdgeProfiler )
declare_pass( PartialInlining )
declare_pass( PartialSpecialization )
declare_pass( PostDomOnlyPrinter )
declare_pass( PostDomOnlyViewer )
declare_pass( PostDomPrinter )
declare_pass( PostDomViewer )
declare_pass( ProfileEstimator )
declare_pass( ProfileLoader )
declare_pass( ProfileVerifier )
declare_pass( ScalarEvolutionAliasAnalysis )
declare_pass( SCCVN )
declare_pass( SimplifyHalfPowrLibCalls )
declare_pass( SingleLoopExtractor )
declare_pass( SSI )
declare_pass( SSIEverything )
declare_pass( StripNonDebugSymbols )
declare_pass( StructRetPromotion ) declare_pass( StructRetPromotion )
declare_pass( TailCallElimination )
declare_pass( TailDuplication ) declare_pass( TailDuplication )
declare_pass( UnifyFunctionExitNodes )
declare_pass( Internalize )
#ifdef __cplusplus #ifdef __cplusplus
} /* extern "C" */ } /* extern "C" */

View file

@ -42,69 +42,95 @@ import llvm._core as _core # C wrappers
# passes # passes
PASS_AGGRESSIVE_DCE = 1 PASS_AAEVAL = 1
PASS_ARGUMENT_PROMOTION = 2 PASS_ABCD = 2
PASS_BLOCK_PLACEMENT = 3 PASS_AGGRESSIVE_DCE = 3
PASS_BREAK_CRITICAL_EDGES = 4 PASS_ALIAS_ANALYSIS_COUNTER = 4
PASS_CODE_GEN_PREPARE = 5 PASS_ALWAYS_INLINER = 5
PASS_COND_PROPAGATION = 6 PASS_ARGUMENT_PROMOTION = 6
PASS_CONSTANT_MERGE = 7 PASS_BASIC_ALIAS_ANALYSIS = 7
PASS_CONSTANT_PROPAGATION = 8 PASS_BLOCK_PLACEMENT = 8
PASS_DEAD_CODE_ELIMINATION = 9 PASS_BREAK_CRITICAL_EDGES = 9
PASS_DEAD_ARG_ELIMINATION = 10 PASS_CFG_SIMPLIFICATION = 10
PASS_DEAD_TYPE_ELIMINATION = 11 PASS_CODE_GEN_PREPARE = 11
PASS_DEAD_INST_ELIMINATION = 12 PASS_CONSTANT_MERGE = 12
PASS_DEAD_STORE_ELIMINATION = 13 PASS_CONSTANT_PROPAGATION = 13
# PASS_GCSE = 14: removed in LLVM 2.4 PASS_DBG_INFO_PRINTER = 14
PASS_GLOBAL_DCE = 15 PASS_DEAD_ARG_ELIMINATION = 15
PASS_GLOBAL_OPTIMIZER = 16 PASS_DEAD_CODE_ELIMINATION = 16
PASS_GVN = 17 PASS_DEAD_INST_ELIMINATION = 17
PASS_GVNPRE = 18 PASS_DEAD_STORE_ELIMINATION = 18
PASS_IND_MEM_REM = 19 PASS_DEAD_TYPE_ELIMINATION = 19
PASS_IND_VAR_SIMPLIFY = 20 PASS_DEMOTE_REGISTER_TO_MEMORY = 20
PASS_FUNCTION_INLINING = 21 PASS_DOM_ONLY_PRINTER = 21
PASS_BLOCK_PROFILER = 22 PASS_DOM_ONLY_VIEWER = 22
PASS_EDGE_PROFILER = 23 PASS_DOM_PRINTER = 23
PASS_FUNCTION_PROFILER = 24 PASS_DOM_VIEWER = 24
PASS_NULL_PROFILER_RS = 25 PASS_EDGE_PROFILER = 25
PASS_RS_PROFILING = 26 PASS_FUNCTION_ATTRS = 26
PASS_INSTRUCTION_COMBINING = 27 PASS_FUNCTION_INLINING = 27
PASS_INTERNALIZE = 28 PASS_GEP_SPLITTER = 28
PASS_IP_CONSTANT_PROPAGATION = 29 PASS_GLOBAL_DCE = 29
PASS_IPSCCP = 30 PASS_GLOBAL_OPTIMIZER = 30
PASS_JUMP_THREADING = 31 PASS_GLOBALS_MOD_REF = 31
PASS_LCSSA = 32 PASS_GVN = 32
PASS_LICM = 33 PASS_IND_VAR_SIMPLIFY = 33
PASS_LOOP_DELETION = 34 PASS_INST_COUNT = 34
PASS_LOOP_EXTRACTOR = 35 PASS_INSTRUCTION_COMBINING = 35
PASS_SINGLE_LOOP_EXTRACTOR = 36 PASS_INSTRUCTION_NAMER = 36
PASS_LOOP_INDEX_SPLIT = 37 PASS_IP_CONSTANT_PROPAGATION = 37
PASS_LOOP_STRENGTH_REDUCE = 38 PASS_IPSCCP = 38
PASS_LOOP_ROTATE = 39 PASS_JUMP_THREADING = 39
PASS_LOOP_UNROLL = 40 PASS_LAZY_VALUE_INFO = 40
PASS_LOOP_UNSWITCH = 41 PASS_LCSSA = 41
PASS_LOOP_SIMPLIFY = 42 PASS_LICM = 42
PASS_LOWER_ALLOCATIONS = 43 PASS_LIVE_VALUES = 43
PASS_LOWER_INVOKE = 44 PASS_LOOP_DELETION = 44
PASS_LOWER_SET_JMP = 45 PASS_LOOP_DEPENDENCE_ANALYSIS = 45
PASS_LOWER_SWITCH = 46 PASS_LOOP_EXTRACTOR = 46
PASS_PROMOTE_MEMORY_TO_REGISTER = 47 PASS_LOOP_INDEX_SPLIT = 47
PASS_MEM_CPY_OPT = 48 PASS_LOOP_ROTATE = 48
PASS_UNIFY_FUNCTION_EXIT_NODES = 49 PASS_LOOP_SIMPLIFY = 49
PASS_PREDICATE_SIMPLIFIER = 50 PASS_LOOP_STRENGTH_REDUCE = 50
PASS_PRUNE_EH = 51 PASS_LOOP_UNROLL = 51
PASS_RAISE_ALLOCATIONS = 52 PASS_LOOP_UNSWITCH = 52
PASS_REASSOCIATE = 53 PASS_LOWER_INVOKE = 53
PASS_DEMOTE_REGISTER_TO_MEMORY = 54 PASS_LOWER_SET_JMP = 54
PASS_SCALAR_REPL_AGGREGATES = 55 PASS_LOWER_SWITCH = 55
PASS_SCCP = 56 PASS_MEM_CPY_OPT = 56
PASS_SIMPLIFY_LIB_CALLS = 57 PASS_MERGE_FUNCTIONS = 57
PASS_CFG_SIMPLIFICATION = 58 PASS_NO_AA = 58
PASS_STRIP_SYMBOLS = 59 PASS_NO_PROFILE_INFO = 59
PASS_STRIP_DEAD_PROTOTYPES = 60 PASS_OPTIMAL_EDGE_PROFILER = 60
PASS_STRUCT_RET_PROMOTION = 61 PASS_PARTIAL_INLINING = 61
PASS_TAIL_CALL_ELIMINATION = 62 PASS_PARTIAL_SPECIALIZATION = 62
PASS_TAIL_DUPLICATION = 63 PASS_POST_DOM_ONLY_PRINTER = 63
PASS_POST_DOM_ONLY_VIEWER = 64
PASS_POST_DOM_PRINTER = 65
PASS_POST_DOM_VIEWER = 66
PASS_PROFILE_ESTIMATOR = 67
PASS_PROFILE_LOADER = 68
PASS_PROFILE_VERIFIER = 69
PASS_PROMOTE_MEMORY_TO_REGISTER = 70
PASS_PRUNE_EH = 71
PASS_REASSOCIATE = 72
PASS_SCALAR_EVOLUTION_ALIAS_ANALYSIS = 73
PASS_SCALAR_REPL_AGGREGATES = 74
PASS_SCCVN = 75
PASS_SCCP = 76
PASS_SIMPLIFY_HALF_POWR_LIB_CALLS = 77
PASS_SIMPLIFY_LIB_CALLS = 78
PASS_SINGLE_LOOP_EXTRACTOR = 79
PASS_SSI = 80
PASS_SSI_EVERYTHING = 81
PASS_STRIP_DEAD_PROTOTYPES = 82
PASS_STRIP_NON_DEBUG_SYMBOLS = 83
PASS_STRIP_SYMBOLS = 84
PASS_STRUCT_RET_PROMOTION = 85
PASS_TAIL_CALL_ELIMINATION = 86
PASS_TAIL_DUPLICATION = 87
PASS_UNIFY_FUNCTION_EXIT_NODES = 88
PASS_INTERNALIZE = 89
@ -113,69 +139,95 @@ PASS_TAIL_DUPLICATION = 63
#===----------------------------------------------------------------------=== #===----------------------------------------------------------------------===
_pass_creator = { _pass_creator = {
PASS_AGGRESSIVE_DCE : _core.LLVMAddAggressiveDCEPass, PASS_AAEVAL : _core.LLVMAddAAEvalPass,
PASS_ARGUMENT_PROMOTION : _core.LLVMAddArgumentPromotionPass, PASS_ABCD : _core.LLVMAddABCDPass,
PASS_BLOCK_PLACEMENT : _core.LLVMAddBlockPlacementPass, PASS_AGGRESSIVE_DCE : _core.LLVMAddAggressiveDCEPass,
PASS_BREAK_CRITICAL_EDGES : _core.LLVMAddBreakCriticalEdgesPass, PASS_ALIAS_ANALYSIS_COUNTER : _core.LLVMAddAliasAnalysisCounterPass,
PASS_CODE_GEN_PREPARE : _core.LLVMAddCodeGenPreparePass, PASS_ALWAYS_INLINER : _core.LLVMAddAlwaysInlinerPass,
PASS_COND_PROPAGATION : _core.LLVMAddCondPropagationPass, PASS_ARGUMENT_PROMOTION : _core.LLVMAddArgumentPromotionPass,
PASS_CONSTANT_MERGE : _core.LLVMAddConstantMergePass, PASS_BASIC_ALIAS_ANALYSIS : _core.LLVMAddBasicAliasAnalysisPass,
PASS_CONSTANT_PROPAGATION : _core.LLVMAddConstantPropagationPass, PASS_BLOCK_PLACEMENT : _core.LLVMAddBlockPlacementPass,
PASS_DEAD_CODE_ELIMINATION : _core.LLVMAddDeadCodeEliminationPass, PASS_BREAK_CRITICAL_EDGES : _core.LLVMAddBreakCriticalEdgesPass,
PASS_DEAD_ARG_ELIMINATION : _core.LLVMAddDeadArgEliminationPass, PASS_CFG_SIMPLIFICATION : _core.LLVMAddCFGSimplificationPass,
PASS_DEAD_TYPE_ELIMINATION : _core.LLVMAddDeadTypeEliminationPass, PASS_CODE_GEN_PREPARE : _core.LLVMAddCodeGenPreparePass,
PASS_DEAD_INST_ELIMINATION : _core.LLVMAddDeadInstEliminationPass, PASS_CONSTANT_MERGE : _core.LLVMAddConstantMergePass,
PASS_DEAD_STORE_ELIMINATION : _core.LLVMAddDeadStoreEliminationPass, PASS_CONSTANT_PROPAGATION : _core.LLVMAddConstantPropagationPass,
# PASS_GCSE : _core.LLVMAddGCSEPass,: removed in LLVM 2.4. PASS_DBG_INFO_PRINTER : _core.LLVMAddDbgInfoPrinterPass,
PASS_GLOBAL_DCE : _core.LLVMAddGlobalDCEPass, PASS_DEAD_ARG_ELIMINATION : _core.LLVMAddDeadArgEliminationPass,
PASS_GLOBAL_OPTIMIZER : _core.LLVMAddGlobalOptimizerPass, PASS_DEAD_CODE_ELIMINATION : _core.LLVMAddDeadCodeEliminationPass,
PASS_GVN : _core.LLVMAddGVNPass, PASS_DEAD_INST_ELIMINATION : _core.LLVMAddDeadInstEliminationPass,
PASS_GVNPRE : _core.LLVMAddGVNPREPass, PASS_DEAD_STORE_ELIMINATION : _core.LLVMAddDeadStoreEliminationPass,
PASS_IND_MEM_REM : _core.LLVMAddIndMemRemPass, PASS_DEAD_TYPE_ELIMINATION : _core.LLVMAddDeadTypeEliminationPass,
PASS_IND_VAR_SIMPLIFY : _core.LLVMAddIndVarSimplifyPass, PASS_DEMOTE_REGISTER_TO_MEMORY : _core.LLVMAddDemoteRegisterToMemoryPass,
PASS_FUNCTION_INLINING : _core.LLVMAddFunctionInliningPass, PASS_DOM_ONLY_PRINTER : _core.LLVMAddDomOnlyPrinterPass,
PASS_BLOCK_PROFILER : _core.LLVMAddBlockProfilerPass, PASS_DOM_ONLY_VIEWER : _core.LLVMAddDomOnlyViewerPass,
PASS_EDGE_PROFILER : _core.LLVMAddEdgeProfilerPass, PASS_DOM_PRINTER : _core.LLVMAddDomPrinterPass,
PASS_FUNCTION_PROFILER : _core.LLVMAddFunctionProfilerPass, PASS_DOM_VIEWER : _core.LLVMAddDomViewerPass,
PASS_NULL_PROFILER_RS : _core.LLVMAddNullProfilerRSPass, PASS_EDGE_PROFILER : _core.LLVMAddEdgeProfilerPass,
PASS_RS_PROFILING : _core.LLVMAddRSProfilingPass, PASS_FUNCTION_ATTRS : _core.LLVMAddFunctionAttrsPass,
PASS_INSTRUCTION_COMBINING : _core.LLVMAddInstructionCombiningPass, PASS_FUNCTION_INLINING : _core.LLVMAddFunctionInliningPass,
PASS_INTERNALIZE : _core.LLVMAddInternalizePass, PASS_GEP_SPLITTER : _core.LLVMAddGEPSplitterPass,
PASS_IP_CONSTANT_PROPAGATION : _core.LLVMAddIPConstantPropagationPass, PASS_GLOBAL_DCE : _core.LLVMAddGlobalDCEPass,
PASS_IPSCCP : _core.LLVMAddIPSCCPPass, PASS_GLOBAL_OPTIMIZER : _core.LLVMAddGlobalOptimizerPass,
PASS_JUMP_THREADING : _core.LLVMAddJumpThreadingPass, PASS_GLOBALS_MOD_REF : _core.LLVMAddGlobalsModRefPass,
PASS_LCSSA : _core.LLVMAddLCSSAPass, PASS_GVN : _core.LLVMAddGVNPass,
PASS_LICM : _core.LLVMAddLICMPass, PASS_IND_VAR_SIMPLIFY : _core.LLVMAddIndVarSimplifyPass,
PASS_LOOP_DELETION : _core.LLVMAddLoopDeletionPass, PASS_INST_COUNT : _core.LLVMAddInstCountPass,
PASS_LOOP_EXTRACTOR : _core.LLVMAddLoopExtractorPass, PASS_INSTRUCTION_COMBINING : _core.LLVMAddInstructionCombiningPass,
PASS_SINGLE_LOOP_EXTRACTOR : _core.LLVMAddSingleLoopExtractorPass, PASS_INSTRUCTION_NAMER : _core.LLVMAddInstructionNamerPass,
PASS_LOOP_INDEX_SPLIT : _core.LLVMAddLoopIndexSplitPass, PASS_IP_CONSTANT_PROPAGATION : _core.LLVMAddIPConstantPropagationPass,
PASS_LOOP_STRENGTH_REDUCE : _core.LLVMAddLoopStrengthReducePass, PASS_IPSCCP : _core.LLVMAddIPSCCPPass,
PASS_LOOP_ROTATE : _core.LLVMAddLoopRotatePass, PASS_JUMP_THREADING : _core.LLVMAddJumpThreadingPass,
PASS_LOOP_UNROLL : _core.LLVMAddLoopUnrollPass, PASS_LAZY_VALUE_INFO : _core.LLVMAddLazyValueInfoPass,
PASS_LOOP_UNSWITCH : _core.LLVMAddLoopUnswitchPass, PASS_LCSSA : _core.LLVMAddLCSSAPass,
PASS_LOOP_SIMPLIFY : _core.LLVMAddLoopSimplifyPass, PASS_LICM : _core.LLVMAddLICMPass,
PASS_LOWER_ALLOCATIONS : _core.LLVMAddLowerAllocationsPass, PASS_LIVE_VALUES : _core.LLVMAddLiveValuesPass,
PASS_LOWER_INVOKE : _core.LLVMAddLowerInvokePass, PASS_LOOP_DELETION : _core.LLVMAddLoopDeletionPass,
PASS_LOWER_SET_JMP : _core.LLVMAddLowerSetJmpPass, PASS_LOOP_DEPENDENCE_ANALYSIS : _core.LLVMAddLoopDependenceAnalysisPass,
PASS_LOWER_SWITCH : _core.LLVMAddLowerSwitchPass, PASS_LOOP_EXTRACTOR : _core.LLVMAddLoopExtractorPass,
PASS_PROMOTE_MEMORY_TO_REGISTER : _core.LLVMAddPromoteMemoryToRegisterPass, PASS_LOOP_INDEX_SPLIT : _core.LLVMAddLoopIndexSplitPass,
PASS_MEM_CPY_OPT : _core.LLVMAddMemCpyOptPass, PASS_LOOP_ROTATE : _core.LLVMAddLoopRotatePass,
PASS_UNIFY_FUNCTION_EXIT_NODES : _core.LLVMAddUnifyFunctionExitNodesPass, PASS_LOOP_SIMPLIFY : _core.LLVMAddLoopSimplifyPass,
PASS_PREDICATE_SIMPLIFIER : _core.LLVMAddPredicateSimplifierPass, PASS_LOOP_STRENGTH_REDUCE : _core.LLVMAddLoopStrengthReducePass,
PASS_PRUNE_EH : _core.LLVMAddPruneEHPass, PASS_LOOP_UNROLL : _core.LLVMAddLoopUnrollPass,
PASS_RAISE_ALLOCATIONS : _core.LLVMAddRaiseAllocationsPass, PASS_LOOP_UNSWITCH : _core.LLVMAddLoopUnswitchPass,
PASS_REASSOCIATE : _core.LLVMAddReassociatePass, PASS_LOWER_INVOKE : _core.LLVMAddLowerInvokePass,
PASS_DEMOTE_REGISTER_TO_MEMORY : _core.LLVMAddDemoteRegisterToMemoryPass, PASS_LOWER_SET_JMP : _core.LLVMAddLowerSetJmpPass,
PASS_SCALAR_REPL_AGGREGATES : _core.LLVMAddScalarReplAggregatesPass, PASS_LOWER_SWITCH : _core.LLVMAddLowerSwitchPass,
PASS_SCCP : _core.LLVMAddSCCPPass, PASS_MEM_CPY_OPT : _core.LLVMAddMemCpyOptPass,
PASS_SIMPLIFY_LIB_CALLS : _core.LLVMAddSimplifyLibCallsPass, PASS_MERGE_FUNCTIONS : _core.LLVMAddMergeFunctionsPass,
PASS_CFG_SIMPLIFICATION : _core.LLVMAddCFGSimplificationPass, PASS_NO_AA : _core.LLVMAddNoAAPass,
PASS_STRIP_SYMBOLS : _core.LLVMAddStripSymbolsPass, PASS_NO_PROFILE_INFO : _core.LLVMAddNoProfileInfoPass,
PASS_STRIP_DEAD_PROTOTYPES : _core.LLVMAddStripDeadPrototypesPass, PASS_OPTIMAL_EDGE_PROFILER : _core.LLVMAddOptimalEdgeProfilerPass,
PASS_STRUCT_RET_PROMOTION : _core.LLVMAddStructRetPromotionPass, PASS_PARTIAL_INLINING : _core.LLVMAddPartialInliningPass,
PASS_TAIL_CALL_ELIMINATION : _core.LLVMAddTailCallEliminationPass, PASS_PARTIAL_SPECIALIZATION : _core.LLVMAddPartialSpecializationPass,
PASS_TAIL_DUPLICATION : _core.LLVMAddTailDuplicationPass, PASS_POST_DOM_ONLY_PRINTER : _core.LLVMAddPostDomOnlyPrinterPass,
PASS_POST_DOM_ONLY_VIEWER : _core.LLVMAddPostDomOnlyViewerPass,
PASS_POST_DOM_PRINTER : _core.LLVMAddPostDomPrinterPass,
PASS_POST_DOM_VIEWER : _core.LLVMAddPostDomViewerPass,
PASS_PROFILE_ESTIMATOR : _core.LLVMAddProfileEstimatorPass,
PASS_PROFILE_LOADER : _core.LLVMAddProfileLoaderPass,
PASS_PROFILE_VERIFIER : _core.LLVMAddProfileVerifierPass,
PASS_PROMOTE_MEMORY_TO_REGISTER : _core.LLVMAddPromoteMemoryToRegisterPass,
PASS_PRUNE_EH : _core.LLVMAddPruneEHPass,
PASS_REASSOCIATE : _core.LLVMAddReassociatePass,
PASS_SCALAR_EVOLUTION_ALIAS_ANALYSIS : _core.LLVMAddScalarEvolutionAliasAnalysisPass,
PASS_SCALAR_REPL_AGGREGATES : _core.LLVMAddScalarReplAggregatesPass,
PASS_SCCVN : _core.LLVMAddSCCVNPass,
PASS_SCCP : _core.LLVMAddSCCPPass,
PASS_SIMPLIFY_HALF_POWR_LIB_CALLS : _core.LLVMAddSimplifyHalfPowrLibCallsPass,
PASS_SIMPLIFY_LIB_CALLS : _core.LLVMAddSimplifyLibCallsPass,
PASS_SINGLE_LOOP_EXTRACTOR : _core.LLVMAddSingleLoopExtractorPass,
PASS_SSI : _core.LLVMAddSSIPass,
PASS_SSI_EVERYTHING : _core.LLVMAddSSIEverythingPass,
PASS_STRIP_DEAD_PROTOTYPES : _core.LLVMAddStripDeadPrototypesPass,
PASS_STRIP_NON_DEBUG_SYMBOLS : _core.LLVMAddStripNonDebugSymbolsPass,
PASS_STRIP_SYMBOLS : _core.LLVMAddStripSymbolsPass,
PASS_STRUCT_RET_PROMOTION : _core.LLVMAddStructRetPromotionPass,
PASS_TAIL_CALL_ELIMINATION : _core.LLVMAddTailCallEliminationPass,
PASS_TAIL_DUPLICATION : _core.LLVMAddTailDuplicationPass,
PASS_UNIFY_FUNCTION_EXIT_NODES : _core.LLVMAddUnifyFunctionExitNodesPass,
PASS_INTERNALIZE : _core.LLVMAddInternalizePass,
} }

View file

@ -1,6 +1,6 @@
#!/usr/bin/env python #!/usr/bin/env python
# #
# Copyright (c) 2008, Mahadevan R All rights reserved. # Copyright (c) 2008-10, Mahadevan R All rights reserved.
# #
# Redistribution and use in source and binary forms, with or without # Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met: # modification, are permitted provided that the following conditions are met:

View file

@ -573,8 +573,10 @@ def do_passmanager():
print " Testing class PassManager" print " Testing class PassManager"
pm = PassManager.new() pm = PassManager.new()
pm.add(TargetData.new('')) pm.add(TargetData.new(''))
for i in range(1, 10): for i in range(1, 90):
pm.add(i) if i not in (PASS_OPTIMAL_EDGE_PROFILER,
PASS_EDGE_PROFILER, PASS_PROFILE_LOADER, PASS_AAEVAL):
pm.add(i)
pm.run(Module.new('a')) pm.run(Module.new('a'))