Posted to tcl by hypnotoad at Mon Feb 19 19:12:42 GMT 2018view raw
- basra:quadcode seandeelywoods$ tclsh demos/perftest/tester.tcl -just fib -quadcode-log widen
- restrict <- fib
- quadcode-log <- widen
- CONFIGURE: -quadcode-log widen
- ==================TIME (ORIGINAL)===================
- eval fib 85: "259695496911122585"
- time fib 85: 8.859180279617366 microseconds per iteration
- ======================COMPILING=====================
- get-command-list: 52 microseconds
- WARNING:varframe.tcl:2972:callframe.store.array:make.array should trigger traces
- WARNING:varframe.tcl:783:tcl.callframe.load of array should trigger traces
- init-module: 915577 microseconds
- register: 10597 microseconds
- widen:
- Procedure: ::fib(STRING)
- bb 0:
- 0: entry {} {literal {n a b i c}}
- 1: param {var n 4} {arg 0}
- 2: jump {bb 1}
- bb 1:
- 0: @debug-line {} {literal 45}
- 1: @debug-script {} {literal {expr {int($n)}}}
- 2: {instanceOf 252 NUMERIC} {temp 2 6} {var n 4}
- 3: jumpTrue {bb 3} {temp 2 6}
- 4: jump {bb 2}
- bb 2:
- 0: initException {temp 57 31} {literal {can't use non-numeric value as operand of "::tcl::mathfunc::int"}} {literal {-errorcode {ARITH DOMAIN {non-numeric string}}}} {literal 1} {literal 0}
- 1: returnCode {temp 51 0} {temp 57 31}
- 2: procLeave {temp 52 0} {temp 51 0} {literal fib}
- 3: return {} Nothing {temp 52 0}
- bb 3:
- 0: {narrowToType 252 NUMERIC} {var n 11} {var n 4}
- 1: invoke {temp 57 33} Nothing {literal ::tcl::mathfunc::int} {var n 11}
- 2: @debug-script {} {literal {set n [expr {int($n)}]}}
- 3: copy {var n 16} {temp 57 33}
- 4: @debug-line {} {literal 46}
- 5: @debug-script {} {literal {if {$n < 1} {
- return 0
- }}}
- 6: lt {temp 53 0} {var n 16} {literal 1}
- 7: jumpFalse {bb 5} {temp 53 0}
- 8: jump {bb 4}
- bb 4:
- 0: @debug-line {} {literal 47}
- 1: @debug-script {} {literal {return 0}}
- 2: return {} Nothing {literal 0}
- bb 5:
- 0: @debug-line {} {literal 46}
- 1: @debug-script {} {literal {if {$n < 1} {
- return 0
- }}}
- 2: @debug-line {} {literal 49}
- 3: @debug-script {} {literal {set a 0}}
- 4: @debug-line {} {literal 50}
- 5: @debug-script {} {literal {set b 1}}
- 6: @debug-line {} {literal 51}
- 7: @debug-script {} {literal {for {set i 1} {$i < $n} {incr i} {
- set c [expr {$a + $b}]
- set a $b
- set b $c
- }}}
- 8: @debug-script {} {literal {set i 1}}
- 9: @debug-script {} {literal {for {set i 1} {$i < $n} {incr i} {
- set c [expr {$a + $b}]
- set a $b
- set b $c
- }}}
- 10: jump {bb 6}
- bb 6:
- 0: phi {var a 8} {bb 5} {literal 0} {bb 8} {var a 3}
- 1: phi {var b 14} {bb 5} {literal 1} {bb 8} {var b 3}
- 2: phi {var i 9} {bb 5} {literal 1} {bb 8} {var i 4}
- 3: lt {temp 54 11} {var i 9} {var n 16}
- 4: jumpTrue {bb 8} {temp 54 11}
- 5: jump {bb 7}
- bb 7:
- 0: @debug-line {} {literal 56}
- 1: @debug-script {} {literal {return $b}}
- 2: return {} Nothing {var b 14}
- bb 8:
- 0: @debug-line {} {literal 52}
- 1: @debug-script {} {literal {set c [expr {$a + $b}]}}
- 2: @debug-script {} {literal {expr {$a + $b}}}
- 3: add {temp 54 1} {var a 8} {var b 14}
- 4: @debug-script {} {literal {set c [expr {$a + $b}]}}
- 5: copy {var c 7} {temp 54 1}
- 6: @debug-line {} {literal 53}
- 7: @debug-script {} {literal {set a $b}}
- 8: copy {var a 3} {var b 14}
- 9: @debug-line {} {literal 54}
- 10: @debug-script {} {literal {set b $c}}
- 11: copy {var b 3} {var c 7}
- 12: @debug-line {} {literal 51}
- 13: @debug-script {} {literal {for {set i 1} {$i < $n} {incr i} {
- set c [expr {$a + $b}]
- set a $b
- set b $c
- }}}
- 14: @debug-script {} {literal {incr i}}
- 15: add {var i 4} {var i 9} {literal 1}
- 16: @debug-script {} {literal {for {set i 1} {$i < $n} {incr i} {
- set c [expr {$a + $b}]
- set a $b
- set b $c
- }}}
- 17: jump {bb 6}
- -----------------------------------------------------------------------------
- after widen:
- Procedure: ::fib(STRING)
- bb 0:
- 0: entry {} {literal {n a b i c}}
- 1: param {var n 4} {arg 0}
- 2: jump {bb 1}
- bb 1:
- 0: @debug-line {} {literal 45}
- 1: @debug-script {} {literal {expr {int($n)}}}
- 2: {instanceOf 252 NUMERIC} {temp 2 6} {var n 4}
- 3: jumpTrue {bb 3} {temp 2 6}
- 4: jump {bb 2}
- bb 2:
- 0: initException {temp 57 31} {literal {can't use non-numeric value as operand of "::tcl::mathfunc::int"}} {literal {-errorcode {ARITH DOMAIN {non-numeric string}}}} {literal 1} {literal 0}
- 1: returnCode {temp 51 0} {temp 57 31}
- 2: procLeave {temp 52 0} {temp 51 0} {literal fib}
- 3: {widenTo 536870972 {FAIL INT}} {temp 0 28} {temp 52 0}
- 4: return {} Nothing {temp 0 28}
- bb 3:
- 0: {narrowToType 252 NUMERIC} {var n 11} {var n 4}
- 1: invoke {temp 57 33} Nothing {literal ::tcl::mathfunc::int} {var n 11}
- 2: @debug-script {} {literal {set n [expr {int($n)}]}}
- 3: copy {var n 16} {temp 57 33}
- 4: @debug-line {} {literal 46}
- 5: @debug-script {} {literal {if {$n < 1} {
- return 0
- }}}
- 6: lt {temp 53 0} {var n 16} {literal 1}
- 7: jumpFalse {bb 5} {temp 53 0}
- 8: jump {bb 4}
- bb 4:
- 0: @debug-line {} {literal 47}
- 1: @debug-script {} {literal {return 0}}
- 2: {widenTo 536870972 {FAIL INT}} {temp 0 29} {literal 0}
- 3: return {} Nothing {temp 0 29}
- bb 5:
- 0: @debug-line {} {literal 46}
- 1: @debug-script {} {literal {if {$n < 1} {
- return 0
- }}}
- 2: @debug-line {} {literal 49}
- 3: @debug-script {} {literal {set a 0}}
- 4: @debug-line {} {literal 50}
- 5: @debug-script {} {literal {set b 1}}
- 6: @debug-line {} {literal 51}
- 7: @debug-script {} {literal {for {set i 1} {$i < $n} {incr i} {
- set c [expr {$a + $b}]
- set a $b
- set b $c
- }}}
- 8: @debug-script {} {literal {set i 1}}
- 9: @debug-script {} {literal {for {set i 1} {$i < $n} {incr i} {
- set c [expr {$a + $b}]
- set a $b
- set b $c
- }}}
- 10: {widenTo 60 INT} {var a 20} {literal 0}
- 11: {widenTo 60 INT} {var b 32} {literal 1}
- 12: {widenTo 60 INT} {var i 26} {literal 1}
- 13: jump {bb 6}
- bb 6:
- 0: phi {var a 8} {bb 5} {var a 20} {bb 8} {var a 3}
- 1: phi {var b 14} {bb 5} {var b 32} {bb 8} {var b 3}
- 2: phi {var i 9} {bb 5} {var i 26} {bb 8} {var i 4}
- 3: lt {temp 54 11} {var i 9} {var n 16}
- 4: jumpTrue {bb 8} {temp 54 11}
- 5: jump {bb 7}
- bb 7:
- 0: @debug-line {} {literal 56}
- 1: @debug-script {} {literal {return $b}}
- 2: {widenTo 536870972 {FAIL INT}} {temp 0 30} {var b 14}
- 3: return {} Nothing {temp 0 30}
- bb 8:
- 0: @debug-line {} {literal 52}
- 1: @debug-script {} {literal {set c [expr {$a + $b}]}}
- 2: @debug-script {} {literal {expr {$a + $b}}}
- 3: add {temp 54 1} {var a 8} {var b 14}
- 4: @debug-script {} {literal {set c [expr {$a + $b}]}}
- 5: copy {var c 7} {temp 54 1}
- 6: @debug-line {} {literal 53}
- 7: @debug-script {} {literal {set a $b}}
- 8: copy {var a 3} {var b 14}
- 9: @debug-line {} {literal 54}
- 10: @debug-script {} {literal {set b $c}}
- 11: copy {var b 3} {var c 7}
- 12: @debug-line {} {literal 51}
- 13: @debug-script {} {literal {for {set i 1} {$i < $n} {incr i} {
- set c [expr {$a + $b}]
- set a $b
- set b $c
- }}}
- 14: @debug-script {} {literal {incr i}}
- 15: add {var i 4} {var i 9} {literal 1}
- 16: @debug-script {} {literal {for {set i 1} {$i < $n} {incr i} {
- set c [expr {$a + $b}]
- set a $b
- set b $c
- }}}
- 17: jump {bb 6}
- -----------------------------------------------------------------------------
- specialise: 149724 microseconds
- generate: 28624 microseconds
- dump-pre: 21465 microseconds
- optimize: 457552 microseconds
- dump-post: 41872 microseconds
- assemble: 573578 microseconds
- ==================TIME (OPTIMISED)==================
- eval fib 85: "259695496911122585"
- time fib 85: 0.2702796173657101 microseconds per iteration
- =====================COMPARISON=====================
- -------- fib 85 --------
- Acceleration 3177.78%
- =====================1/1 PASSED (1 FASTER)=====================