@@ -105,27 +105,35 @@ function pushvarg′!(ls::LoopSet, ar::ArrayReferenceMeta, i)
105
105
reverse! (ar. loopedindex); reverse! (getindices (ar)) # reverse the listed indices here, and transpose it to make it column major
106
106
pushpreamble! (ls, Expr (:(= ), vptr (ar), Expr (:call , lv (:transpose ), extract_varg (i))))
107
107
end
108
- function add_mref! (ls:: LoopSet , ar:: ArrayReferenceMeta , i:: Int , :: Type{PackedStridedPointer{T, N}} ) where {T, N}
108
+ function add_mref! (
109
+ ls:: LoopSet , ar:: ArrayReferenceMeta , i:: Int , :: Type{S}
110
+ ) where {T, N, S <: AbstractColumnMajorStridedPointer{T,N} }
109
111
pushvarg! (ls, ar, i)
110
112
end
111
- function add_mref! (ls:: LoopSet , ar:: ArrayReferenceMeta , i:: Int , :: Type{RowMajorStridedPointer{T, N}} ) where {T, N}
113
+ function add_mref! (
114
+ ls:: LoopSet , ar:: ArrayReferenceMeta , i:: Int , :: Type{S}
115
+ ) where {T, N, S <: AbstractRowMajorStridedPointer{T, N} }
112
116
pushvarg′! (ls, ar, i)
113
117
end
114
- function add_mref! (ls:: LoopSet , ar:: ArrayReferenceMeta , i:: Int , :: Type{OffsetStridedPointer{T,N,P}} ) where {T,N,P}
118
+ function add_mref! (
119
+ ls:: LoopSet , ar:: ArrayReferenceMeta , i:: Int , :: Type{OffsetStridedPointer{T,N,P}}
120
+ ) where {T,N,P}
115
121
add_mref! (ls, ar, i, P)
116
122
end
117
123
118
124
function add_mref! (
119
125
ls:: LoopSet , ar:: ArrayReferenceMeta , i:: Int , :: Type{S}
120
- ) where {T, X <: Tuple , S <: VectorizationBase. AbstractStaticStridedPointer{T,X} }
126
+ ) where {T, X <: Tuple , S <: AbstractStaticStridedPointer{T,X} }
121
127
if last (X. parameters):: Int == 1
122
128
pushvarg′! (ls, ar, i)
123
129
else
124
130
pushvarg! (ls, ar, i)
125
131
first (X. parameters):: Int == 1 || pushfirst! (getindices (ar), Symbol (" ##DISCONTIGUOUSSUBARRAY##" ))
126
132
end
127
133
end
128
- function add_mref! (ls:: LoopSet , ar:: ArrayReferenceMeta , i:: Int , :: Type{SparseStridedPointer{T, N}} ) where {T, N}
134
+ function add_mref! (
135
+ ls:: LoopSet , ar:: ArrayReferenceMeta , i:: Int , :: Type{S}
136
+ ) where {T, N, S <: AbstractSparseStridedPointer{T, N} }
129
137
pushvarg! (ls, ar, i)
130
138
pushfirst! (getindices (ar), Symbol (" ##DISCONTIGUOUSSUBARRAY##" ))
131
139
end
@@ -222,6 +230,7 @@ function calcnops(ls::LoopSet, os::OperationStruct)
222
230
end
223
231
offsets = ls. loopsymbol_offsets
224
232
idxs = loopindex (ls, os. loopdeps, 0x04 ) # FIXME DRY
233
+ iszero (length (idxs)) && return 1
225
234
Δidxs = map (i-> offsets[i+ 1 ]- offsets[i], idxs)
226
235
nops = first (Δidxs)
227
236
@assert all (isequal (nops), Δidxs)
0 commit comments