Skip to content

Commit cc3db96

Browse files
authored
Merge pull request #21 from MasonProtter/fix-19
Fix #19
2 parents 2761415 + ecc70ed commit cc3db96

File tree

4 files changed

+16
-25
lines changed

4 files changed

+16
-25
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name = "Mjolnir"
22
uuid = "1154507a-7ac2-44fe-9f15-34617bca9db5"
33
authors = ["Mike J Innes <[email protected]>"]
4-
version = "0.2.0"
4+
version = "0.2.1"
55

66
[deps]
77
IRTools = "7869d1d1-7146-5819-86e3-90919afe41df"

src/infer.jl

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,6 @@ mutable struct Frame
8686
edges::Vector{Any}
8787
stmts::Vector{Vector{Variable}}
8888
rettype::AType
89-
outer::Bool
9089
end
9190

9291
getblock(fr::Frame, b, follow) =
@@ -96,7 +95,7 @@ getblock(fr::Frame, b, follow) =
9695
# TODO clear up inlined edges
9796
uninline!(fr::Frame, b, follow) = deleteat!(fr.inlined[b], follow+1:length(fr.inlined[b]))
9897

99-
Frame(ir::IR; outer = false) = Frame(ir, [IR[] for _ = 1:length(blocks(ir))], [], keys.(blocks(ir)), Union{}, outer)
98+
Frame(ir::IR) = Frame(ir, [IR[] for _ = 1:length(blocks(ir))], [], keys.(blocks(ir)), Union{})
10099

101100
function frame(ir::IR, args...)
102101
prepare_ir!(ir)
@@ -201,7 +200,7 @@ function step!(inf::Inference)
201200
error("Unrecognised expression $(st.expr)")
202201
end
203202
elseif (brs = openbranches(block); length(brs) == 1 && !isreturn(brs[1])
204-
&& !(frame.outer && brs[1].block == length(frame.ir.blocks)))
203+
&& !(brs[1].block == length(frame.ir.blocks)))
205204
inferbranch!(inf, frame, b, f, brs[1])
206205
else
207206
for br in brs
@@ -250,19 +249,3 @@ function return_type(ir::IR, args...)
250249
infer!(inf)
251250
return fr.rettype
252251
end
253-
254-
function inlineable(ir::IR, inf::Inference)
255-
for (v, st) in ir
256-
Ts = exprtype.((ir,), st.expr.args)
257-
haskey(inf.frames, Ts) && return (v, Ts)
258-
end
259-
end
260-
261-
function inlineall(ir::IR, inf::Inference)
262-
while (next = inlineable(ir, inf)) != nothing
263-
v, Ts = next
264-
subir = inf.frames[Ts].ir
265-
ir = inline(ir, v, subir)
266-
end
267-
return ir
268-
end

src/trace.jl

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -133,11 +133,7 @@ function abstract!(tr, bl, env)
133133
for i = 1:length(args)
134134
argtypes(ir)[i] = exprtype(tr.ir, rename(env, args[i]))
135135
end
136-
inf = Inference(Frame(ir, outer = true), tr.primitives)
137-
infer!(inf)
138-
# TODO weird that we need to expand here; perhaps inlining is impicitly pruning
139-
# somehow.
140-
ir = inlineall(ir, inf) |> expand!
136+
infer!(Inference(Frame(ir), tr.primitives))
141137
inline!(tr.ir, ir, rename.((env,), args))
142138
for (k, v) in zip(arguments(block(bl.ir, after)), arguments(blocks(tr.ir)[end]))
143139
env[k] = v

test/trace.jl

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,3 +164,15 @@ tr = @trace f(::Matrix{Int32})
164164
f(xs) = sum(xs, dims = 1)
165165
tr = @trace f(::Matrix{Int32})
166166
@test returntype(tr) == Matrix{Int32}
167+
168+
169+
function negsquare(x)
170+
if x > 0
171+
return x^2
172+
else
173+
return -x^2
174+
end
175+
end
176+
177+
tr = @trace negsquare(::Float64)
178+
@test returntype(tr) == Float64

0 commit comments

Comments
 (0)