3838
3939reset! (calls:: Calls ) = calls. i[] = 0
4040
41- global to = Calls (100 )
42-
43-
4441struct Context{T<: Union{Nothing, Vector{Symbol}} }
4542 functions:: T
4643end
@@ -90,19 +87,19 @@ overdub(ctx::Context, f::Core.IntrinsicFunction, args...) = f(args...)
9087 ci = retrieve_code_info ((F, args... ))
9188 slot_vars = Dict (enumerate (ci. slotnames))
9289 # ssa_vars = Dict(i => gensym(:left) for i in 1:length(ci.code))
93- ssa_vars = Dict (i => Symbol (:L ,i) for i in 1 : length (ci. code))
90+ ssa_vars = Dict (i => Symbol (:L , i) for i in 1 : length (ci. code))
9491 used = assigned_vars (ci. code) |> distinct
9592 exprs = []
9693 for i in 1 : length (args)
9794 push! (exprs, Expr (:(= ), ci. slotnames[i+ 1 ], :(args[$ (i)])))
9895 end
9996 for (i, ex) in enumerate (ci. code)
97+ ex = rename_args (ex, slot_vars, ssa_vars)
10098 @show ex
10199 if ex isa Core. ReturnNode
102- push! (exprs, Expr (:return , rename_args ( ex. val, slot_vars, ssa_vars) ))
100+ push! (exprs, Expr (:return , ex. val))
103101 continue
104102 end
105- ex = rename_args (ex, slot_vars, ssa_vars)
106103 if timable (ex)
107104 fname = exportname (ex)
108105 fname = :(Symbol ($ (fname)))
@@ -112,6 +109,7 @@ overdub(ctx::Context, f::Core.IntrinsicFunction, args...) = f(args...)
112109 push! (exprs, ex)
113110 push! (exprs, Expr (:call , :push! , :to , :(:stop ), fname))
114111 else
112+ ex = i ∈ used ? Expr (:(= ) , ssa_vars[i], ex) : ex
115113 push! (exprs, ex)
116114 end
117115 end
@@ -121,8 +119,10 @@ overdub(ctx::Context, f::Core.IntrinsicFunction, args...) = f(args...)
121119 r
122120end
123121
122+
123+ global const to = Calls (100 )
124124reset! (to)
125+ ctx = Context ()
125126overdub (ctx, foo, 1.0 , 1.0 )
126127
127128
128- ctx = Context ()
0 commit comments