@@ -18,7 +18,8 @@ function rhs_finish_noopt!(
1818 slotnames = [:captures , :vars , :out , :du , :u , :out_indices , :du_indices , :u_indices , :t ]
1919 argtypes = [Tuple, Vector{Float64}, Vector{Float64}, Vector{Float64}, Vector{Float64}, VectorIntViewType, VectorIntViewType, VectorIntViewType, Float64]
2020 append! (empty! (ir. argtypes), argtypes)
21- captures, vars, out, du, u, out_indices, du_indics, u_indices, t = Argument .(eachindex (slotnames))
21+ captures, vars, out, du, u, out_indices, du_indices, u_indices, t = Argument .(eachindex (slotnames))
22+ # TODO : use `out_indices`, `du_indices`, `u_indices`
2223 @assert length (slotnames) == length (ir. argtypes)
2324
2425 equations = Pair{SSAValue, Eq}[]
@@ -45,17 +46,27 @@ function rhs_finish_noopt!(
4546 eq = last (equations[i])
4647 call = Expr (:call , setindex!, out, value, eq. id)
4748 replace_call! (compact, ssaidx, call, settings, @__SOURCE__ )
48- elseif is_known_invoke_or_call (stmt, variable, compact)
49+ elseif is_known_invoke_or_call (stmt, Intrinsics . variable, compact)
4950 var = idnum (type)
5051 call = Expr (:call , getindex, u, var)
5152 replace_call! (compact, ssaidx, call, settings, @__SOURCE__ )
5253 inst[:type ] = Float64
53- elseif is_known_invoke_or_call (stmt, sim_time, compact)
54+ elseif is_known_invoke_or_call (stmt, Intrinsics . sim_time, compact)
5455 inst[:stmt ] = t
55- # TODO : process flattened variables
56- # TODO : process other intrinsics (epsilon, etc)
57- # else
58- # replace_if_intrinsic!(compact, settings, ssaidx, nothing, nothing, nothing, t, nothing)
56+ elseif is_known_invoke_or_call (stmt, Intrinsics. epsilon, compact)
57+ inst[:stmt ] = 0.0
58+ elseif isexpr (stmt, :invoke )
59+ @sshow stmt
60+ callee_ci, callee_f = stmt. args[1 ]:: CodeInstance , stmt. args[2 ]
61+ callee_result = structural_analysis! (callee_ci, world, settings)
62+ callee_structure = make_structure_from_ipo (callee_result)
63+ callee_state = TransformationState (callee_result, callee_structure)
64+ callee_daef_ci = rhs_finish_noopt! (callee_state, callee_ci, UnoptimizedKey (), world, settings)
65+ callee_captures = ()
66+ # TODO : compute indices into `u`/`du`/`out`
67+ empty! (stmt. args)
68+ push! (stmt. args, callee_daef_ci, callee_captures, vars,
69+ out, du, u, out_indices, du_indices, u_indices, t)
5970 end
6071 type = inst[:type ]
6172 if isa (type, Incidence) || isa (type, Eq)
0 commit comments