@@ -273,12 +273,76 @@ end
273
273
# TODO : `get_remarks` should get a cursor?
274
274
Cthulhu. get_remarks (interp:: ADInterpreter , key:: Union{MethodInstance,InferenceResult} ) = get (interp. remarks[interp. current_level], key, nothing )
275
275
276
- function CC. finish (sv:: InferenceState , interp:: ADInterpreter )
277
- res = @invoke CC. finish (sv:: InferenceState , interp:: AbstractInterpreter )
278
- key = (@static VERSION ≥ v " 1.12.0-DEV.317" ? CC. is_constproped (sv) : CC. any (sv. result. overridden_by_const)) ? sv. result : sv. linfo
279
- interp. unopt[interp. current_level][key] = Cthulhu. InferredSource (sv)
276
+ @static if VERSION ≥ v " 1.13.0-DEV.126"
277
+ function diffractor_finish (@specialize (finishfunc), state:: InferenceState , interp:: ADInterpreter , cycleid:: Int )
278
+ res = @invoke finishfunc (state:: InferenceState , interp:: AbstractInterpreter , cycleid:: Int )
279
+ key = CC. is_constproped (state) ? state. result : state. linfo
280
+ interp. unopt[interp. current_level][key] = Cthulhu. InferredSource (state)
281
+ return res
282
+ end
283
+ else
284
+ function diffractor_finish (@specialize (finishfunc), state:: InferenceState , interp:: ADInterpreter )
285
+ res = @invoke finishfunc (state:: InferenceState , interp:: AbstractInterpreter )
286
+ key = (@static VERSION ≥ v " 1.12.0-DEV.317" ? CC. is_constproped (state) : CC. any (state. result. overridden_by_const)) ? state. result : state. linfo
287
+ interp. unopt[interp. current_level][key] = Cthulhu. InferredSource (state)
280
288
return res
281
289
end
290
+ end
291
+
292
+ @static if VERSION ≥ v " 1.12.0-DEV.1823"
293
+ @static if VERSION ≥ v " 1.13.0-DEV.126" || VERSION ≥ v " 1.12.0-alpha1"
294
+ CC. finishinfer! (state:: InferenceState , interp:: ADInterpreter , cycleid:: Int ) = diffractor_finish (CC. finishinfer!, state, interp, cycleid)
295
+ else
296
+ CC. finishinfer! (state:: InferenceState , interp:: ADInterpreter ) = diffractor_finish (CC. finishinfer!, state, interp)
297
+ end
298
+ @static if VERSION ≥ v " 1.12.0-DEV.1988"
299
+ function CC. finish! (interp:: ADInterpreter , caller:: InferenceState , validation_world:: UInt )
300
+ Cthulhu. set_cthulhu_source! (caller. result)
301
+ return @invoke CC. finish! (interp:: AbstractInterpreter , caller:: InferenceState , validation_world:: UInt )
302
+ end
303
+ else
304
+ function CC. finish! (interp:: ADInterpreter , caller:: InferenceState )
305
+ Cthulhu. set_cthulhu_source! (caller. result)
306
+ return @invoke CC. finish! (interp:: AbstractInterpreter , caller:: InferenceState )
307
+ end
308
+ end
309
+
310
+ elseif VERSION ≥ v " 1.12.0-DEV.734"
311
+ CC. finishinfer! (state:: InferenceState , interp:: ADInterpreter ) = diffractor_finish (CC. finishinfer!, state, interp)
312
+ function CC. finish! (interp:: ADInterpreter , caller:: InferenceState ;
313
+ can_discard_trees:: Bool = false )
314
+ Cthulhu. set_cthulhu_source! (caller. result)
315
+ return @invoke CC. finish! (interp:: AbstractInterpreter , caller:: InferenceState ;
316
+ can_discard_trees)
317
+ end
318
+
319
+ elseif VERSION ≥ v " 1.11.0-DEV.737"
320
+ CC. finish (state:: InferenceState , interp:: ADInterpreter ) = diffractor_finish (CC. finish, state, interp)
321
+ function CC. finish! (interp:: ADInterpreter , caller:: InferenceState )
322
+ result = caller. result
323
+ opt = result. src
324
+ Cthulhu. set_cthulhu_source! (result)
325
+ if opt isa CC. OptimizationState
326
+ CC. ir_to_codeinf! (opt)
327
+ end
328
+ return nothing
329
+ end
330
+ function CC. transform_result_for_cache (:: ADInterpreter , :: MethodInstance , :: WorldRange ,
331
+ result:: InferenceResult )
332
+ return result. src
333
+ end
334
+
335
+ else # VERSION < v"1.11.0-DEV.737"
336
+ CC. finish (state:: InferenceState , interp:: ADInterpreter ) = diffractor_finish (CC. finish, state, interp)
337
+ function CC. transform_result_for_cache (:: ADInterpreter , :: MethodInstance , :: WorldRange ,
338
+ result:: InferenceResult )
339
+ return create_cthulhu_source (result. src, result. ipo_effects)
340
+ end
341
+ function CC. finish! (:: ADInterpreter , caller:: InferenceResult )
342
+ Cthulhu. set_cthulhu_source (interp, caller)
343
+ end
344
+
345
+ end # @static if
282
346
283
347
const StmtFlag = @static VERSION ≥ v " 1.11.0-DEV.377" ? UInt32 : UInt8
284
348
function diffractor_inlining_policy (@nospecialize (src), @nospecialize (info:: CC.CallInfo ),
@@ -303,10 +367,6 @@ function diffractor_inlining_policy(@nospecialize(src), @nospecialize(info::CC.C
303
367
end
304
368
305
369
@static if VERSION ≥ v " 1.12.0-DEV.45"
306
- function CC. transform_result_for_cache (interp:: ADInterpreter ,
307
- :: MethodInstance , :: WorldRange , result:: InferenceResult , :: Bool )
308
- return Cthulhu. create_cthulhu_source (result. src, result. ipo_effects)
309
- end
310
370
function CC. src_inlining_policy (interp:: ADInterpreter ,
311
371
@nospecialize (src), @nospecialize (info:: CC.CallInfo ), stmt_flag:: StmtFlag )
312
372
ret = diffractor_inlining_policy (src, info, stmt_flag)
@@ -316,10 +376,6 @@ function CC.src_inlining_policy(interp::ADInterpreter,
316
376
src:: Any , info:: CC.CallInfo , stmt_flag:: StmtFlag )
317
377
end
318
378
else
319
- function CC. transform_result_for_cache (interp:: ADInterpreter ,
320
- linfo:: MethodInstance , valid_worlds:: WorldRange , result:: InferenceResult )
321
- return Cthulhu. create_cthulhu_source (result. src, result. ipo_effects)
322
- end
323
379
function CC. inlining_policy (interp:: ADInterpreter ,
324
380
@nospecialize (src), @nospecialize (info:: CC.CallInfo ), stmt_flag:: StmtFlag ,
325
381
mi:: MethodInstance , argtypes:: Vector{Any} )
@@ -351,17 +407,6 @@ function CC.optimize(interp::ADInterpreter, opt::OptimizationState,
351
407
end
352
408
=#
353
409
354
- function _finish! (caller:: InferenceResult )
355
- effects = caller. ipo_effects
356
- caller. src = Cthulhu. create_cthulhu_source (caller. src, effects)
357
- end
358
-
359
- @static if VERSION ≥ v " 1.11.0-DEV.737"
360
- CC. finish! (:: ADInterpreter , caller:: InferenceState ) = _finish! (caller. result)
361
- else
362
- CC. finish! (:: ADInterpreter , caller:: InferenceResult ) = _finish! (caller)
363
- end
364
-
365
410
@static if VERSION ≥ v " 1.11.0-DEV.1278"
366
411
function CC. bail_out_const_call (interp:: ADInterpreter , result:: CC.MethodCallResult ,
367
412
si:: StmtInfo , sv:: CC.AbsIntState )
0 commit comments