@@ -45,16 +45,18 @@ function append_loop_valdims!(valcall::Expr, loop::Loop)
45
45
end
46
46
nothing
47
47
end
48
+ const DISCONTIGUOUS = Symbol (" ##DISCONTIGUOUSSUBARRAY##" )
48
49
function subset_vptr! (ls:: LoopSet , vptr:: Symbol , indnum:: Int , ind, previndices, loopindex)
49
50
subsetvptr = Symbol (vptr, " _subset_$(indnum) _with_$(ind) ##" )
50
51
valcall = Expr (:call , Expr (:curly , :Val , 1 ))
51
52
if indnum > 1
53
+ offset = first (previndices) === DISCONTIGUOUS
52
54
valcall = Expr (:call , lv (:valsum ), valcall)
53
55
for i ∈ 1 : indnum- 1
54
56
if loopindex[i]
55
- append_loop_valdims! (valcall, getloop (ls, previndices[i]))
57
+ append_loop_valdims! (valcall, getloop (ls, previndices[i+ offset ]))
56
58
else
57
- for loopdep ∈ loopdependencies (ls. opdict[previndices[i]])
59
+ for loopdep ∈ loopdependencies (ls. opdict[previndices[i+ offset ]])
58
60
append_loop_valdims! (valcall, getloop (ls, loopdep))
59
61
end
60
62
end
@@ -104,7 +106,6 @@ function checkforoffset!(
104
106
end
105
107
end
106
108
107
- const DISCONTIGUOUS = Symbol (" ##DISCONTIGUOUSSUBARRAY##" )
108
109
function array_reference_meta! (ls:: LoopSet , array:: Symbol , rawindices, elementbytes:: Int , var:: Union{Nothing,Symbol} = nothing )
109
110
vptrarray = vptr (array)
110
111
add_vptr! (ls, array, vptrarray) # now, subset
0 commit comments