Skip to content

Commit 9b7557b

Browse files
committed
Minor refactoring to reduce code duplication.
1 parent 7c51410 commit 9b7557b

File tree

2 files changed

+13
-17
lines changed

2 files changed

+13
-17
lines changed

src/condense_loopset.jl

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -244,11 +244,13 @@ function generate_call(ls::LoopSet, IUT, debug::Bool = false)
244244
loop_bounds = loop_boundaries(ls)
245245
inline, U, T = IUT
246246
if inline | debug
247-
func = debug ? lv(:_avx_loopset) : lv(:_avx_!)
247+
func = debug ? lv(:_avx_loopset_debug) : lv(:_avx_!)
248+
lbarg = debug ? Expr(:call, :typeof, loop_bounds) : loop_bounds
248249
q = Expr(
249250
:call, func, Expr(:call, Expr(:curly, :Val, (U,T))),
250-
operation_descriptions, arrayref_descriptions, argmeta, loop_bounds
251+
operation_descriptions, arrayref_descriptions, argmeta, lbarg
251252
)
253+
debug && deleteat!(q.args, 2)
252254
foreach(ref -> push!(q.args, vptr(ref)), ls.refs_aliasing_syms)
253255
else
254256
arraydescript = Expr(:tuple)

src/reconstruct_loopset.jl

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -226,34 +226,28 @@ function avx_loopset(instr, ops, arf, AM, LB, vargs)
226226
num_params = extract_external_functions!(ls, num_params)
227227
ls
228228
end
229-
function avx_body(UT, instr, ops, arf, AM, LB, vargs)
230-
ls = avx_loopset(instr, ops, arf, AM, LB, vargs)
229+
function avx_body(ls, UT)
231230
U, T = UT
232231
q = iszero(U) ? lower(ls) : lower(ls, U, T)
233232
length(ls.outer_reductions) == 0 ? push!(q.args, nothing) : push!(q.args, loopset_return_value(ls, Val(true)))
234233
q
235234
end
236235

237-
function _avx_loopset(::Val{UT}, ::Type{OPS}, ::Type{ARF}, ::Type{AM}, lb::LB, vargs...) where {UT, OPS, ARF, AM, LB}
238-
OPSsv = OPS.parameters
236+
function _avx_loopset_debug(::Type{OPS}, ::Type{ARF}, ::Type{AM}, ::Type{LB}, vargs...) where {UT, OPS, ARF, AM, LB}
237+
_avx_loopset(OPS.parameters, ARF.parameters, AM.parameters, LB.parameters, typeof.(vargs))
238+
end
239+
function _avx_loopset(OPSsv, ARFsv, AMsv, LBsv, vargs) where {UT, OPS, ARF, AM, LB}
239240
nops = length(OPSsv) ÷ 3
240241
instr = Instruction[Instruction(OPSsv[3i+1], OPSsv[3i+2]) for i 0:nops-1]
241242
ops = OperationStruct[ OPSsv[3i] for i 1:nops ]
242243
avx_loopset(
243244
instr, ops,
244-
ArrayRefStruct[ARF.parameters...],
245-
AM.parameters, LB.parameters, typeof.(vargs)
245+
ArrayRefStruct[ARFsv...],
246+
AMsv, LBsv, vargs
246247
)
247248
end
248249
@generated function _avx_!(::Val{UT}, ::Type{OPS}, ::Type{ARF}, ::Type{AM}, lb::LB, vargs...) where {UT, OPS, ARF, AM, LB}
249-
OPSsv = OPS.parameters
250-
nops = length(OPSsv) ÷ 3
251-
instr = Instruction[Instruction(OPSsv[3i+1], OPSsv[3i+2]) for i 0:nops-1]
252-
ops = OperationStruct[ OPSsv[3i] for i 1:nops ]
253-
avx_body(
254-
UT, instr, ops,
255-
ArrayRefStruct[ARF.parameters...],
256-
AM.parameters, LB.parameters, vargs
257-
)
250+
ls = _avx_loopset(OPS.parameters, ARF.parameters, AM.parameters, LB.parameters, vargs)
251+
avx_body(ls, UT)
258252
end
259253

0 commit comments

Comments
 (0)