sonolus.py 0.1.2__py3-none-any.whl → 0.1.4__py3-none-any.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 sonolus.py might be problematic. Click here for more details.
- sonolus/backend/allocate.py +125 -51
- sonolus/backend/blocks.py +756 -756
- sonolus/backend/coalesce.py +85 -0
- sonolus/backend/constant_evaluation.py +374 -0
- sonolus/backend/dead_code.py +80 -0
- sonolus/backend/dominance.py +111 -0
- sonolus/backend/excepthook.py +37 -37
- sonolus/backend/finalize.py +69 -69
- sonolus/backend/flow.py +121 -92
- sonolus/backend/inlining.py +150 -0
- sonolus/backend/ir.py +5 -3
- sonolus/backend/liveness.py +173 -0
- sonolus/backend/mode.py +24 -24
- sonolus/backend/node.py +40 -40
- sonolus/backend/ops.py +197 -197
- sonolus/backend/optimize.py +37 -9
- sonolus/backend/passes.py +52 -6
- sonolus/backend/simplify.py +47 -30
- sonolus/backend/ssa.py +187 -0
- sonolus/backend/utils.py +48 -48
- sonolus/backend/visitor.py +892 -880
- sonolus/build/cli.py +7 -1
- sonolus/build/compile.py +88 -90
- sonolus/build/engine.py +55 -5
- sonolus/build/level.py +24 -23
- sonolus/build/node.py +43 -43
- sonolus/script/archetype.py +23 -6
- sonolus/script/array.py +2 -2
- sonolus/script/bucket.py +191 -191
- sonolus/script/callbacks.py +127 -115
- sonolus/script/comptime.py +1 -1
- sonolus/script/containers.py +23 -0
- sonolus/script/debug.py +19 -3
- sonolus/script/easing.py +323 -0
- sonolus/script/effect.py +131 -131
- sonolus/script/engine.py +37 -1
- sonolus/script/globals.py +269 -269
- sonolus/script/graphics.py +200 -150
- sonolus/script/instruction.py +151 -0
- sonolus/script/internal/__init__.py +5 -5
- sonolus/script/internal/builtin_impls.py +144 -144
- sonolus/script/internal/context.py +12 -4
- sonolus/script/internal/descriptor.py +17 -17
- sonolus/script/internal/introspection.py +14 -14
- sonolus/script/internal/native.py +40 -38
- sonolus/script/internal/value.py +3 -3
- sonolus/script/interval.py +120 -112
- sonolus/script/iterator.py +214 -211
- sonolus/script/math.py +30 -1
- sonolus/script/num.py +1 -1
- sonolus/script/options.py +191 -191
- sonolus/script/particle.py +157 -157
- sonolus/script/pointer.py +30 -30
- sonolus/script/{preview.py → print.py} +81 -81
- sonolus/script/random.py +14 -0
- sonolus/script/range.py +58 -58
- sonolus/script/record.py +3 -3
- sonolus/script/runtime.py +45 -6
- sonolus/script/sprite.py +333 -333
- sonolus/script/text.py +407 -407
- sonolus/script/timing.py +42 -42
- sonolus/script/transform.py +77 -23
- sonolus/script/ui.py +160 -160
- sonolus/script/vec.py +81 -72
- {sonolus_py-0.1.2.dist-info → sonolus_py-0.1.4.dist-info}/METADATA +1 -2
- sonolus_py-0.1.4.dist-info/RECORD +84 -0
- {sonolus_py-0.1.2.dist-info → sonolus_py-0.1.4.dist-info}/WHEEL +1 -1
- {sonolus_py-0.1.2.dist-info → sonolus_py-0.1.4.dist-info}/licenses/LICENSE +21 -21
- sonolus/build/defaults.py +0 -32
- sonolus/script/icon.py +0 -73
- sonolus_py-0.1.2.dist-info/RECORD +0 -76
- {sonolus_py-0.1.2.dist-info → sonolus_py-0.1.4.dist-info}/entry_points.txt +0 -0
sonolus/backend/ops.py
CHANGED
|
@@ -1,197 +1,197 @@
|
|
|
1
|
-
from enum import StrEnum
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
class Op(StrEnum):
|
|
5
|
-
def __new__(cls, name: str, side_effects: bool, pure: bool, control_flow: bool):
|
|
6
|
-
obj = str.__new__(cls, name)
|
|
7
|
-
obj._value_ = name
|
|
8
|
-
obj.side_effects = side_effects
|
|
9
|
-
obj.pure = pure
|
|
10
|
-
obj.control_flow = control_flow
|
|
11
|
-
return obj
|
|
12
|
-
|
|
13
|
-
Abs = ("Abs", False, True, False)
|
|
14
|
-
Add = ("Add", False, True, False)
|
|
15
|
-
And = ("And", False, True, True)
|
|
16
|
-
Arccos = ("Arccos", False, True, False)
|
|
17
|
-
Arcsin = ("Arcsin", False, True, False)
|
|
18
|
-
Arctan = ("Arctan", False, True, False)
|
|
19
|
-
Arctan2 = ("Arctan2", False, True, False)
|
|
20
|
-
BeatToBPM = ("BeatToBPM", False, True, False)
|
|
21
|
-
BeatToStartingBeat = ("BeatToStartingBeat", False, True, False)
|
|
22
|
-
BeatToStartingTime = ("BeatToStartingTime", False, True, False)
|
|
23
|
-
BeatToTime = ("BeatToTime", False, True, False)
|
|
24
|
-
Block = ("Block", False, True, True)
|
|
25
|
-
Break = ("Break", True, False, True)
|
|
26
|
-
Ceil = ("Ceil", False, True, False)
|
|
27
|
-
Clamp = ("Clamp", False, True, False)
|
|
28
|
-
Copy = ("Copy", True, False, False)
|
|
29
|
-
Cos = ("Cos", False, True, False)
|
|
30
|
-
Cosh = ("Cosh", False, True, False)
|
|
31
|
-
DebugLog = ("DebugLog", True, False, False)
|
|
32
|
-
DebugPause = ("DebugPause", True, False, False)
|
|
33
|
-
DecrementPost = ("DecrementPost", True, False, False)
|
|
34
|
-
DecrementPostPointed = ("DecrementPostPointed", True, False, False)
|
|
35
|
-
DecrementPostShifted = ("DecrementPostShifted", True, False, False)
|
|
36
|
-
DecrementPre = ("DecrementPre", True, False, False)
|
|
37
|
-
DecrementPrePointed = ("DecrementPrePointed", True, False, False)
|
|
38
|
-
DecrementPreShifted = ("DecrementPreShifted", True, False, False)
|
|
39
|
-
Degree = ("Degree", False, True, False)
|
|
40
|
-
DestroyParticleEffect = ("DestroyParticleEffect", True, False, False)
|
|
41
|
-
Divide = ("Divide", False, True, False)
|
|
42
|
-
DoWhile = ("DoWhile", False, True, True)
|
|
43
|
-
Draw = ("Draw", True, False, False)
|
|
44
|
-
DrawCurvedB = ("DrawCurvedB", True, False, False)
|
|
45
|
-
DrawCurvedBT = ("DrawCurvedBT", True, False, False)
|
|
46
|
-
DrawCurvedL = ("DrawCurvedL", True, False, False)
|
|
47
|
-
DrawCurvedLR = ("DrawCurvedLR", True, False, False)
|
|
48
|
-
DrawCurvedR = ("DrawCurvedR", True, False, False)
|
|
49
|
-
DrawCurvedT = ("DrawCurvedT", True, False, False)
|
|
50
|
-
EaseInBack = ("EaseInBack", False, True, False)
|
|
51
|
-
EaseInCirc = ("EaseInCirc", False, True, False)
|
|
52
|
-
EaseInCubic = ("EaseInCubic", False, True, False)
|
|
53
|
-
EaseInElastic = ("EaseInElastic", False, True, False)
|
|
54
|
-
EaseInExpo = ("EaseInExpo", False, True, False)
|
|
55
|
-
EaseInOutBack = ("EaseInOutBack", False, True, False)
|
|
56
|
-
EaseInOutCirc = ("EaseInOutCirc", False, True, False)
|
|
57
|
-
EaseInOutCubic = ("EaseInOutCubic", False, True, False)
|
|
58
|
-
EaseInOutElastic = ("EaseInOutElastic", False, True, False)
|
|
59
|
-
EaseInOutExpo = ("EaseInOutExpo", False, True, False)
|
|
60
|
-
EaseInOutQuad = ("EaseInOutQuad", False, True, False)
|
|
61
|
-
EaseInOutQuart = ("EaseInOutQuart", False, True, False)
|
|
62
|
-
EaseInOutQuint = ("EaseInOutQuint", False, True, False)
|
|
63
|
-
EaseInOutSine = ("EaseInOutSine", False, True, False)
|
|
64
|
-
EaseInQuad = ("EaseInQuad", False, True, False)
|
|
65
|
-
EaseInQuart = ("EaseInQuart", False, True, False)
|
|
66
|
-
EaseInQuint = ("EaseInQuint", False, True, False)
|
|
67
|
-
EaseInSine = ("EaseInSine", False, True, False)
|
|
68
|
-
EaseOutBack = ("EaseOutBack", False, True, False)
|
|
69
|
-
EaseOutCirc = ("EaseOutCirc", False, True, False)
|
|
70
|
-
EaseOutCubic = ("EaseOutCubic", False, True, False)
|
|
71
|
-
EaseOutElastic = ("EaseOutElastic", False, True, False)
|
|
72
|
-
EaseOutExpo = ("EaseOutExpo", False, True, False)
|
|
73
|
-
EaseOutInBack = ("EaseOutInBack", False, True, False)
|
|
74
|
-
EaseOutInCirc = ("EaseOutInCirc", False, True, False)
|
|
75
|
-
EaseOutInCubic = ("EaseOutInCubic", False, True, False)
|
|
76
|
-
EaseOutInElastic = ("EaseOutInElastic", False, True, False)
|
|
77
|
-
EaseOutInExpo = ("EaseOutInExpo", False, True, False)
|
|
78
|
-
EaseOutInQuad = ("EaseOutInQuad", False, True, False)
|
|
79
|
-
EaseOutInQuart = ("EaseOutInQuart", False, True, False)
|
|
80
|
-
EaseOutInQuint = ("EaseOutInQuint", False, True, False)
|
|
81
|
-
EaseOutInSine = ("EaseOutInSine", False, True, False)
|
|
82
|
-
EaseOutQuad = ("EaseOutQuad", False, True, False)
|
|
83
|
-
EaseOutQuart = ("EaseOutQuart", False, True, False)
|
|
84
|
-
EaseOutQuint = ("EaseOutQuint", False, True, False)
|
|
85
|
-
EaseOutSine = ("EaseOutSine", False, True, False)
|
|
86
|
-
Equal = ("Equal", False, True, False)
|
|
87
|
-
Execute = ("Execute", False, True, False)
|
|
88
|
-
Execute0 = ("Execute0", False, True, False)
|
|
89
|
-
ExportValue = ("ExportValue", True, False, False)
|
|
90
|
-
Floor = ("Floor", False, True, False)
|
|
91
|
-
Frac = ("Frac", False, True, False)
|
|
92
|
-
Get = ("Get", False, False, False)
|
|
93
|
-
GetPointed = ("GetPointed", False, False, False)
|
|
94
|
-
GetShifted = ("GetShifted", False, False, False)
|
|
95
|
-
Greater = ("Greater", False, True, False)
|
|
96
|
-
GreaterOr = ("GreaterOr", False, True, False)
|
|
97
|
-
HasEffectClip = ("HasEffectClip", False, True, False)
|
|
98
|
-
HasParticleEffect = ("HasParticleEffect", False, True, False)
|
|
99
|
-
HasSkinSprite = ("HasSkinSprite", False, True, False)
|
|
100
|
-
If = ("If", False, True, True)
|
|
101
|
-
IncrementPost = ("IncrementPost", True, False, False)
|
|
102
|
-
IncrementPostPointed = ("IncrementPostPointed", True, False, False)
|
|
103
|
-
IncrementPostShifted = ("IncrementPostShifted", True, False, False)
|
|
104
|
-
IncrementPre = ("IncrementPre", True, False, False)
|
|
105
|
-
IncrementPrePointed = ("IncrementPrePointed", True, False, False)
|
|
106
|
-
IncrementPreShifted = ("IncrementPreShifted", True, False, False)
|
|
107
|
-
Judge = ("Judge", False, True, False)
|
|
108
|
-
JudgeSimple = ("JudgeSimple", False, True, False)
|
|
109
|
-
JumpLoop = ("JumpLoop", False, True, True)
|
|
110
|
-
Lerp = ("Lerp", False, True, False)
|
|
111
|
-
LerpClamped = ("LerpClamped", False, True, False)
|
|
112
|
-
Less = ("Less", False, True, False)
|
|
113
|
-
LessOr = ("LessOr", False, True, False)
|
|
114
|
-
Log = ("Log", False, True, False)
|
|
115
|
-
Max = ("Max", False, True, False)
|
|
116
|
-
Min = ("Min", False, True, False)
|
|
117
|
-
Mod = ("Mod", False, True, False)
|
|
118
|
-
MoveParticleEffect = ("MoveParticleEffect", True, False, False)
|
|
119
|
-
Multiply = ("Multiply", False, True, False)
|
|
120
|
-
Negate = ("Negate", False, True, False)
|
|
121
|
-
Not = ("Not", False, True, False)
|
|
122
|
-
NotEqual = ("NotEqual", False, True, False)
|
|
123
|
-
Or = ("Or", False, True, True)
|
|
124
|
-
Paint = ("Paint", True, False, False)
|
|
125
|
-
Play = ("Play", True, False, False)
|
|
126
|
-
PlayLooped = ("PlayLooped", True, False, False)
|
|
127
|
-
PlayLoopedScheduled = ("PlayLoopedScheduled", True, False, False)
|
|
128
|
-
PlayScheduled = ("PlayScheduled", True, False, False)
|
|
129
|
-
Power = ("Power", False, True, False)
|
|
130
|
-
Print = ("Print", True, False, False)
|
|
131
|
-
Radian = ("Radian", False, True, False)
|
|
132
|
-
Random = ("Random", False, False, False)
|
|
133
|
-
RandomInteger = ("RandomInteger", False, False, False)
|
|
134
|
-
Rem = ("Rem", False, True, False)
|
|
135
|
-
Remap = ("Remap", False, True, False)
|
|
136
|
-
RemapClamped = ("RemapClamped", False, True, False)
|
|
137
|
-
Round = ("Round", False, True, False)
|
|
138
|
-
Set = ("Set", True, False, False)
|
|
139
|
-
SetAdd = ("SetAdd", True, False, False)
|
|
140
|
-
SetAddPointed = ("SetAddPointed", True, False, False)
|
|
141
|
-
SetAddShifted = ("SetAddShifted", True, False, False)
|
|
142
|
-
SetDivide = ("SetDivide", True, False, False)
|
|
143
|
-
SetDividePointed = ("SetDividePointed", True, False, False)
|
|
144
|
-
SetDivideShifted = ("SetDivideShifted", True, False, False)
|
|
145
|
-
SetMod = ("SetMod", True, False, False)
|
|
146
|
-
SetModPointed = ("SetModPointed", True, False, False)
|
|
147
|
-
SetModShifted = ("SetModShifted", True, False, False)
|
|
148
|
-
SetMultiply = ("SetMultiply", True, False, False)
|
|
149
|
-
SetMultiplyPointed = ("SetMultiplyPointed", True, False, False)
|
|
150
|
-
SetMultiplyShifted = ("SetMultiplyShifted", True, False, False)
|
|
151
|
-
SetPointed = ("SetPointed", True, False, False)
|
|
152
|
-
SetPower = ("SetPower", True, False, False)
|
|
153
|
-
SetPowerPointed = ("SetPowerPointed", True, False, False)
|
|
154
|
-
SetPowerShifted = ("SetPowerShifted", True, False, False)
|
|
155
|
-
SetRem = ("SetRem", True, False, False)
|
|
156
|
-
SetRemPointed = ("SetRemPointed", True, False, False)
|
|
157
|
-
SetRemShifted = ("SetRemShifted", True, False, False)
|
|
158
|
-
SetShifted = ("SetShifted", True, False, False)
|
|
159
|
-
SetSubtract = ("SetSubtract", True, False, False)
|
|
160
|
-
SetSubtractPointed = ("SetSubtractPointed", True, False, False)
|
|
161
|
-
SetSubtractShifted = ("SetSubtractShifted", True, False, False)
|
|
162
|
-
Sign = ("Sign", False, True, False)
|
|
163
|
-
Sin = ("Sin", False, True, False)
|
|
164
|
-
Sinh = ("Sinh", False, True, False)
|
|
165
|
-
Spawn = ("Spawn", True, False, False)
|
|
166
|
-
SpawnParticleEffect = ("SpawnParticleEffect", True, False, False)
|
|
167
|
-
StackEnter = ("StackEnter", True, False, False)
|
|
168
|
-
StackGet = ("StackGet", False, False, False)
|
|
169
|
-
StackGetFrame = ("StackGetFrame", False, False, False)
|
|
170
|
-
StackGetFramePointer = ("StackGetFramePointer", False, False, False)
|
|
171
|
-
StackGetPointer = ("StackGetPointer", False, False, False)
|
|
172
|
-
StackGrow = ("StackGrow", True, False, False)
|
|
173
|
-
StackInit = ("StackInit", True, False, False)
|
|
174
|
-
StackLeave = ("StackLeave", True, False, False)
|
|
175
|
-
StackPop = ("StackPop", True, False, False)
|
|
176
|
-
StackPush = ("StackPush", True, False, False)
|
|
177
|
-
StackSet = ("StackSet", True, False, False)
|
|
178
|
-
StackSetFrame = ("StackSetFrame", True, False, False)
|
|
179
|
-
StackSetFramePointer = ("StackSetFramePointer", True, False, False)
|
|
180
|
-
StackSetPointer = ("StackSetPointer", True, False, False)
|
|
181
|
-
StopLooped = ("StopLooped", True, False, False)
|
|
182
|
-
StopLoopedScheduled = ("StopLoopedScheduled", True, False, False)
|
|
183
|
-
Subtract = ("Subtract", False, True, False)
|
|
184
|
-
Switch = ("Switch", False, True, True)
|
|
185
|
-
SwitchInteger = ("SwitchInteger", False, True, True)
|
|
186
|
-
SwitchIntegerWithDefault = ("SwitchIntegerWithDefault", False, True, True)
|
|
187
|
-
SwitchWithDefault = ("SwitchWithDefault", False, True, True)
|
|
188
|
-
Tan = ("Tan", False, True, False)
|
|
189
|
-
Tanh = ("Tanh", False, True, False)
|
|
190
|
-
TimeToScaledTime = ("TimeToScaledTime", False, True, False)
|
|
191
|
-
TimeToStartingScaledTime = ("TimeToStartingScaledTime", False, True, False)
|
|
192
|
-
TimeToStartingTime = ("TimeToStartingTime", False, True, False)
|
|
193
|
-
TimeToTimeScale = ("TimeToTimeScale", False, True, False)
|
|
194
|
-
Trunc = ("Trunc", False, True, False)
|
|
195
|
-
Unlerp = ("Unlerp", False, True, False)
|
|
196
|
-
UnlerpClamped = ("UnlerpClamped", False, True, False)
|
|
197
|
-
While = ("While", False, True, True)
|
|
1
|
+
from enum import StrEnum
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class Op(StrEnum):
|
|
5
|
+
def __new__(cls, name: str, side_effects: bool, pure: bool, control_flow: bool):
|
|
6
|
+
obj = str.__new__(cls, name)
|
|
7
|
+
obj._value_ = name
|
|
8
|
+
obj.side_effects = side_effects
|
|
9
|
+
obj.pure = pure
|
|
10
|
+
obj.control_flow = control_flow
|
|
11
|
+
return obj
|
|
12
|
+
|
|
13
|
+
Abs = ("Abs", False, True, False)
|
|
14
|
+
Add = ("Add", False, True, False)
|
|
15
|
+
And = ("And", False, True, True)
|
|
16
|
+
Arccos = ("Arccos", False, True, False)
|
|
17
|
+
Arcsin = ("Arcsin", False, True, False)
|
|
18
|
+
Arctan = ("Arctan", False, True, False)
|
|
19
|
+
Arctan2 = ("Arctan2", False, True, False)
|
|
20
|
+
BeatToBPM = ("BeatToBPM", False, True, False)
|
|
21
|
+
BeatToStartingBeat = ("BeatToStartingBeat", False, True, False)
|
|
22
|
+
BeatToStartingTime = ("BeatToStartingTime", False, True, False)
|
|
23
|
+
BeatToTime = ("BeatToTime", False, True, False)
|
|
24
|
+
Block = ("Block", False, True, True)
|
|
25
|
+
Break = ("Break", True, False, True)
|
|
26
|
+
Ceil = ("Ceil", False, True, False)
|
|
27
|
+
Clamp = ("Clamp", False, True, False)
|
|
28
|
+
Copy = ("Copy", True, False, False)
|
|
29
|
+
Cos = ("Cos", False, True, False)
|
|
30
|
+
Cosh = ("Cosh", False, True, False)
|
|
31
|
+
DebugLog = ("DebugLog", True, False, False)
|
|
32
|
+
DebugPause = ("DebugPause", True, False, False)
|
|
33
|
+
DecrementPost = ("DecrementPost", True, False, False)
|
|
34
|
+
DecrementPostPointed = ("DecrementPostPointed", True, False, False)
|
|
35
|
+
DecrementPostShifted = ("DecrementPostShifted", True, False, False)
|
|
36
|
+
DecrementPre = ("DecrementPre", True, False, False)
|
|
37
|
+
DecrementPrePointed = ("DecrementPrePointed", True, False, False)
|
|
38
|
+
DecrementPreShifted = ("DecrementPreShifted", True, False, False)
|
|
39
|
+
Degree = ("Degree", False, True, False)
|
|
40
|
+
DestroyParticleEffect = ("DestroyParticleEffect", True, False, False)
|
|
41
|
+
Divide = ("Divide", False, True, False)
|
|
42
|
+
DoWhile = ("DoWhile", False, True, True)
|
|
43
|
+
Draw = ("Draw", True, False, False)
|
|
44
|
+
DrawCurvedB = ("DrawCurvedB", True, False, False)
|
|
45
|
+
DrawCurvedBT = ("DrawCurvedBT", True, False, False)
|
|
46
|
+
DrawCurvedL = ("DrawCurvedL", True, False, False)
|
|
47
|
+
DrawCurvedLR = ("DrawCurvedLR", True, False, False)
|
|
48
|
+
DrawCurvedR = ("DrawCurvedR", True, False, False)
|
|
49
|
+
DrawCurvedT = ("DrawCurvedT", True, False, False)
|
|
50
|
+
EaseInBack = ("EaseInBack", False, True, False)
|
|
51
|
+
EaseInCirc = ("EaseInCirc", False, True, False)
|
|
52
|
+
EaseInCubic = ("EaseInCubic", False, True, False)
|
|
53
|
+
EaseInElastic = ("EaseInElastic", False, True, False)
|
|
54
|
+
EaseInExpo = ("EaseInExpo", False, True, False)
|
|
55
|
+
EaseInOutBack = ("EaseInOutBack", False, True, False)
|
|
56
|
+
EaseInOutCirc = ("EaseInOutCirc", False, True, False)
|
|
57
|
+
EaseInOutCubic = ("EaseInOutCubic", False, True, False)
|
|
58
|
+
EaseInOutElastic = ("EaseInOutElastic", False, True, False)
|
|
59
|
+
EaseInOutExpo = ("EaseInOutExpo", False, True, False)
|
|
60
|
+
EaseInOutQuad = ("EaseInOutQuad", False, True, False)
|
|
61
|
+
EaseInOutQuart = ("EaseInOutQuart", False, True, False)
|
|
62
|
+
EaseInOutQuint = ("EaseInOutQuint", False, True, False)
|
|
63
|
+
EaseInOutSine = ("EaseInOutSine", False, True, False)
|
|
64
|
+
EaseInQuad = ("EaseInQuad", False, True, False)
|
|
65
|
+
EaseInQuart = ("EaseInQuart", False, True, False)
|
|
66
|
+
EaseInQuint = ("EaseInQuint", False, True, False)
|
|
67
|
+
EaseInSine = ("EaseInSine", False, True, False)
|
|
68
|
+
EaseOutBack = ("EaseOutBack", False, True, False)
|
|
69
|
+
EaseOutCirc = ("EaseOutCirc", False, True, False)
|
|
70
|
+
EaseOutCubic = ("EaseOutCubic", False, True, False)
|
|
71
|
+
EaseOutElastic = ("EaseOutElastic", False, True, False)
|
|
72
|
+
EaseOutExpo = ("EaseOutExpo", False, True, False)
|
|
73
|
+
EaseOutInBack = ("EaseOutInBack", False, True, False)
|
|
74
|
+
EaseOutInCirc = ("EaseOutInCirc", False, True, False)
|
|
75
|
+
EaseOutInCubic = ("EaseOutInCubic", False, True, False)
|
|
76
|
+
EaseOutInElastic = ("EaseOutInElastic", False, True, False)
|
|
77
|
+
EaseOutInExpo = ("EaseOutInExpo", False, True, False)
|
|
78
|
+
EaseOutInQuad = ("EaseOutInQuad", False, True, False)
|
|
79
|
+
EaseOutInQuart = ("EaseOutInQuart", False, True, False)
|
|
80
|
+
EaseOutInQuint = ("EaseOutInQuint", False, True, False)
|
|
81
|
+
EaseOutInSine = ("EaseOutInSine", False, True, False)
|
|
82
|
+
EaseOutQuad = ("EaseOutQuad", False, True, False)
|
|
83
|
+
EaseOutQuart = ("EaseOutQuart", False, True, False)
|
|
84
|
+
EaseOutQuint = ("EaseOutQuint", False, True, False)
|
|
85
|
+
EaseOutSine = ("EaseOutSine", False, True, False)
|
|
86
|
+
Equal = ("Equal", False, True, False)
|
|
87
|
+
Execute = ("Execute", False, True, False)
|
|
88
|
+
Execute0 = ("Execute0", False, True, False)
|
|
89
|
+
ExportValue = ("ExportValue", True, False, False)
|
|
90
|
+
Floor = ("Floor", False, True, False)
|
|
91
|
+
Frac = ("Frac", False, True, False)
|
|
92
|
+
Get = ("Get", False, False, False)
|
|
93
|
+
GetPointed = ("GetPointed", False, False, False)
|
|
94
|
+
GetShifted = ("GetShifted", False, False, False)
|
|
95
|
+
Greater = ("Greater", False, True, False)
|
|
96
|
+
GreaterOr = ("GreaterOr", False, True, False)
|
|
97
|
+
HasEffectClip = ("HasEffectClip", False, True, False)
|
|
98
|
+
HasParticleEffect = ("HasParticleEffect", False, True, False)
|
|
99
|
+
HasSkinSprite = ("HasSkinSprite", False, True, False)
|
|
100
|
+
If = ("If", False, True, True)
|
|
101
|
+
IncrementPost = ("IncrementPost", True, False, False)
|
|
102
|
+
IncrementPostPointed = ("IncrementPostPointed", True, False, False)
|
|
103
|
+
IncrementPostShifted = ("IncrementPostShifted", True, False, False)
|
|
104
|
+
IncrementPre = ("IncrementPre", True, False, False)
|
|
105
|
+
IncrementPrePointed = ("IncrementPrePointed", True, False, False)
|
|
106
|
+
IncrementPreShifted = ("IncrementPreShifted", True, False, False)
|
|
107
|
+
Judge = ("Judge", False, True, False)
|
|
108
|
+
JudgeSimple = ("JudgeSimple", False, True, False)
|
|
109
|
+
JumpLoop = ("JumpLoop", False, True, True)
|
|
110
|
+
Lerp = ("Lerp", False, True, False)
|
|
111
|
+
LerpClamped = ("LerpClamped", False, True, False)
|
|
112
|
+
Less = ("Less", False, True, False)
|
|
113
|
+
LessOr = ("LessOr", False, True, False)
|
|
114
|
+
Log = ("Log", False, True, False)
|
|
115
|
+
Max = ("Max", False, True, False)
|
|
116
|
+
Min = ("Min", False, True, False)
|
|
117
|
+
Mod = ("Mod", False, True, False)
|
|
118
|
+
MoveParticleEffect = ("MoveParticleEffect", True, False, False)
|
|
119
|
+
Multiply = ("Multiply", False, True, False)
|
|
120
|
+
Negate = ("Negate", False, True, False)
|
|
121
|
+
Not = ("Not", False, True, False)
|
|
122
|
+
NotEqual = ("NotEqual", False, True, False)
|
|
123
|
+
Or = ("Or", False, True, True)
|
|
124
|
+
Paint = ("Paint", True, False, False)
|
|
125
|
+
Play = ("Play", True, False, False)
|
|
126
|
+
PlayLooped = ("PlayLooped", True, False, False)
|
|
127
|
+
PlayLoopedScheduled = ("PlayLoopedScheduled", True, False, False)
|
|
128
|
+
PlayScheduled = ("PlayScheduled", True, False, False)
|
|
129
|
+
Power = ("Power", False, True, False)
|
|
130
|
+
Print = ("Print", True, False, False)
|
|
131
|
+
Radian = ("Radian", False, True, False)
|
|
132
|
+
Random = ("Random", False, False, False)
|
|
133
|
+
RandomInteger = ("RandomInteger", False, False, False)
|
|
134
|
+
Rem = ("Rem", False, True, False)
|
|
135
|
+
Remap = ("Remap", False, True, False)
|
|
136
|
+
RemapClamped = ("RemapClamped", False, True, False)
|
|
137
|
+
Round = ("Round", False, True, False)
|
|
138
|
+
Set = ("Set", True, False, False)
|
|
139
|
+
SetAdd = ("SetAdd", True, False, False)
|
|
140
|
+
SetAddPointed = ("SetAddPointed", True, False, False)
|
|
141
|
+
SetAddShifted = ("SetAddShifted", True, False, False)
|
|
142
|
+
SetDivide = ("SetDivide", True, False, False)
|
|
143
|
+
SetDividePointed = ("SetDividePointed", True, False, False)
|
|
144
|
+
SetDivideShifted = ("SetDivideShifted", True, False, False)
|
|
145
|
+
SetMod = ("SetMod", True, False, False)
|
|
146
|
+
SetModPointed = ("SetModPointed", True, False, False)
|
|
147
|
+
SetModShifted = ("SetModShifted", True, False, False)
|
|
148
|
+
SetMultiply = ("SetMultiply", True, False, False)
|
|
149
|
+
SetMultiplyPointed = ("SetMultiplyPointed", True, False, False)
|
|
150
|
+
SetMultiplyShifted = ("SetMultiplyShifted", True, False, False)
|
|
151
|
+
SetPointed = ("SetPointed", True, False, False)
|
|
152
|
+
SetPower = ("SetPower", True, False, False)
|
|
153
|
+
SetPowerPointed = ("SetPowerPointed", True, False, False)
|
|
154
|
+
SetPowerShifted = ("SetPowerShifted", True, False, False)
|
|
155
|
+
SetRem = ("SetRem", True, False, False)
|
|
156
|
+
SetRemPointed = ("SetRemPointed", True, False, False)
|
|
157
|
+
SetRemShifted = ("SetRemShifted", True, False, False)
|
|
158
|
+
SetShifted = ("SetShifted", True, False, False)
|
|
159
|
+
SetSubtract = ("SetSubtract", True, False, False)
|
|
160
|
+
SetSubtractPointed = ("SetSubtractPointed", True, False, False)
|
|
161
|
+
SetSubtractShifted = ("SetSubtractShifted", True, False, False)
|
|
162
|
+
Sign = ("Sign", False, True, False)
|
|
163
|
+
Sin = ("Sin", False, True, False)
|
|
164
|
+
Sinh = ("Sinh", False, True, False)
|
|
165
|
+
Spawn = ("Spawn", True, False, False)
|
|
166
|
+
SpawnParticleEffect = ("SpawnParticleEffect", True, False, False)
|
|
167
|
+
StackEnter = ("StackEnter", True, False, False)
|
|
168
|
+
StackGet = ("StackGet", False, False, False)
|
|
169
|
+
StackGetFrame = ("StackGetFrame", False, False, False)
|
|
170
|
+
StackGetFramePointer = ("StackGetFramePointer", False, False, False)
|
|
171
|
+
StackGetPointer = ("StackGetPointer", False, False, False)
|
|
172
|
+
StackGrow = ("StackGrow", True, False, False)
|
|
173
|
+
StackInit = ("StackInit", True, False, False)
|
|
174
|
+
StackLeave = ("StackLeave", True, False, False)
|
|
175
|
+
StackPop = ("StackPop", True, False, False)
|
|
176
|
+
StackPush = ("StackPush", True, False, False)
|
|
177
|
+
StackSet = ("StackSet", True, False, False)
|
|
178
|
+
StackSetFrame = ("StackSetFrame", True, False, False)
|
|
179
|
+
StackSetFramePointer = ("StackSetFramePointer", True, False, False)
|
|
180
|
+
StackSetPointer = ("StackSetPointer", True, False, False)
|
|
181
|
+
StopLooped = ("StopLooped", True, False, False)
|
|
182
|
+
StopLoopedScheduled = ("StopLoopedScheduled", True, False, False)
|
|
183
|
+
Subtract = ("Subtract", False, True, False)
|
|
184
|
+
Switch = ("Switch", False, True, True)
|
|
185
|
+
SwitchInteger = ("SwitchInteger", False, True, True)
|
|
186
|
+
SwitchIntegerWithDefault = ("SwitchIntegerWithDefault", False, True, True)
|
|
187
|
+
SwitchWithDefault = ("SwitchWithDefault", False, True, True)
|
|
188
|
+
Tan = ("Tan", False, True, False)
|
|
189
|
+
Tanh = ("Tanh", False, True, False)
|
|
190
|
+
TimeToScaledTime = ("TimeToScaledTime", False, True, False)
|
|
191
|
+
TimeToStartingScaledTime = ("TimeToStartingScaledTime", False, True, False)
|
|
192
|
+
TimeToStartingTime = ("TimeToStartingTime", False, True, False)
|
|
193
|
+
TimeToTimeScale = ("TimeToTimeScale", False, True, False)
|
|
194
|
+
Trunc = ("Trunc", False, True, False)
|
|
195
|
+
Unlerp = ("Unlerp", False, True, False)
|
|
196
|
+
UnlerpClamped = ("UnlerpClamped", False, True, False)
|
|
197
|
+
While = ("While", False, True, True)
|
sonolus/backend/optimize.py
CHANGED
|
@@ -1,9 +1,37 @@
|
|
|
1
|
-
from sonolus.backend.allocate import AllocateBasic
|
|
2
|
-
from sonolus.backend.
|
|
3
|
-
from sonolus.backend.
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
1
|
+
from sonolus.backend.allocate import Allocate, AllocateBasic
|
|
2
|
+
from sonolus.backend.coalesce import CopyCoalesce
|
|
3
|
+
from sonolus.backend.constant_evaluation import SparseConditionalConstantPropagation
|
|
4
|
+
from sonolus.backend.dead_code import DeadCodeElimination, UnreachableCodeElimination
|
|
5
|
+
from sonolus.backend.flow import BasicBlock
|
|
6
|
+
from sonolus.backend.inlining import InlineVars
|
|
7
|
+
from sonolus.backend.passes import run_passes
|
|
8
|
+
from sonolus.backend.simplify import CoalesceFlow
|
|
9
|
+
from sonolus.backend.ssa import FromSSA, ToSSA
|
|
10
|
+
|
|
11
|
+
MINIMAL_PASSES = [
|
|
12
|
+
CoalesceFlow(),
|
|
13
|
+
UnreachableCodeElimination(),
|
|
14
|
+
AllocateBasic(),
|
|
15
|
+
]
|
|
16
|
+
|
|
17
|
+
STANDARD_PASSES = [
|
|
18
|
+
CoalesceFlow(),
|
|
19
|
+
UnreachableCodeElimination(),
|
|
20
|
+
DeadCodeElimination(),
|
|
21
|
+
ToSSA(),
|
|
22
|
+
SparseConditionalConstantPropagation(),
|
|
23
|
+
UnreachableCodeElimination(),
|
|
24
|
+
DeadCodeElimination(),
|
|
25
|
+
CoalesceFlow(),
|
|
26
|
+
InlineVars(),
|
|
27
|
+
FromSSA(),
|
|
28
|
+
CoalesceFlow(),
|
|
29
|
+
CopyCoalesce(),
|
|
30
|
+
DeadCodeElimination(),
|
|
31
|
+
CoalesceFlow(),
|
|
32
|
+
Allocate(),
|
|
33
|
+
]
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def optimize_and_allocate(cfg: BasicBlock):
|
|
37
|
+
return run_passes(cfg, STANDARD_PASSES)
|
sonolus/backend/passes.py
CHANGED
|
@@ -1,6 +1,52 @@
|
|
|
1
|
-
from
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from abc import ABC, abstractmethod
|
|
4
|
+
from collections import deque
|
|
5
|
+
|
|
6
|
+
from sonolus.backend.flow import BasicBlock
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class CompilerPass(ABC):
|
|
10
|
+
def requires(self) -> set[CompilerPass]:
|
|
11
|
+
return set()
|
|
12
|
+
|
|
13
|
+
def preserves(self) -> set[CompilerPass] | None:
|
|
14
|
+
return None
|
|
15
|
+
|
|
16
|
+
def destroys(self) -> set[CompilerPass] | None:
|
|
17
|
+
return None
|
|
18
|
+
|
|
19
|
+
def applies(self) -> set[CompilerPass]:
|
|
20
|
+
return {self}
|
|
21
|
+
|
|
22
|
+
def exists_after(self, passes: set[CompilerPass]) -> set[CompilerPass]:
|
|
23
|
+
preserved = self.preserves()
|
|
24
|
+
destroyed = self.destroys()
|
|
25
|
+
if destroyed is None and preserved is None:
|
|
26
|
+
return self.applies()
|
|
27
|
+
if preserved is not None:
|
|
28
|
+
passes = {p for p in passes if p in preserved}
|
|
29
|
+
if destroyed is not None:
|
|
30
|
+
passes = {p for p in passes if p not in destroyed}
|
|
31
|
+
return passes | self.applies()
|
|
32
|
+
|
|
33
|
+
@abstractmethod
|
|
34
|
+
def run(self, entry: BasicBlock) -> BasicBlock:
|
|
35
|
+
pass
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def run_passes(entry: BasicBlock, passes: list[CompilerPass]) -> BasicBlock:
|
|
39
|
+
active_passes = set()
|
|
40
|
+
queue = deque(passes)
|
|
41
|
+
while queue:
|
|
42
|
+
if len(queue) > 99:
|
|
43
|
+
raise RuntimeError("Likely unsatisfiable pass requirements")
|
|
44
|
+
current_pass = queue.popleft()
|
|
45
|
+
missing_requirements = current_pass.requires() - active_passes
|
|
46
|
+
if missing_requirements:
|
|
47
|
+
queue.appendleft(current_pass)
|
|
48
|
+
queue.extendleft(missing_requirements)
|
|
49
|
+
continue
|
|
50
|
+
entry = current_pass.run(entry)
|
|
51
|
+
active_passes = current_pass.exists_after(active_passes)
|
|
52
|
+
return entry
|
sonolus/backend/simplify.py
CHANGED
|
@@ -1,30 +1,47 @@
|
|
|
1
|
-
from sonolus.backend.flow import BasicBlock
|
|
2
|
-
from sonolus.backend.
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
1
|
+
from sonolus.backend.flow import BasicBlock
|
|
2
|
+
from sonolus.backend.ir import IRGet, IRSet
|
|
3
|
+
from sonolus.backend.passes import CompilerPass
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class CoalesceFlow(CompilerPass):
|
|
7
|
+
def run(self, entry: BasicBlock) -> BasicBlock:
|
|
8
|
+
queue = [entry]
|
|
9
|
+
processed = set()
|
|
10
|
+
while queue:
|
|
11
|
+
block = queue.pop()
|
|
12
|
+
if block in processed:
|
|
13
|
+
continue
|
|
14
|
+
processed.add(block)
|
|
15
|
+
if len(block.outgoing) != 1:
|
|
16
|
+
queue.extend(edge.dst for edge in block.outgoing)
|
|
17
|
+
continue
|
|
18
|
+
next_block = next(iter(block.outgoing)).dst
|
|
19
|
+
if len(next_block.incoming) != 1:
|
|
20
|
+
queue.append(next_block)
|
|
21
|
+
if not block.statements and not block.phis and not next_block.phis:
|
|
22
|
+
for edge in block.incoming:
|
|
23
|
+
edge.dst = next_block
|
|
24
|
+
next_block.incoming.add(edge)
|
|
25
|
+
for edge in block.outgoing: # There should be exactly one
|
|
26
|
+
next_block.incoming.remove(edge)
|
|
27
|
+
if block is entry:
|
|
28
|
+
entry = next_block
|
|
29
|
+
continue
|
|
30
|
+
for p, args in next_block.phis.items():
|
|
31
|
+
if block not in args:
|
|
32
|
+
continue
|
|
33
|
+
block.statements.append(IRSet(p, IRGet(args[block])))
|
|
34
|
+
block.statements.extend(next_block.statements)
|
|
35
|
+
block.test = next_block.test
|
|
36
|
+
block.outgoing = next_block.outgoing
|
|
37
|
+
for edge in block.outgoing:
|
|
38
|
+
edge.src = block
|
|
39
|
+
dst = edge.dst
|
|
40
|
+
for args in dst.phis.values():
|
|
41
|
+
if next_block in args:
|
|
42
|
+
args[block] = args.pop(next_block)
|
|
43
|
+
processed.add(next_block)
|
|
44
|
+
queue.extend(edge.dst for edge in block.outgoing)
|
|
45
|
+
processed.remove(block)
|
|
46
|
+
queue.append(block)
|
|
47
|
+
return entry
|