@@ -116,10 +116,19 @@ struct LowDimArray{D,T,N,A<:DenseArray{T,N}} <: DenseArray{T,N}
116
116
end
117
117
@inline Base. pointer (A:: LowDimArray ) = pointer (A. data)
118
118
Base. @propagate_inbounds Base. getindex (A:: LowDimArray , i... ) = getindex (A. data, i... )
119
- Base. size (A:: LowDimArray ) = Base. size (A. data)
119
+ @inline Base. size (A:: LowDimArray ) = Base. size (A. data)
120
+ @inline Base. size (A:: LowDimArray , i) = Base. size (A. data, i)
120
121
@generated function VectorizationBase. stridedpointer (A:: LowDimArray{D,T,N} ) where {D,T,N}
121
122
smul = Expr (:(.), Expr (:(.), :LoopVectorization , QuoteNode (:VectorizationBase )), QuoteNode (:staticmul ))
122
- s = Expr (:call , smul, T, Expr (:tuple , [Expr (:ref , :strideA , n) for n ∈ 1 + D[1 ]: N if ((length (D) < n) || D[n])]. .. ))
123
+ multup = Expr (:tuple )
124
+ for n ∈ 1 : N
125
+ if length (D) < n
126
+ push! (multup. args, Expr (:call , :ifelse , :(isone (size (A,$ n))), 0 , Expr (:ref , :strideA , n)))
127
+ elseif D[n]
128
+ push! (multup. args, Expr (:ref , :strideA , n))
129
+ end
130
+ end
131
+ s = Expr (:call , smul, T, multup)
123
132
f = D[1 ] ? :PackedStridedPointer : :SparseStridedPointer
124
133
Expr (:block , Expr (:meta ,:inline ), Expr (:(= ), :strideA , Expr (:call , :strides , Expr (:(.), :A , QuoteNode (:data )))),
125
134
Expr (:call , Expr (:(.), :VectorizationBase , QuoteNode (f)), Expr (:call , :pointer , Expr (:(.), :A , QuoteNode (:data ))), s))
0 commit comments