llvmlite 0.42.0rc1__cp311-cp311-win_amd64.whl → 0.43.0rc1__cp311-cp311-win_amd64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of llvmlite might be problematic. Click here for more details.
- llvmlite/__init__.py +3 -3
- llvmlite/_version.py +2 -2
- llvmlite/binding/__init__.py +18 -18
- llvmlite/binding/analysis.py +69 -69
- llvmlite/binding/common.py +34 -34
- llvmlite/binding/context.py +29 -29
- llvmlite/binding/dylib.py +45 -45
- llvmlite/binding/executionengine.py +330 -330
- llvmlite/binding/ffi.py +390 -390
- llvmlite/binding/initfini.py +73 -73
- llvmlite/binding/linker.py +20 -20
- llvmlite/binding/llvmlite.dll +0 -0
- llvmlite/binding/module.py +349 -349
- llvmlite/binding/object_file.py +82 -82
- llvmlite/binding/options.py +17 -17
- llvmlite/binding/orcjit.py +342 -342
- llvmlite/binding/passmanagers.py +939 -932
- llvmlite/binding/targets.py +450 -450
- llvmlite/binding/transforms.py +151 -151
- llvmlite/binding/typeref.py +198 -198
- llvmlite/binding/value.py +618 -618
- llvmlite/ir/__init__.py +11 -11
- llvmlite/ir/_utils.py +80 -80
- llvmlite/ir/builder.py +1119 -1119
- llvmlite/ir/context.py +20 -20
- llvmlite/ir/instructions.py +893 -893
- llvmlite/ir/module.py +246 -246
- llvmlite/ir/transforms.py +64 -64
- llvmlite/ir/types.py +614 -614
- llvmlite/ir/values.py +1217 -1217
- llvmlite/tests/__init__.py +57 -57
- llvmlite/tests/__main__.py +3 -3
- llvmlite/tests/customize.py +407 -407
- llvmlite/tests/refprune_proto.py +329 -329
- llvmlite/tests/test_binding.py +2585 -2582
- llvmlite/tests/test_ir.py +2729 -2729
- llvmlite/tests/test_refprune.py +557 -526
- llvmlite/tests/test_valuerepr.py +60 -60
- llvmlite/utils.py +29 -29
- {llvmlite-0.42.0rc1.dist-info → llvmlite-0.43.0rc1.dist-info}/LICENSE +24 -24
- {llvmlite-0.42.0rc1.dist-info → llvmlite-0.43.0rc1.dist-info}/LICENSE.thirdparty +225 -225
- {llvmlite-0.42.0rc1.dist-info → llvmlite-0.43.0rc1.dist-info}/METADATA +1 -1
- llvmlite-0.43.0rc1.dist-info/RECORD +45 -0
- {llvmlite-0.42.0rc1.dist-info → llvmlite-0.43.0rc1.dist-info}/WHEEL +1 -1
- llvmlite-0.42.0rc1.dist-info/RECORD +0 -45
- {llvmlite-0.42.0rc1.dist-info → llvmlite-0.43.0rc1.dist-info}/top_level.txt +0 -0
llvmlite/binding/transforms.py
CHANGED
|
@@ -1,151 +1,151 @@
|
|
|
1
|
-
from ctypes import c_uint, c_bool
|
|
2
|
-
from llvmlite.binding import ffi
|
|
3
|
-
from llvmlite.binding import passmanagers
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
def create_pass_manager_builder():
|
|
7
|
-
return PassManagerBuilder()
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
class PassManagerBuilder(ffi.ObjectRef):
|
|
11
|
-
__slots__ = ()
|
|
12
|
-
|
|
13
|
-
def __init__(self, ptr=None):
|
|
14
|
-
if ptr is None:
|
|
15
|
-
ptr = ffi.lib.LLVMPY_PassManagerBuilderCreate()
|
|
16
|
-
ffi.ObjectRef.__init__(self, ptr)
|
|
17
|
-
|
|
18
|
-
@property
|
|
19
|
-
def opt_level(self):
|
|
20
|
-
"""
|
|
21
|
-
The general optimization level as an integer between 0 and 3.
|
|
22
|
-
"""
|
|
23
|
-
return ffi.lib.LLVMPY_PassManagerBuilderGetOptLevel(self)
|
|
24
|
-
|
|
25
|
-
@opt_level.setter
|
|
26
|
-
def opt_level(self, level):
|
|
27
|
-
ffi.lib.LLVMPY_PassManagerBuilderSetOptLevel(self, level)
|
|
28
|
-
|
|
29
|
-
@property
|
|
30
|
-
def size_level(self):
|
|
31
|
-
"""
|
|
32
|
-
Whether and how much to optimize for size. An integer between 0 and 2.
|
|
33
|
-
"""
|
|
34
|
-
return ffi.lib.LLVMPY_PassManagerBuilderGetSizeLevel(self)
|
|
35
|
-
|
|
36
|
-
@size_level.setter
|
|
37
|
-
def size_level(self, size):
|
|
38
|
-
ffi.lib.LLVMPY_PassManagerBuilderSetSizeLevel(self, size)
|
|
39
|
-
|
|
40
|
-
@property
|
|
41
|
-
def inlining_threshold(self):
|
|
42
|
-
"""
|
|
43
|
-
The integer threshold for inlining a function into another. The higher,
|
|
44
|
-
the more likely inlining a function is. This attribute is write-only.
|
|
45
|
-
"""
|
|
46
|
-
raise NotImplementedError("inlining_threshold is write-only")
|
|
47
|
-
|
|
48
|
-
@inlining_threshold.setter
|
|
49
|
-
def inlining_threshold(self, threshold):
|
|
50
|
-
ffi.lib.LLVMPY_PassManagerBuilderUseInlinerWithThreshold(
|
|
51
|
-
self, threshold)
|
|
52
|
-
|
|
53
|
-
@property
|
|
54
|
-
def disable_unroll_loops(self):
|
|
55
|
-
"""
|
|
56
|
-
If true, disable loop unrolling.
|
|
57
|
-
"""
|
|
58
|
-
return ffi.lib.LLVMPY_PassManagerBuilderGetDisableUnrollLoops(self)
|
|
59
|
-
|
|
60
|
-
@disable_unroll_loops.setter
|
|
61
|
-
def disable_unroll_loops(self, disable=True):
|
|
62
|
-
ffi.lib.LLVMPY_PassManagerBuilderSetDisableUnrollLoops(self, disable)
|
|
63
|
-
|
|
64
|
-
@property
|
|
65
|
-
def loop_vectorize(self):
|
|
66
|
-
"""
|
|
67
|
-
If true, allow vectorizing loops.
|
|
68
|
-
"""
|
|
69
|
-
return ffi.lib.LLVMPY_PassManagerBuilderGetLoopVectorize(self)
|
|
70
|
-
|
|
71
|
-
@loop_vectorize.setter
|
|
72
|
-
def loop_vectorize(self, enable=True):
|
|
73
|
-
return ffi.lib.LLVMPY_PassManagerBuilderSetLoopVectorize(self, enable)
|
|
74
|
-
|
|
75
|
-
@property
|
|
76
|
-
def slp_vectorize(self):
|
|
77
|
-
"""
|
|
78
|
-
If true, enable the "SLP vectorizer", which uses a different algorithm
|
|
79
|
-
from the loop vectorizer. Both may be enabled at the same time.
|
|
80
|
-
"""
|
|
81
|
-
return ffi.lib.LLVMPY_PassManagerBuilderGetSLPVectorize(self)
|
|
82
|
-
|
|
83
|
-
@slp_vectorize.setter
|
|
84
|
-
def slp_vectorize(self, enable=True):
|
|
85
|
-
return ffi.lib.LLVMPY_PassManagerBuilderSetSLPVectorize(self, enable)
|
|
86
|
-
|
|
87
|
-
def _populate_module_pm(self, pm):
|
|
88
|
-
ffi.lib.LLVMPY_PassManagerBuilderPopulateModulePassManager(self, pm)
|
|
89
|
-
|
|
90
|
-
def _populate_function_pm(self, pm):
|
|
91
|
-
ffi.lib.LLVMPY_PassManagerBuilderPopulateFunctionPassManager(self, pm)
|
|
92
|
-
|
|
93
|
-
def populate(self, pm):
|
|
94
|
-
if isinstance(pm, passmanagers.ModulePassManager):
|
|
95
|
-
self._populate_module_pm(pm)
|
|
96
|
-
elif isinstance(pm, passmanagers.FunctionPassManager):
|
|
97
|
-
self._populate_function_pm(pm)
|
|
98
|
-
else:
|
|
99
|
-
raise TypeError(pm)
|
|
100
|
-
|
|
101
|
-
def _dispose(self):
|
|
102
|
-
self._capi.LLVMPY_PassManagerBuilderDispose(self)
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
# ============================================================================
|
|
106
|
-
# FFI
|
|
107
|
-
|
|
108
|
-
ffi.lib.LLVMPY_PassManagerBuilderCreate.restype = ffi.LLVMPassManagerBuilderRef
|
|
109
|
-
|
|
110
|
-
ffi.lib.LLVMPY_PassManagerBuilderDispose.argtypes = [
|
|
111
|
-
ffi.LLVMPassManagerBuilderRef,
|
|
112
|
-
]
|
|
113
|
-
|
|
114
|
-
ffi.lib.LLVMPY_PassManagerBuilderPopulateModulePassManager.argtypes = [
|
|
115
|
-
ffi.LLVMPassManagerBuilderRef,
|
|
116
|
-
ffi.LLVMPassManagerRef,
|
|
117
|
-
]
|
|
118
|
-
|
|
119
|
-
ffi.lib.LLVMPY_PassManagerBuilderPopulateFunctionPassManager.argtypes = [
|
|
120
|
-
ffi.LLVMPassManagerBuilderRef,
|
|
121
|
-
ffi.LLVMPassManagerRef,
|
|
122
|
-
]
|
|
123
|
-
|
|
124
|
-
# Unsigned int PassManagerBuilder properties
|
|
125
|
-
|
|
126
|
-
for _func in (ffi.lib.LLVMPY_PassManagerBuilderSetOptLevel,
|
|
127
|
-
ffi.lib.LLVMPY_PassManagerBuilderSetSizeLevel,
|
|
128
|
-
ffi.lib.LLVMPY_PassManagerBuilderUseInlinerWithThreshold,
|
|
129
|
-
):
|
|
130
|
-
_func.argtypes = [ffi.LLVMPassManagerBuilderRef, c_uint]
|
|
131
|
-
|
|
132
|
-
for _func in (ffi.lib.LLVMPY_PassManagerBuilderGetOptLevel,
|
|
133
|
-
ffi.lib.LLVMPY_PassManagerBuilderGetSizeLevel,
|
|
134
|
-
):
|
|
135
|
-
_func.argtypes = [ffi.LLVMPassManagerBuilderRef]
|
|
136
|
-
_func.restype = c_uint
|
|
137
|
-
|
|
138
|
-
# Boolean PassManagerBuilder properties
|
|
139
|
-
|
|
140
|
-
for _func in (ffi.lib.LLVMPY_PassManagerBuilderSetDisableUnrollLoops,
|
|
141
|
-
ffi.lib.LLVMPY_PassManagerBuilderSetLoopVectorize,
|
|
142
|
-
ffi.lib.LLVMPY_PassManagerBuilderSetSLPVectorize,
|
|
143
|
-
):
|
|
144
|
-
_func.argtypes = [ffi.LLVMPassManagerBuilderRef, c_bool]
|
|
145
|
-
|
|
146
|
-
for _func in (ffi.lib.LLVMPY_PassManagerBuilderGetDisableUnrollLoops,
|
|
147
|
-
ffi.lib.LLVMPY_PassManagerBuilderGetLoopVectorize,
|
|
148
|
-
ffi.lib.LLVMPY_PassManagerBuilderGetSLPVectorize,
|
|
149
|
-
):
|
|
150
|
-
_func.argtypes = [ffi.LLVMPassManagerBuilderRef]
|
|
151
|
-
_func.restype = c_bool
|
|
1
|
+
from ctypes import c_uint, c_bool
|
|
2
|
+
from llvmlite.binding import ffi
|
|
3
|
+
from llvmlite.binding import passmanagers
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def create_pass_manager_builder():
|
|
7
|
+
return PassManagerBuilder()
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class PassManagerBuilder(ffi.ObjectRef):
|
|
11
|
+
__slots__ = ()
|
|
12
|
+
|
|
13
|
+
def __init__(self, ptr=None):
|
|
14
|
+
if ptr is None:
|
|
15
|
+
ptr = ffi.lib.LLVMPY_PassManagerBuilderCreate()
|
|
16
|
+
ffi.ObjectRef.__init__(self, ptr)
|
|
17
|
+
|
|
18
|
+
@property
|
|
19
|
+
def opt_level(self):
|
|
20
|
+
"""
|
|
21
|
+
The general optimization level as an integer between 0 and 3.
|
|
22
|
+
"""
|
|
23
|
+
return ffi.lib.LLVMPY_PassManagerBuilderGetOptLevel(self)
|
|
24
|
+
|
|
25
|
+
@opt_level.setter
|
|
26
|
+
def opt_level(self, level):
|
|
27
|
+
ffi.lib.LLVMPY_PassManagerBuilderSetOptLevel(self, level)
|
|
28
|
+
|
|
29
|
+
@property
|
|
30
|
+
def size_level(self):
|
|
31
|
+
"""
|
|
32
|
+
Whether and how much to optimize for size. An integer between 0 and 2.
|
|
33
|
+
"""
|
|
34
|
+
return ffi.lib.LLVMPY_PassManagerBuilderGetSizeLevel(self)
|
|
35
|
+
|
|
36
|
+
@size_level.setter
|
|
37
|
+
def size_level(self, size):
|
|
38
|
+
ffi.lib.LLVMPY_PassManagerBuilderSetSizeLevel(self, size)
|
|
39
|
+
|
|
40
|
+
@property
|
|
41
|
+
def inlining_threshold(self):
|
|
42
|
+
"""
|
|
43
|
+
The integer threshold for inlining a function into another. The higher,
|
|
44
|
+
the more likely inlining a function is. This attribute is write-only.
|
|
45
|
+
"""
|
|
46
|
+
raise NotImplementedError("inlining_threshold is write-only")
|
|
47
|
+
|
|
48
|
+
@inlining_threshold.setter
|
|
49
|
+
def inlining_threshold(self, threshold):
|
|
50
|
+
ffi.lib.LLVMPY_PassManagerBuilderUseInlinerWithThreshold(
|
|
51
|
+
self, threshold)
|
|
52
|
+
|
|
53
|
+
@property
|
|
54
|
+
def disable_unroll_loops(self):
|
|
55
|
+
"""
|
|
56
|
+
If true, disable loop unrolling.
|
|
57
|
+
"""
|
|
58
|
+
return ffi.lib.LLVMPY_PassManagerBuilderGetDisableUnrollLoops(self)
|
|
59
|
+
|
|
60
|
+
@disable_unroll_loops.setter
|
|
61
|
+
def disable_unroll_loops(self, disable=True):
|
|
62
|
+
ffi.lib.LLVMPY_PassManagerBuilderSetDisableUnrollLoops(self, disable)
|
|
63
|
+
|
|
64
|
+
@property
|
|
65
|
+
def loop_vectorize(self):
|
|
66
|
+
"""
|
|
67
|
+
If true, allow vectorizing loops.
|
|
68
|
+
"""
|
|
69
|
+
return ffi.lib.LLVMPY_PassManagerBuilderGetLoopVectorize(self)
|
|
70
|
+
|
|
71
|
+
@loop_vectorize.setter
|
|
72
|
+
def loop_vectorize(self, enable=True):
|
|
73
|
+
return ffi.lib.LLVMPY_PassManagerBuilderSetLoopVectorize(self, enable)
|
|
74
|
+
|
|
75
|
+
@property
|
|
76
|
+
def slp_vectorize(self):
|
|
77
|
+
"""
|
|
78
|
+
If true, enable the "SLP vectorizer", which uses a different algorithm
|
|
79
|
+
from the loop vectorizer. Both may be enabled at the same time.
|
|
80
|
+
"""
|
|
81
|
+
return ffi.lib.LLVMPY_PassManagerBuilderGetSLPVectorize(self)
|
|
82
|
+
|
|
83
|
+
@slp_vectorize.setter
|
|
84
|
+
def slp_vectorize(self, enable=True):
|
|
85
|
+
return ffi.lib.LLVMPY_PassManagerBuilderSetSLPVectorize(self, enable)
|
|
86
|
+
|
|
87
|
+
def _populate_module_pm(self, pm):
|
|
88
|
+
ffi.lib.LLVMPY_PassManagerBuilderPopulateModulePassManager(self, pm)
|
|
89
|
+
|
|
90
|
+
def _populate_function_pm(self, pm):
|
|
91
|
+
ffi.lib.LLVMPY_PassManagerBuilderPopulateFunctionPassManager(self, pm)
|
|
92
|
+
|
|
93
|
+
def populate(self, pm):
|
|
94
|
+
if isinstance(pm, passmanagers.ModulePassManager):
|
|
95
|
+
self._populate_module_pm(pm)
|
|
96
|
+
elif isinstance(pm, passmanagers.FunctionPassManager):
|
|
97
|
+
self._populate_function_pm(pm)
|
|
98
|
+
else:
|
|
99
|
+
raise TypeError(pm)
|
|
100
|
+
|
|
101
|
+
def _dispose(self):
|
|
102
|
+
self._capi.LLVMPY_PassManagerBuilderDispose(self)
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
# ============================================================================
|
|
106
|
+
# FFI
|
|
107
|
+
|
|
108
|
+
ffi.lib.LLVMPY_PassManagerBuilderCreate.restype = ffi.LLVMPassManagerBuilderRef
|
|
109
|
+
|
|
110
|
+
ffi.lib.LLVMPY_PassManagerBuilderDispose.argtypes = [
|
|
111
|
+
ffi.LLVMPassManagerBuilderRef,
|
|
112
|
+
]
|
|
113
|
+
|
|
114
|
+
ffi.lib.LLVMPY_PassManagerBuilderPopulateModulePassManager.argtypes = [
|
|
115
|
+
ffi.LLVMPassManagerBuilderRef,
|
|
116
|
+
ffi.LLVMPassManagerRef,
|
|
117
|
+
]
|
|
118
|
+
|
|
119
|
+
ffi.lib.LLVMPY_PassManagerBuilderPopulateFunctionPassManager.argtypes = [
|
|
120
|
+
ffi.LLVMPassManagerBuilderRef,
|
|
121
|
+
ffi.LLVMPassManagerRef,
|
|
122
|
+
]
|
|
123
|
+
|
|
124
|
+
# Unsigned int PassManagerBuilder properties
|
|
125
|
+
|
|
126
|
+
for _func in (ffi.lib.LLVMPY_PassManagerBuilderSetOptLevel,
|
|
127
|
+
ffi.lib.LLVMPY_PassManagerBuilderSetSizeLevel,
|
|
128
|
+
ffi.lib.LLVMPY_PassManagerBuilderUseInlinerWithThreshold,
|
|
129
|
+
):
|
|
130
|
+
_func.argtypes = [ffi.LLVMPassManagerBuilderRef, c_uint]
|
|
131
|
+
|
|
132
|
+
for _func in (ffi.lib.LLVMPY_PassManagerBuilderGetOptLevel,
|
|
133
|
+
ffi.lib.LLVMPY_PassManagerBuilderGetSizeLevel,
|
|
134
|
+
):
|
|
135
|
+
_func.argtypes = [ffi.LLVMPassManagerBuilderRef]
|
|
136
|
+
_func.restype = c_uint
|
|
137
|
+
|
|
138
|
+
# Boolean PassManagerBuilder properties
|
|
139
|
+
|
|
140
|
+
for _func in (ffi.lib.LLVMPY_PassManagerBuilderSetDisableUnrollLoops,
|
|
141
|
+
ffi.lib.LLVMPY_PassManagerBuilderSetLoopVectorize,
|
|
142
|
+
ffi.lib.LLVMPY_PassManagerBuilderSetSLPVectorize,
|
|
143
|
+
):
|
|
144
|
+
_func.argtypes = [ffi.LLVMPassManagerBuilderRef, c_bool]
|
|
145
|
+
|
|
146
|
+
for _func in (ffi.lib.LLVMPY_PassManagerBuilderGetDisableUnrollLoops,
|
|
147
|
+
ffi.lib.LLVMPY_PassManagerBuilderGetLoopVectorize,
|
|
148
|
+
ffi.lib.LLVMPY_PassManagerBuilderGetSLPVectorize,
|
|
149
|
+
):
|
|
150
|
+
_func.argtypes = [ffi.LLVMPassManagerBuilderRef]
|
|
151
|
+
_func.restype = c_bool
|