> Here's what I figured out fwiw: > > This is the program from #1604: > > (define (fib n) > (if (or (= n 0) (= n 1)) > n > (+ (fib (- n 1)) (fib (- n 2))))) > > (time (let loop ((n 0)) > (when (< n 35) > (fib n) > (loop (+ n 1))))) > > Relevant output from compiling this with your your patch: > > $ csc -f -debug 5 -O5 fib-orig.scm > ... > (if r145 (k147 r145) (scheme#= k147 n10 1)) > ... > (scheme#= k144 n10 0) > ... > [optimized-iteration] > ... > (if r145 > (k147 r145) > (let ((g232 n10)) > (let ((g233 1)) > (k147 (##core#inline "C_eqp" g232 g233))))) > ... > (let ((g234 n10)) > (let ((g235 0)) > (k144 (##core#inline "C_eqp" g234 g235)))) > ... > > This transformation comes from this rewrite rule: > (rewrite 'scheme#= 9 "C_eqp" "C_i_equalp" #t #t) >
Shouldn't the types.db specialization for scheme#= be applied here? Or can't it figure out the ffixnum types of the arguments? Even though it is slightly dangerous, the scrutinizer _could_ assume arguments to numerical primitives are fixnums in fixnum mode... felix _______________________________________________ Chicken-hackers mailing list Chicken-hackers@nongnu.org https://lists.nongnu.org/mailman/listinfo/chicken-hackers