You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
function block_transform(ir)
ir = copy(ir)
for (i, bb) in enumerate(ir.blocks)
for (j, stmt) in enumerate(bb.stmts)
stmt.expr.head == :call &&
stmt.expr.args[1] isa GlobalRef &&
stmt.expr.args[1].name == :rand &&
begin
new = argument!(ir)
new_stmt = IRTools.Inner.Statement(
Expr(:call,
GlobalRef(stmt.expr.args[1].mod, :logpdf),
stmt.expr.args[2:length(stmt.expr.args)]...,
new),
stmt.type,
stmt.line)
v = push!(bb, new_stmt)
end
end
end
return renumber(ir)
end
which throws
ERROR: LoadError: MethodError: no method matching push!(::IRTools.Inner.BasicBlock, ::IRTools.Inner.Statement)
I think this issue is about a more general confusion of the difference between Block and BasicBlock (i.e. the documentation uses block to possibly refer to both?)
The text was updated successfully, but these errors were encountered:
Yup – Block is the public interface to all block operations, whereas BasicBlock is just the internal representation. Perhaps we need to be clear in the docs that internal fields are off-limits.
Not sure if this is intended but https://github.com/MikeInnes/IRTools.jl/blob/bacecb8a71eb0026963021d33e4ba16bfc7211da/src/ir/ir.jl#L630 doesn't work on BBs, as illustrated:
which throws
because there's no inheritance
https://github.com/MikeInnes/IRTools.jl/blob/bacecb8a71eb0026963021d33e4ba16bfc7211da/src/ir/ir.jl#L129-L134
It looks like it's easy to implement this i.e. in the
/src
forpush!
:I think this issue is about a more general confusion of the difference between
Block
andBasicBlock
(i.e. the documentation uses block to possibly refer to both?)The text was updated successfully, but these errors were encountered: