An optimizer for ARC (#14962)
* WIP: an optimizer for ARC * do not optimize away destructors in 'finally' if unstructured control flow is involved * optimized the optimizer * minor code cleanup * first steps to .cursor inference * cursor inference: big steps to a working solution * baby steps * better .cursor inference * new feature: expandArc for easy inspection of the AST after ARC transformations * added topt_cursor test * adapt tests * cleanups, make tests green * optimize common traversal patterns * moved test case * fixes .cursor inference so that npeg compiles once again * cursor inference: more bugfixes Co-authored-by: Clyybber <darkmine956@gmail.com>
This commit is contained in:
parent
813dd1b670
commit
c5358b0d4b
19 changed files with 895 additions and 62 deletions
35
tests/arc/topt_cursor.nim
Normal file
35
tests/arc/topt_cursor.nim
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
discard """
|
||||
output: '''("string here", 80)'''
|
||||
cmd: '''nim c --gc:arc --expandArc:main --hint:Performance:off $file'''
|
||||
nimout: '''--expandArc: main
|
||||
|
||||
var
|
||||
:tmpD
|
||||
:tmpD_1
|
||||
:tmpD_2
|
||||
try:
|
||||
var x = ("hi", 5)
|
||||
x = if cond:
|
||||
:tmpD = ("different", 54)
|
||||
:tmpD else:
|
||||
:tmpD_1 = ("string here", 80)
|
||||
:tmpD_1
|
||||
echo [
|
||||
:tmpD_2 = `$`(x)
|
||||
:tmpD_2]
|
||||
finally:
|
||||
`=destroy`(:tmpD_2)
|
||||
-- end of expandArc ------------------------'''
|
||||
"""
|
||||
|
||||
proc main(cond: bool) =
|
||||
var x = ("hi", 5) # goal: computed as cursor
|
||||
|
||||
x = if cond:
|
||||
("different", 54)
|
||||
else:
|
||||
("string here", 80)
|
||||
|
||||
echo x
|
||||
|
||||
main(false)
|
||||
Loading…
Add table
Add a link
Reference in a new issue