@@ -97,8 +97,9 @@ macro_rules! impl_fft_with_opts_and_plan_for {
97
97
assert!( reals. len( ) == imags. len( ) && reals. len( ) . is_power_of_two( ) ) ;
98
98
let n: usize = reals. len( ) . ilog2( ) as usize ;
99
99
100
- let mut twiddles_re = planner. twiddles_re. clone( ) ;
101
- let mut twiddles_im = planner. twiddles_im. clone( ) ;
100
+ // Use references to avoid unnecessary clones
101
+ let twiddles_re = & planner. twiddles_re;
102
+ let twiddles_im = & planner. twiddles_im;
102
103
103
104
// We shouldn't be able to execute FFT if the # of twiddles isn't equal to the distance
104
105
// between pairs
@@ -113,18 +114,21 @@ macro_rules! impl_fft_with_opts_and_plan_for {
113
114
_ => ( ) ,
114
115
}
115
116
117
+ let mut filtered_twiddles_re = twiddles_re. clone( ) ;
118
+ let mut filtered_twiddles_im = twiddles_im. clone( ) ;
119
+
116
120
for t in ( 0 ..n) . rev( ) {
117
121
let dist = 1 << t;
118
122
let chunk_size = dist << 1 ;
119
123
120
124
if chunk_size > 4 {
121
125
if t < n - 1 {
122
- ( twiddles_re , twiddles_im ) = filter_twiddles( & twiddles_re , & twiddles_im ) ;
126
+ ( filtered_twiddles_re , filtered_twiddles_im ) = filter_twiddles( & filtered_twiddles_re , & filtered_twiddles_im ) ;
123
127
}
124
128
if chunk_size >= $lanes * 2 {
125
- $simd_butterfly_kernel( reals, imags, & twiddles_re , & twiddles_im , dist) ;
129
+ $simd_butterfly_kernel( reals, imags, & filtered_twiddles_re , & filtered_twiddles_im , dist) ;
126
130
} else {
127
- fft_chunk_n( reals, imags, & twiddles_re , & twiddles_im , dist) ;
131
+ fft_chunk_n( reals, imags, & filtered_twiddles_re , & filtered_twiddles_im , dist) ;
128
132
}
129
133
} else if chunk_size == 2 {
130
134
fft_chunk_2( reals, imags) ;
0 commit comments