Posted to tcl by hypnotoad at Mon Feb 19 19:12:42 GMT 2018view raw

  1. basra:quadcode seandeelywoods$ tclsh demos/perftest/tester.tcl -just fib -quadcode-log widen
  2. restrict <- fib
  3. quadcode-log <- widen
  4. CONFIGURE: -quadcode-log widen
  5. ==================TIME (ORIGINAL)===================
  6. eval fib 85: "259695496911122585"
  7. time fib 85: 8.859180279617366 microseconds per iteration
  8. ======================COMPILING=====================
  9. get-command-list: 52 microseconds
  10. WARNING:varframe.tcl:2972:callframe.store.array:make.array should trigger traces
  11. WARNING:varframe.tcl:783:tcl.callframe.load of array should trigger traces
  12. init-module: 915577 microseconds
  13. register: 10597 microseconds
  14. widen:
  15. Procedure: ::fib(STRING)
  16. bb 0:
  17. 0: entry {} {literal {n a b i c}}
  18. 1: param {var n 4} {arg 0}
  19. 2: jump {bb 1}
  20. bb 1:
  21. 0: @debug-line {} {literal 45}
  22. 1: @debug-script {} {literal {expr {int($n)}}}
  23. 2: {instanceOf 252 NUMERIC} {temp 2 6} {var n 4}
  24. 3: jumpTrue {bb 3} {temp 2 6}
  25. 4: jump {bb 2}
  26. bb 2:
  27. 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}
  28. 1: returnCode {temp 51 0} {temp 57 31}
  29. 2: procLeave {temp 52 0} {temp 51 0} {literal fib}
  30. 3: return {} Nothing {temp 52 0}
  31. bb 3:
  32. 0: {narrowToType 252 NUMERIC} {var n 11} {var n 4}
  33. 1: invoke {temp 57 33} Nothing {literal ::tcl::mathfunc::int} {var n 11}
  34. 2: @debug-script {} {literal {set n [expr {int($n)}]}}
  35. 3: copy {var n 16} {temp 57 33}
  36. 4: @debug-line {} {literal 46}
  37. 5: @debug-script {} {literal {if {$n < 1} {
  38. return 0
  39. }}}
  40. 6: lt {temp 53 0} {var n 16} {literal 1}
  41. 7: jumpFalse {bb 5} {temp 53 0}
  42. 8: jump {bb 4}
  43. bb 4:
  44. 0: @debug-line {} {literal 47}
  45. 1: @debug-script {} {literal {return 0}}
  46. 2: return {} Nothing {literal 0}
  47. bb 5:
  48. 0: @debug-line {} {literal 46}
  49. 1: @debug-script {} {literal {if {$n < 1} {
  50. return 0
  51. }}}
  52. 2: @debug-line {} {literal 49}
  53. 3: @debug-script {} {literal {set a 0}}
  54. 4: @debug-line {} {literal 50}
  55. 5: @debug-script {} {literal {set b 1}}
  56. 6: @debug-line {} {literal 51}
  57. 7: @debug-script {} {literal {for {set i 1} {$i < $n} {incr i} {
  58. set c [expr {$a + $b}]
  59. set a $b
  60. set b $c
  61. }}}
  62. 8: @debug-script {} {literal {set i 1}}
  63. 9: @debug-script {} {literal {for {set i 1} {$i < $n} {incr i} {
  64. set c [expr {$a + $b}]
  65. set a $b
  66. set b $c
  67. }}}
  68. 10: jump {bb 6}
  69. bb 6:
  70. 0: phi {var a 8} {bb 5} {literal 0} {bb 8} {var a 3}
  71. 1: phi {var b 14} {bb 5} {literal 1} {bb 8} {var b 3}
  72. 2: phi {var i 9} {bb 5} {literal 1} {bb 8} {var i 4}
  73. 3: lt {temp 54 11} {var i 9} {var n 16}
  74. 4: jumpTrue {bb 8} {temp 54 11}
  75. 5: jump {bb 7}
  76. bb 7:
  77. 0: @debug-line {} {literal 56}
  78. 1: @debug-script {} {literal {return $b}}
  79. 2: return {} Nothing {var b 14}
  80. bb 8:
  81. 0: @debug-line {} {literal 52}
  82. 1: @debug-script {} {literal {set c [expr {$a + $b}]}}
  83. 2: @debug-script {} {literal {expr {$a + $b}}}
  84. 3: add {temp 54 1} {var a 8} {var b 14}
  85. 4: @debug-script {} {literal {set c [expr {$a + $b}]}}
  86. 5: copy {var c 7} {temp 54 1}
  87. 6: @debug-line {} {literal 53}
  88. 7: @debug-script {} {literal {set a $b}}
  89. 8: copy {var a 3} {var b 14}
  90. 9: @debug-line {} {literal 54}
  91. 10: @debug-script {} {literal {set b $c}}
  92. 11: copy {var b 3} {var c 7}
  93. 12: @debug-line {} {literal 51}
  94. 13: @debug-script {} {literal {for {set i 1} {$i < $n} {incr i} {
  95. set c [expr {$a + $b}]
  96. set a $b
  97. set b $c
  98. }}}
  99. 14: @debug-script {} {literal {incr i}}
  100. 15: add {var i 4} {var i 9} {literal 1}
  101. 16: @debug-script {} {literal {for {set i 1} {$i < $n} {incr i} {
  102. set c [expr {$a + $b}]
  103. set a $b
  104. set b $c
  105. }}}
  106. 17: jump {bb 6}
  107. -----------------------------------------------------------------------------
  108. after widen:
  109. Procedure: ::fib(STRING)
  110. bb 0:
  111. 0: entry {} {literal {n a b i c}}
  112. 1: param {var n 4} {arg 0}
  113. 2: jump {bb 1}
  114. bb 1:
  115. 0: @debug-line {} {literal 45}
  116. 1: @debug-script {} {literal {expr {int($n)}}}
  117. 2: {instanceOf 252 NUMERIC} {temp 2 6} {var n 4}
  118. 3: jumpTrue {bb 3} {temp 2 6}
  119. 4: jump {bb 2}
  120. bb 2:
  121. 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}
  122. 1: returnCode {temp 51 0} {temp 57 31}
  123. 2: procLeave {temp 52 0} {temp 51 0} {literal fib}
  124. 3: {widenTo 536870972 {FAIL INT}} {temp 0 28} {temp 52 0}
  125. 4: return {} Nothing {temp 0 28}
  126. bb 3:
  127. 0: {narrowToType 252 NUMERIC} {var n 11} {var n 4}
  128. 1: invoke {temp 57 33} Nothing {literal ::tcl::mathfunc::int} {var n 11}
  129. 2: @debug-script {} {literal {set n [expr {int($n)}]}}
  130. 3: copy {var n 16} {temp 57 33}
  131. 4: @debug-line {} {literal 46}
  132. 5: @debug-script {} {literal {if {$n < 1} {
  133. return 0
  134. }}}
  135. 6: lt {temp 53 0} {var n 16} {literal 1}
  136. 7: jumpFalse {bb 5} {temp 53 0}
  137. 8: jump {bb 4}
  138. bb 4:
  139. 0: @debug-line {} {literal 47}
  140. 1: @debug-script {} {literal {return 0}}
  141. 2: {widenTo 536870972 {FAIL INT}} {temp 0 29} {literal 0}
  142. 3: return {} Nothing {temp 0 29}
  143. bb 5:
  144. 0: @debug-line {} {literal 46}
  145. 1: @debug-script {} {literal {if {$n < 1} {
  146. return 0
  147. }}}
  148. 2: @debug-line {} {literal 49}
  149. 3: @debug-script {} {literal {set a 0}}
  150. 4: @debug-line {} {literal 50}
  151. 5: @debug-script {} {literal {set b 1}}
  152. 6: @debug-line {} {literal 51}
  153. 7: @debug-script {} {literal {for {set i 1} {$i < $n} {incr i} {
  154. set c [expr {$a + $b}]
  155. set a $b
  156. set b $c
  157. }}}
  158. 8: @debug-script {} {literal {set i 1}}
  159. 9: @debug-script {} {literal {for {set i 1} {$i < $n} {incr i} {
  160. set c [expr {$a + $b}]
  161. set a $b
  162. set b $c
  163. }}}
  164. 10: {widenTo 60 INT} {var a 20} {literal 0}
  165. 11: {widenTo 60 INT} {var b 32} {literal 1}
  166. 12: {widenTo 60 INT} {var i 26} {literal 1}
  167. 13: jump {bb 6}
  168. bb 6:
  169. 0: phi {var a 8} {bb 5} {var a 20} {bb 8} {var a 3}
  170. 1: phi {var b 14} {bb 5} {var b 32} {bb 8} {var b 3}
  171. 2: phi {var i 9} {bb 5} {var i 26} {bb 8} {var i 4}
  172. 3: lt {temp 54 11} {var i 9} {var n 16}
  173. 4: jumpTrue {bb 8} {temp 54 11}
  174. 5: jump {bb 7}
  175. bb 7:
  176. 0: @debug-line {} {literal 56}
  177. 1: @debug-script {} {literal {return $b}}
  178. 2: {widenTo 536870972 {FAIL INT}} {temp 0 30} {var b 14}
  179. 3: return {} Nothing {temp 0 30}
  180. bb 8:
  181. 0: @debug-line {} {literal 52}
  182. 1: @debug-script {} {literal {set c [expr {$a + $b}]}}
  183. 2: @debug-script {} {literal {expr {$a + $b}}}
  184. 3: add {temp 54 1} {var a 8} {var b 14}
  185. 4: @debug-script {} {literal {set c [expr {$a + $b}]}}
  186. 5: copy {var c 7} {temp 54 1}
  187. 6: @debug-line {} {literal 53}
  188. 7: @debug-script {} {literal {set a $b}}
  189. 8: copy {var a 3} {var b 14}
  190. 9: @debug-line {} {literal 54}
  191. 10: @debug-script {} {literal {set b $c}}
  192. 11: copy {var b 3} {var c 7}
  193. 12: @debug-line {} {literal 51}
  194. 13: @debug-script {} {literal {for {set i 1} {$i < $n} {incr i} {
  195. set c [expr {$a + $b}]
  196. set a $b
  197. set b $c
  198. }}}
  199. 14: @debug-script {} {literal {incr i}}
  200. 15: add {var i 4} {var i 9} {literal 1}
  201. 16: @debug-script {} {literal {for {set i 1} {$i < $n} {incr i} {
  202. set c [expr {$a + $b}]
  203. set a $b
  204. set b $c
  205. }}}
  206. 17: jump {bb 6}
  207. -----------------------------------------------------------------------------
  208. specialise: 149724 microseconds
  209. generate: 28624 microseconds
  210. dump-pre: 21465 microseconds
  211. optimize: 457552 microseconds
  212. dump-post: 41872 microseconds
  213. assemble: 573578 microseconds
  214. ==================TIME (OPTIMISED)==================
  215. eval fib 85: "259695496911122585"
  216. time fib 85: 0.2702796173657101 microseconds per iteration
  217. =====================COMPARISON=====================
  218. -------- fib 85 --------
  219. Acceleration 3177.78%
  220. =====================1/1 PASSED (1 FASTER)=====================