|
269 | 269 |
|
270 | 270 | const IRVar = Union{Core.SSAValue, Core.SlotNumber}
|
271 | 271 |
|
272 |
| -function bind_var!(var_literal, bindings::Bindings, ir::Core.CodeInfo) |
273 |
| - # for literal constants |
274 |
| - push!(bindings, var_literal) |
| 272 | +function bind_var!(var, bindings::Bindings, ir::Core.CodeInfo) |
| 273 | + # for literal constants, and static parameters |
| 274 | + var = Meta.isexpr(var, :static_parameter) ? ir.parent.sparam_vals[var.args[1]] : var |
| 275 | + push!(bindings, var) |
275 | 276 | idx = length(bindings)
|
276 | 277 | return idx
|
277 | 278 | end
|
@@ -368,6 +369,14 @@ function translate!!(var::IRVar, line::Core.SlotNumber,
|
368 | 369 | return Instruction(func, input, output)
|
369 | 370 | end
|
370 | 371 |
|
| 372 | +function translate!!(var::IRVar, line::Number, # literal vars |
| 373 | + bindings::Bindings, isconst::Bool, ir) |
| 374 | + func = identity |
| 375 | + input = (bind_var!(line, bindings, ir),) |
| 376 | + output = bind_var!(var, bindings, ir) |
| 377 | + return Instruction(func, input, output) |
| 378 | +end |
| 379 | + |
371 | 380 | function translate!!(var::IRVar, line::NTuple{N, Symbol},
|
372 | 381 | bindings::Bindings, isconst::Bool, ir) where {N}
|
373 | 382 | # for syntax (; x, y, z), see Turing.jl#1873
|
@@ -439,6 +448,9 @@ function translate!!(var::IRVar, line::Expr,
|
439 | 448 | end
|
440 | 449 | return Instruction(identity, (_bind_fn(rhs),), _bind_fn(lhs))
|
441 | 450 | end
|
| 451 | + elseif head === :static_parameter |
| 452 | + v = ir.parent.sparam_vals[line.args[1]] |
| 453 | + return Instruction(identity, (_bind_fn(v),), _bind_fn(var)) |
442 | 454 | else
|
443 | 455 | @error "Unknown Expression: " typeof(var) var typeof(line) line
|
444 | 456 | throw(ErrorException("Unknown Expression"))
|
|
0 commit comments