@@ -102,13 +102,13 @@ function add_broadcast!(
102
102
@nospecialize (prod:: Type{<:Product} ), elementbytes:: Int
103
103
)
104
104
A, B = prod. parameters
105
- K = gensym ( :K )
106
- mA = gensym ( : Aₘₖ )
107
- mB = gensym ( : Bₖₙ )
105
+ K = gensym! (ls, " K " )
106
+ mA = gensym! (ls, " Aₘₖ" )
107
+ mB = gensym! (ls, " Bₖₙ" )
108
108
pushprepreamble! (ls, Expr (:(= ), mA, Expr (:(.), bcname, QuoteNode (:a ))))
109
109
pushprepreamble! (ls, Expr (:(= ), mB, Expr (:(.), bcname, QuoteNode (:b ))))
110
110
pushprepreamble! (ls, Expr (:(= ), K, Expr (:macrocall , Symbol (" @inbounds" ), LineNumberNode (@__LINE__ ,Symbol (@__FILE__ )), Expr (:ref , Expr (:call , :size , mB), 1 ))))
111
- k = gensym ( :k )
111
+ k = gensym! (ls, " k " )
112
112
add_loop! (ls, Loop (k, 1 , K), k)
113
113
m = loopsyms[1 ];
114
114
if numdims (B) == 1
@@ -126,17 +126,17 @@ function add_broadcast!(
126
126
throw (" B must be a vector or matrix." )
127
127
end
128
128
# load A
129
- # loadA = add_load!(ls, gensym( :A), productref(A, mA, m, k), elementbytes)
130
- loadA = add_broadcast! (ls, gensym ( :A ), mA, Symbol[m,k], A, elementbytes)
129
+ # loadA = add_load!(ls, gensym!(ls, :A), productref(A, mA, m, k), elementbytes)
130
+ loadA = add_broadcast! (ls, gensym! (ls, " A " ), mA, Symbol[m,k], A, elementbytes)
131
131
# load B
132
- loadB = add_broadcast! (ls, gensym ( :B ), mB, bloopsyms, B, elementbytes)
132
+ loadB = add_broadcast! (ls, gensym! (ls, " B " ), mB, bloopsyms, B, elementbytes)
133
133
# set Cₘₙ = 0
134
134
# setC = add_constant!(ls, zero(promote_type(recursive_eltype(A), recursive_eltype(B))), cloopsyms, mC, elementbytes)
135
135
# targetC will be used for reduce_to_add
136
- mCt = gensym ( mC)
137
- targetC = add_constant! (ls, gensym ( : zero ), cloopsyms, mCt, elementbytes, :numericconstant )
136
+ mCt = gensym! (ls, mC)
137
+ targetC = add_constant! (ls, gensym! (ls, " zero" ), cloopsyms, mCt, elementbytes, :numericconstant )
138
138
push! (ls. preamble_zeros, (identifier (targetC), IntOrFloat))
139
- setC = add_constant! (ls, gensym ( : zero ), cloopsyms, mC, elementbytes, :numericconstant )
139
+ setC = add_constant! (ls, gensym! (ls, " zero" ), cloopsyms, mC, elementbytes, :numericconstant )
140
140
push! (ls. preamble_zeros, (identifier (setC), IntOrFloat))
141
141
setC. reduced_children = kvec
142
142
# compute Cₘₙ += Aₘₖ * Bₖₙ
@@ -226,7 +226,7 @@ function LowDimArray{D}(data::A) where {D,T,N,A <: AbstractArray{T,N}}
226
226
LowDimArray {D,T,N,A} (data)
227
227
end
228
228
function extract_all_1_array! (ls:: LoopSet , bcname:: Symbol , N:: Int , elementbytes:: Int )
229
- refextract = gensym ( bcname)
229
+ refextract = gensym! (ls, bcname)
230
230
ref = Expr (:ref , bcname); foreach (_ -> push! (ref. args, :begin ), 1 : N)
231
231
pushprepreamble! (ls, Expr (:(= ), refextract, ref))
232
232
return add_constant! (ls, refextract, elementbytes) # or replace elementbytes with sizeof(T) ? u
247
247
function add_broadcast_adjoint_array! (
248
248
ls:: LoopSet , destname:: Symbol , bcname:: Symbol , loopsyms:: Vector{Symbol} , :: Type{A} , elementbytes:: Int
249
249
) where {T,N,A<: AbstractArray{T,N} }
250
- parent = gensym ( : parent )
250
+ parent = gensym! (ls, " parent" )
251
251
pushprepreamble! (ls, Expr (:(= ), parent, Expr (:call , :parent , bcname)))
252
252
# isone(length(loopsyms)) && return extract_all_1_array!(ls, bcname, N, elementbytes)
253
253
ref = ArrayReference (parent, Symbol[loopsyms[N + 1 - n] for n ∈ 1 : N])
@@ -257,7 +257,7 @@ function add_broadcast_adjoint_array!(
257
257
ls:: LoopSet , destname:: Symbol , bcname:: Symbol , loopsyms:: Vector{Symbol} , :: Type{<:AbstractVector} , elementbytes:: Int
258
258
)
259
259
# isone(length(loopsyms)) && return extract_all_1_array!(ls, bcname, N, elementbytes)
260
- parent = gensym ( : parent )
260
+ parent = gensym! (ls, " parent" )
261
261
pushprepreamble! (ls, Expr (:(= ), parent, Expr (:call , :parent , bcname)))
262
262
263
263
ref = ArrayReference (parent, Symbol[loopsyms[2 ]])
289
289
function add_broadcast! (
290
290
ls:: LoopSet , :: Symbol , bcname:: Symbol , loopsyms:: Vector{Symbol} , :: Type{Base.RefValue{T}} , elementbytes:: Int
291
291
) where {T}
292
- refextract = gensym ( bcname)
292
+ refextract = gensym! (ls, bcname)
293
293
pushprepreamble! (ls, Expr (:(= ), refextract, Expr (:ref , bcname)))
294
294
add_constant! (ls, refextract, elementbytes) # or replace elementbytes with sizeof(T) ? u
295
295
end
@@ -310,7 +310,7 @@ function add_broadcast!(
310
310
)
311
311
S,_,F,A = B. parameters
312
312
instr = get (FUNCTIONSYMBOLS, F) do
313
- f = gensym ( : func )
313
+ f = gensym! (ls, " func" )
314
314
pushprepreamble! (ls, Expr (:(= ), f, Expr (:(.), bcname, QuoteNode (:f ))))
315
315
Instruction (bcname, f)
316
316
end
@@ -322,10 +322,10 @@ function add_broadcast!(
322
322
deps = Symbol[]
323
323
# reduceddeps = Symbol[]
324
324
for (i,arg) ∈ enumerate (args)
325
- argname = gensym ( : arg )
325
+ argname = gensym! (ls, " arg" )
326
326
pushprepreamble! (ls, Expr (:(= ), argname, Expr (:macrocall , Symbol (" @inbounds" ), LineNumberNode (@__LINE__ ,Symbol (@__FILE__ )), Expr (:ref , bcargs, i))))
327
327
# dynamic dispatch
328
- parent = add_broadcast! (ls, gensym ( : temp ), argname, loopsyms, arg, elementbytes):: Operation
328
+ parent = add_broadcast! (ls, gensym! (ls, " temp" ), argname, loopsyms, arg, elementbytes):: Operation
329
329
push! (parents, parent)
330
330
mergesetdiffv! (deps, loopdependencies (parent), reduceddependencies (parent))
331
331
end
@@ -343,12 +343,12 @@ end
343
343
# we have an N dimensional loop.
344
344
# need to construct the LoopSet
345
345
# @show typeof(dest)
346
- loopsyms = [gensym (:n ) for n ∈ 1 : N]
347
346
ls = LoopSet (Mod)
347
+ loopsyms = [gensym! (ls, " n" ) for n ∈ 1 : N]
348
348
ls. isbroadcast[] = true
349
349
sizes = Expr (:tuple )
350
350
for (n,itersym) ∈ enumerate (loopsyms)
351
- Nsym = gensym ( :N )
351
+ Nsym = gensym! (ls, " N " )
352
352
add_loop! (ls, Loop (itersym, 1 , Nsym), itersym)
353
353
push! (sizes. args, Nsym)
354
354
end
@@ -377,13 +377,13 @@ end
377
377
) where {T <: NativeTypes , N, A <: AbstractArray{T,N} , BC <: Union{Broadcasted,Product} , Mod}
378
378
# we have an N dimensional loop.
379
379
# need to construct the LoopSet
380
- loopsyms = [gensym (:n ) for n ∈ 1 : N]
381
380
ls = LoopSet (Mod)
381
+ loopsyms = [gensym! (ls, " n" ) for n ∈ 1 : N]
382
382
ls. isbroadcast[] = true
383
383
pushprepreamble! (ls, Expr (:(= ), :dest , Expr (:call , :parent , :dest′ )))
384
384
sizes = Expr (:tuple )
385
385
for (n,itersym) ∈ enumerate (loopsyms)
386
- Nsym = gensym ( :N )
386
+ Nsym = gensym! (ls, " N " )
387
387
add_loop! (ls, Loop (itersym, 1 , Nsym), itersym)
388
388
push! (sizes. args, Nsym)
389
389
end
0 commit comments