Skip to content

Commit 9cc278d

Browse files
committed
minor progress.
1 parent 2dd9f27 commit 9cc278d

File tree

2 files changed

+25
-9
lines changed

2 files changed

+25
-9
lines changed

benchmarks/driver.jl

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -191,5 +191,3 @@ function benchmark_aplusBc(sizes)
191191
br
192192
end
193193

194-
195-

src/lowering.jl

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -59,26 +59,44 @@ end
5959
# Expr(:call, :+, q, incr)
6060
# end
6161
# end
62-
function lower_load_scalar!(
62+
function pushscalarload!(q::Expr, op, var, u, U)
63+
ptr = refname(op)
64+
push!(q.args, Expr(:(=), Symbol("##", var), Expr(:call, lv(:load), ptr, mem_offset(op))))
65+
end
66+
function pushvectorload!(q::Expr, op, var, u, U, W)
67+
ptr = refname(op)
68+
instrcall = Expr(:call, lv(:vload), W, ptr, mem_offset(op, u, W))
69+
if mask !== nothing && u == U - 1
70+
push!(instrcall.args, mask)
71+
end
72+
push!(q.args, Expr(:(=), Symbol("##",var,:_,u), instrcall))
73+
end
74+
function lower_load_scalar!(
6375
q::Expr, op::Operation, vectorized::Symbol, W::Symbol, unrolled::Symbol, U::Int,
6476
suffix::Union{Nothing,Int}, mask::Union{Nothing,Symbol,Unsigned} = nothing
6577
)
6678
loopdeps = loopdependencies(op)
67-
@assert unrolled loopdeps
79+
@assert vectorized loopdeps
6880
var = op.variable
6981
if suffix !== nothing
7082
var = Symbol(var, :_, suffix)
7183
end
7284
ptr = refname(op)
73-
push!(q.args, Expr(:(=), Symbol("##", var), Expr(:call, lv(:load), ptr, mem_offset(op))))
85+
if unrolled loopdeps
86+
for u 0:U-1
87+
push!(q.args, Expr(:(=), Symbol("##", var,:_, u), Expr(:call, lv(:load), ptr, mem_offset(op, u))))
88+
end
89+
else
90+
push!(q.args, Expr(:(=), Symbol("##", var), Expr(:call, lv(:load), ptr, mem_offset(op))))
91+
end
7492
nothing
7593
end
7694
function lower_load_unrolled!(
7795
q::Expr, op::Operation, vectorized::Symbol, W::Symbol, unrolled::Symbol, U::Int,
7896
suffix::Union{Nothing,Int}, mask::Union{Nothing,Symbol,Unsigned} = nothing
7997
)
8098
loopdeps = loopdependencies(op)
81-
@assert unrolled loopdeps
99+
@assert vectorized loopdeps
82100
var = op.variable
83101
if suffix !== nothing
84102
var = Symbol(var, :_, suffix)
@@ -116,10 +134,10 @@ function lower_load!(
116134
)
117135
# @show op.instruction
118136
# @show unrolled, loopdependencies(op)
119-
if unrolled loopdependencies(op)
120-
lower_load_unrolled!(q, op, W, unrolled, U, suffix, mask)
137+
if vectorized loopdependencies(op)
138+
lower_load_unrolled!(q, op, vectorized, W, unrolled, U, suffix, mask)
121139
else
122-
lower_load_scalar!(q, op, W, unrolled, U, suffix, mask)
140+
lower_load_scalar!(q, op, vectorized, W, unrolled, U, suffix, mask)
123141
end
124142
end
125143
function reduce_range!(q::Expr, toreduct::Symbol, instr::Symbol, Uh::Int, Uh2::Int)

0 commit comments

Comments
 (0)