@@ -62,43 +62,44 @@ function parent_unroll_status(op::Operation, u₁loop::Symbol, u₂loop::Symbol,
62
62
end
63
63
64
64
function _add_loopvalue! (ex:: Expr , loopval:: Symbol , vloop:: Loop , u:: Int )
65
- vloopsym = vloop. itersymbol
66
- if loopval === vloopsym
67
- if iszero (u)
68
- push! (ex. args, _MMind (loopval, step (vloop)))
69
- else
70
- mm = _MMind (loopval, step (vloop))
71
- if isone (u)
72
- push! (ex. args, Expr (:call , lv (:vadd_nsw ), VECTORWIDTHSYMBOL, mm))
73
- else
74
- push! (ex. args, Expr (:call , lv (:vadd_nsw ), Expr (:call , lv (:vmul_nsw ), VECTORWIDTHSYMBOL, u), mm))
75
- end
76
- end
77
- elseif u == 0
78
- push! (ex. args, loopval)
65
+ vloopsym = vloop. itersymbol
66
+ if loopval === vloopsym
67
+ if iszero (u)
68
+ push! (ex. args, _MMind (loopval, step (vloop)))
79
69
else
80
- push! (ex. args, Expr (:call , lv (:vadd_nsw ), loopval, staticexpr (u)))
70
+ vstep = step (vloop)
71
+ mm = _MMind (loopval, vstep)
72
+ if isone (u) & isone (vstep)
73
+ push! (ex. args, Expr (:call , lv (:vadd_nsw ), VECTORWIDTHSYMBOL, mm))
74
+ else
75
+ push! (ex. args, Expr (:call , lv (:vadd_nsw ), mulexpr (VECTORWIDTHSYMBOL, u, vstep), mm))
76
+ end
81
77
end
78
+ elseif u == 0
79
+ push! (ex. args, loopval)
80
+ else
81
+ push! (ex. args, Expr (:call , lv (:vadd_nsw ), loopval, staticexpr (u)))
82
+ end
82
83
end
83
84
function add_loopvalue! (instrcall:: Expr , loopval, ua:: UnrollArgs , u₁:: Int )
84
- @unpack u₁loopsym, u₂loopsym, vloopsym, vloop, suffix = ua
85
- if loopval === u₁loopsym # parentsunrolled[n]
86
- if isone (u₁)
87
- _add_loopvalue! (instrcall, loopval, vloop, 0 )
88
- else
89
- t = Expr (:tuple )
90
- for u ∈ 0 : u₁- 1
91
- _add_loopvalue! (t, loopval, vloop, u)
92
- end
93
- push! (instrcall. args, Expr (:call , lv (:VecUnroll ), t))
94
- end
95
- elseif suffix > 0 && loopval === u₂loopsym
96
- _add_loopvalue! (instrcall, loopval, vloop, suffix)
97
- elseif loopval === vloopsym
98
- push! (instrcall. args, _MMind (loopval, step (vloop)))
85
+ @unpack u₁loopsym, u₂loopsym, vloopsym, vloop, suffix = ua
86
+ if loopval === u₁loopsym # parentsunrolled[n]
87
+ if isone (u₁)
88
+ _add_loopvalue! (instrcall, loopval, vloop, 0 )
99
89
else
100
- push! (instrcall. args, loopval)
90
+ t = Expr (:tuple )
91
+ for u ∈ 0 : u₁- 1
92
+ _add_loopvalue! (t, loopval, vloop, u)
93
+ end
94
+ push! (instrcall. args, Expr (:call , lv (:VecUnroll ), t))
101
95
end
96
+ elseif suffix > 0 && loopval === u₂loopsym
97
+ _add_loopvalue! (instrcall, loopval, vloop, suffix)
98
+ elseif loopval === vloopsym
99
+ push! (instrcall. args, _MMind (loopval, step (vloop)))
100
+ else
101
+ push! (instrcall. args, loopval)
102
+ end
102
103
end
103
104
104
105
vecunrolllen (:: Type{VecUnroll{N,W,T,V}} ) where {N,W,T,V} = (N:: Int + 1 )
0 commit comments