Profiling results ----------------- Total cpu time observed: 62376ms (out of 62744ms) Number of samples taken: 261 (once every 239ms) (Hiding functions with self<1.0% and local<2.0%: 3 of 209 hidden) ================================================================================== Caller Idx Total Self Name+src Local% ms(pct) ms(pct) Callee ================================================================================== ??? [103] 100.0% [1] 62376(100.0%) 0(0.0%) profile-thunk16 ...e/pkgs/profile-lib/main.rkt:9:0 run [8] 100.0% ---------------------------------------------------------------------------------- ??? [103] 100.0% [2] 58120(93.2%) 0(0.0%) run-improve43 .../js-tweaks/src/mainloop.rkt:339:0 for-loop [9] 100.0% ---------------------------------------------------------------------------------- for-loop [178] 100.0% [3] 1242(2.0%) 0(0.0%) expand-identifier (unknown source) resolve+shift28 [92] 100.0% ---------------------------------------------------------------------------------- for-loop [178] 37.8% loop [64] 62.2% [4] 1086(1.7%) 0(0.0%) dispatch-transformer41 (unknown source) apply-transformer52 [10] 100.0% ---------------------------------------------------------------------------------- ??? [103] 100.0% [5] 540(0.9%) 0(0.0%) get-final-combination ...ks/src/mainloop.rkt:360:0 infer-splitpoints [11] 100.0% ---------------------------------------------------------------------------------- ??? [103] 100.0% [6] 506(0.8%) 0(0.0%) eval-const-expr ...s-tweaks/src/programs.rkt:102:0 eval-prog [76] 100.0% ---------------------------------------------------------------------------------- ??? [166] 100.0% [7] 248(0.4%) 0(0.0%) approximate9 ...js-tweaks/src/core/taylor.rkt:12:0 for-loop [12] 100.0% ---------------------------------------------------------------------------------- profile-thunk16 [1] 100.0% [8] 62376(100.0%) 0(0.0%) run ...et-7.0/share/pkgs/profile-lib/main.rkt:39:2 ??? [103] 100.0% ---------------------------------------------------------------------------------- run-improve43 [2] 100.0% [9] 58120(93.2%) 0(0.0%) for-loop ...erbie/js-tweaks/src/mainloop.rkt:354:4 run-iter! [13] 100.0% ---------------------------------------------------------------------------------- dispatch-transformer41 [4] 100.0% [10] 1086(1.7%) 0(0.0%) apply-transformer52 (unknown source) apply-transformer-in-context [14] 84.9% loop [64] 15.1% ---------------------------------------------------------------------------------- get-final-combination [5] 100.0% [11] 540(0.9%) 0(0.0%) infer-splitpoints ...aks/src/core/regimes.rkt:34:0 for-loop [15] 100.0% ---------------------------------------------------------------------------------- approximate9 [7] 100.0% [12] 248(0.4%) 0(0.0%) for-loop ...ie/js-tweaks/src/core/taylor.rkt:30:18 taylor [16] 100.0% ---------------------------------------------------------------------------------- for-loop [9] 100.0% [13] 58120(93.2%) 0(0.0%) run-iter! ...rbie/js-tweaks/src/mainloop.rkt:320:0 finalize-iter! [17] 61.6% simplify! [18] 35.2% gen-rewrites! [19] 2.3% localize! [22] 0.4% gen-series! [23] 0.4% ---------------------------------------------------------------------------------- apply-transformer52 [10] 100.0% [14] 922(1.5%) 0(0.0%) apply-transformer-in-context (unknown source) go [21] 32.3% parse-app [24] 26.7% datum->syntax6 [25] 23.6% ??? [26] 17.4% ---------------------------------------------------------------------------------- infer-splitpoints [11] 100.0% [15] 540(0.9%) 0(0.0%) for-loop ...ie/js-tweaks/src/core/regimes.rkt:46:6 option-on-expr [20] 100.0% ---------------------------------------------------------------------------------- for-loop [12] 100.0% [16] 248(0.4%) 0(0.0%) taylor ...rbie/js-tweaks/src/core/taylor.rkt:170:0 f46 [192] 100.0% ---------------------------------------------------------------------------------- run-iter! [13] 100.0% [17] 35810(57.4%) 0(0.0%) finalize-iter! ...js-tweaks/src/mainloop.rkt:271:0 ??? [27] 100.0% ---------------------------------------------------------------------------------- run-iter! [13] 100.0% [18] 20440(32.8%) 0(0.0%) simplify! ...rbie/js-tweaks/src/mainloop.rkt:217:0 ??? [28] 88.2% for-loop [29] 7.4% ??? [30] 4.4% ---------------------------------------------------------------------------------- run-iter! [13] 100.0% [19] 1362(2.2%) 0(0.0%) gen-rewrites! .../js-tweaks/src/mainloop.rkt:176:0 for-loop [31] 49.0% for-loop [33] 35.7% group-by61 [37] 15.3% ---------------------------------------------------------------------------------- for-loop [15] 100.0% [20] 540(0.9%) 0(0.0%) option-on-expr ...weaks/src/core/regimes.rkt:123:0 for-loop [32] 100.0% ---------------------------------------------------------------------------------- apply-transformer-in-context [14] 100.0% [21] 298(0.5%) 0(0.0%) go .../collects/racket/private/qq-and-or.rkt:50:20 stx-list? [34] 100.0% ---------------------------------------------------------------------------------- run-iter! [13] 100.0% [22] 260(0.4%) 0(0.0%) localize! ...rbie/js-tweaks/src/mainloop.rkt:120:0 localize-error [35] 100.0% ---------------------------------------------------------------------------------- run-iter! [13] 100.0% [23] 248(0.4%) 0(0.0%) gen-series! ...ie/js-tweaks/src/mainloop.rkt:153:0 for-loop [36] 100.0% ---------------------------------------------------------------------------------- apply-transformer-in-context [14] 100.0% [24] 246(0.4%) 246(0.4%) parse-app ...collects/racket/private/kw.rkt:1105:2 ---------------------------------------------------------------------------------- apply-transformer-in-context [14] 100.0% [25] 218(0.3%) 0(0.0%) datum->syntax6 (unknown source) loop [64] 100.0% ---------------------------------------------------------------------------------- apply-transformer-in-context [14] 100.0% [26] 160(0.3%) 0(0.0%) ??? ...collects/racket/private/qq-and-or.rkt:155:9 ??? [38] 100.0% ---------------------------------------------------------------------------------- variable? [110] 0.7% finalize-iter! [17] 99.3% [27] 36056(57.8%) 246(0.4%) ??? ...contract/private/arrow-val-first.rkt:388:18 for-loop [39] 99.3% ---------------------------------------------------------------------------------- simplify! [18] 100.0% [28] 18024(28.9%) 0(0.0%) ??? ...herbie/js-tweaks/src/core/simplify.rkt:26:0 one-iter [52] 42.5% loop [40] 33.0% for-loop [41] 18.2% loop [146] 5.0% for-loop [48] 1.4% ---------------------------------------------------------------------------------- simplify! [18] 100.0% [29] 1516(2.4%) 0(0.0%) for-loop ...erbie/js-tweaks/src/mainloop.rkt:255:6 for-loop [43] 100.0% ---------------------------------------------------------------------------------- simplify! [18] 100.0% [30] 900(1.4%) 0(0.0%) ??? ...tract/private/arrow-higher-order.rkt:369:44 ??? [44] 100.0% ---------------------------------------------------------------------------------- gen-rewrites! [19] 100.0% [31] 668(1.1%) 0(0.0%) for-loop ...erbie/js-tweaks/src/mainloop.rkt:201:4 for-loop [45] 100.0% ---------------------------------------------------------------------------------- option-on-expr [20] 100.0% [32] 540(0.9%) 0(0.0%) for-loop ...e/js-tweaks/src/core/regimes.rkt:131:4 errors [61] 100.0% ---------------------------------------------------------------------------------- gen-rewrites! [19] 100.0% [33] 486(0.8%) 0(0.0%) for-loop ...rbie/js-tweaks/src/mainloop.rkt:184:11 rewrite-expression-head20 [46] 100.0% ---------------------------------------------------------------------------------- go [21] 100.0% [34] 298(0.5%) 0(0.0%) stx-list? .../collects/racket/private/stx.rkt:49:4 syntax-e [42] 100.0% ---------------------------------------------------------------------------------- localize! [22] 100.0% [35] 260(0.4%) 0(0.0%) localize-error ...weaks/src/core/localize.rkt:57:0 hash-ref! [156] 100.0% ---------------------------------------------------------------------------------- gen-series! [23] 100.0% [36] 248(0.4%) 0(0.0%) for-loop ...erbie/js-tweaks/src/mainloop.rkt:160:7 taylor-alt [47] 100.0% ---------------------------------------------------------------------------------- gen-rewrites! [19] 100.0% [37] 208(0.3%) 0(0.0%) group-by61 ...t-7.0/collects/racket/list.rkt:771:0 for-loop [49] 100.0% ---------------------------------------------------------------------------------- ??? [26] 100.0% [38] 160(0.3%) 0(0.0%) ??? ...ollects/racket/private/qq-and-or.rkt:164:21 syntax->list [50] 100.0% ---------------------------------------------------------------------------------- ??? [27] 100.0% [39] 35810(57.4%) 0(0.0%) for-loop .../js-tweaks/src/core/alt-table.rkt:56:2 atab-add-altn [51] 58.5% errors [61] 35.2% loop [55] 4.1% override-at-pnts [66] 2.2% ---------------------------------------------------------------------------------- ??? [28] 100.0% [40] 5940(9.5%) 210(0.3%) loop ...rbie/js-tweaks/src/core/simplify.rkt:105:2 for-loop [53] 96.5% ---------------------------------------------------------------------------------- ??? [28] 100.0% [41] 3274(5.2%) 0(0.0%) for-loop ...e/js-tweaks/src/core/simplify.rkt:33:2 one-iter [52] 100.0% ---------------------------------------------------------------------------------- stx-list? [34] 10.8% loop [64] 11.7% for-loop [178] 77.5% [42] 2760(4.4%) 228(0.4%) syntax-e (unknown source) syntax-e/no-taint [54] 91.7% ---------------------------------------------------------------------------------- for-loop [29] 100.0% [43] 1516(2.4%) 0(0.0%) for-loop ...erbie/js-tweaks/src/mainloop.rkt:256:8 expression-cost [78] 55.7% for-loop [80] 30.7% ??? [166] 13.6% ---------------------------------------------------------------------------------- ??? [30] 100.0% [44] 900(1.4%) 0(0.0%) ??? ...cts/racket/contract/private/list.rkt:209:10 for-loop [56] 100.0% ---------------------------------------------------------------------------------- for-loop [31] 100.0% [45] 668(1.1%) 0(0.0%) for-loop ...erbie/js-tweaks/src/mainloop.rkt:202:6 change-apply [58] 68.0% ??? [166] 32.0% ---------------------------------------------------------------------------------- for-loop [33] 100.0% [46] 486(0.8%) 0(0.0%) rewrite-expression-head20 ...core/matcher.rkt:87:0 rewriter [57] 100.0% ---------------------------------------------------------------------------------- for-loop [36] 100.0% [47] 248(0.4%) 0(0.0%) taylor-alt ...bie/js-tweaks/src/mainloop.rkt:139:0 for-loop [59] 100.0% ---------------------------------------------------------------------------------- ??? [28] 100.0% [48] 244(0.4%) 0(0.0%) for-loop .../js-tweaks/src/core/simplify.rkt:31:14 mk-enode-rec! [163] 100.0% ---------------------------------------------------------------------------------- group-by61 [37] 100.0% [49] 208(0.3%) 0(0.0%) for-loop ...ket-7.0/collects/racket/list.rkt:815:8 ??? [60] 100.0% ---------------------------------------------------------------------------------- ??? [38] 100.0% [50] 160(0.3%) 0(0.0%) syntax->list (unknown source) loop [64] 100.0% ---------------------------------------------------------------------------------- for-loop [39] 100.0% [51] 20964(33.6%) 0(0.0%) atab-add-altn ...eaks/src/core/alt-table.rkt:202:0 errors [61] 89.7% override-at-pnts [66] 6.0% for-loop [72] 2.2% ---------------------------------------------------------------------------------- for-loop [41] 29.9% ??? [28] 70.1% [52] 10934(17.5%) 0(0.0%) one-iter ...e/js-tweaks/src/core/simplify.rkt:65:0 for-loop [62] 58.7% find-matches [63] 36.6% for-loop [69] 4.6% ---------------------------------------------------------------------------------- loop [40] 100.0% [53] 5730(9.2%) 0(0.0%) for-loop .../js-tweaks/src/core/simplify.rkt:111:4 argmin [65] 44.2% loop [67] 19.7% expression-cost [78] 16.5% for-loop [68] 11.7% for-loop [80] 7.9% ---------------------------------------------------------------------------------- syntax-e [42] 100.0% [54] 2532(4.1%) 0(0.0%) syntax-e/no-taint (unknown source) loop [64] 100.0% ---------------------------------------------------------------------------------- for-loop [39] 100.0% [55] 1460(2.3%) 758(1.2%) loop ...bie/js-tweaks/src/core/alt-table.rkt:176:2 argmax [70] 33.7% loop [146] 14.4% ---------------------------------------------------------------------------------- ??? [44] 100.0% [56] 900(1.4%) 0(0.0%) for-loop ...acket/contract/private/list.rkt:212:15 ??? [197] 100.0% ---------------------------------------------------------------------------------- matcher [85] 33.5% rewrite-expression-head20 [46] 66.5% [57] 486(0.8%) 244(0.4%) rewriter ...ie/js-tweaks/src/core/matcher.rkt:90:2 for-loop [71] 83.3% ---------------------------------------------------------------------------------- for-loop [45] 100.0% [58] 454(0.7%) 0(0.0%) change-apply ...s-tweaks/src/core/matcher.rkt:70:0 pattern-substitute [73] 100.0% ---------------------------------------------------------------------------------- taylor-alt [47] 100.0% [59] 248(0.4%) 0(0.0%) for-loop ...erbie/js-tweaks/src/mainloop.rkt:145:6 ??? [166] 100.0% ---------------------------------------------------------------------------------- for-loop [49] 100.0% [60] 208(0.3%) 0(0.0%) ??? ...-7.0/collects/racket/private/sort.rkt:369:3 generic-sort/key [74] 100.0% ---------------------------------------------------------------------------------- ??? [103] 1.1% for-loop [32] 1.7% for-loop [39] 39.0% atab-add-altn [51] 58.3% [61] 32290(51.8%) 0(0.0%) errors ...es/herbie/js-tweaks/src/points.rkt:223:0 for-loop [75] 72.7% eval-prog [76] 27.3% ---------------------------------------------------------------------------------- one-iter [52] 100.0% [62] 6422(10.3%) 0(0.0%) for-loop ...e/js-tweaks/src/core/simplify.rkt:67:2 for-loop [77] 100.0% ---------------------------------------------------------------------------------- one-iter [52] 100.0% [63] 4006(6.4%) 0(0.0%) find-matches ...-tweaks/src/core/simplify.rkt:55:0 for-loop [79] 100.0% ---------------------------------------------------------------------------------- datum->syntax6 [25] 0.2% syntax->list [50] 1.5% apply-transformer52 [10] 2.3% loop [64] 5.8% lambda-clause-expander [155] 5.9% for-loop [178] 22.1% syntax-e/no-taint [54] 62.1% [64] 3532(5.7%) 682(1.1%) loop (unknown source) gf [81] 57.9% expand-id-application-form17 [83] 17.4% dispatch-transformer41 [4] 5.9% loop [64] 5.8% syntax-e [42] 3.8% ---------------------------------------------------------------------------------- for-loop [53] 100.0% [65] 2534(4.1%) 0(0.0%) argmin ...acket-7.0/collects/racket/list.rkt:765:0 expression-cost [78] 64.2% for-loop [80] 35.8% ---------------------------------------------------------------------------------- for-loop [39] 38.8% atab-add-altn [51] 61.2% [66] 2052(3.3%) 0(0.0%) override-at-pnts ...s/src/core/alt-table.rkt:138:0 for-loop [82] 100.0% ---------------------------------------------------------------------------------- for-loop [53] 100.0% [67] 1130(1.8%) 0(0.0%) loop .../racket-7.0/collects/racket/list.rkt:751:4 for-loop [80] 60.0% expression-cost [78] 40.0% ---------------------------------------------------------------------------------- for-loop [53] 100.0% [68] 668(1.1%) 414(0.7%) for-loop ...js-tweaks/src/core/simplify.rkt:115:16 for-loop [86] 38.0% ---------------------------------------------------------------------------------- one-iter [52] 100.0% [69] 506(0.8%) 0(0.0%) for-loop ...e/js-tweaks/src/core/simplify.rkt:72:2 set-precompute! [84] 100.0% ---------------------------------------------------------------------------------- loop [55] 100.0% [70] 492(0.8%) 0(0.0%) argmax ...acket-7.0/collects/racket/list.rkt:766:0 expression-cost [78] 100.0% ---------------------------------------------------------------------------------- rewriter [57] 100.0% [71] 486(0.8%) 0(0.0%) for-loop ...ie/js-tweaks/src/core/matcher.rkt:92:4 matcher [85] 100.0% ---------------------------------------------------------------------------------- atab-add-altn [51] 100.0% [72] 464(0.7%) 464(0.7%) for-loop ...js-tweaks/src/core/alt-table.rkt:119:2 ---------------------------------------------------------------------------------- change-apply [58] 41.0% pattern-substitute [73] 59.0% [73] 454(0.7%) 208(0.3%) pattern-substitute ...ks/src/core/matcher.rkt:46:0 pattern-substitute [73] 59.0% variable? [110] 18.1% ---------------------------------------------------------------------------------- ??? [60] 100.0% [74] 208(0.3%) 0(0.0%) generic-sort/key .../racket/private/sort.rkt:156:2 copying-mergesort [87] 100.0% ---------------------------------------------------------------------------------- errors [61] 100.0% [75] 23460(37.6%) 1916(3.1%) for-loop .../herbie/js-tweaks/src/points.rkt:225:2 ??? [103] 91.8% ---------------------------------------------------------------------------------- eval-const-expr [6] 5.4% errors [61] 94.6% [76] 9336(15.0%) 0(0.0%) eval-prog ...erbie/js-tweaks/src/programs.rkt:83:0 temp68_2 [88] 88.0% inductor [94] 6.0% hash-ref! [156] 3.3% eval-one-top12 [99] 2.7% ---------------------------------------------------------------------------------- for-loop [62] 100.0% [77] 6422(10.3%) 0(0.0%) for-loop ...e/js-tweaks/src/core/simplify.rkt:70:4 merge-egraph-nodes! [89] 75.1% dedup-children! [108] 15.2% substitute-e [98] 6.4% mk-enode! [125] 3.3% ---------------------------------------------------------------------------------- loop [67] 10.4% argmax [70] 11.3% for-loop [43] 19.3% for-loop [53] 21.7% argmin [65] 37.3% [78] 4364(7.0%) 0(0.0%) expression-cost ...s-tweaks/src/programs.rkt:157:0 compile [90] 100.0% ---------------------------------------------------------------------------------- for-loop [79] 46.9% find-matches [63] 53.1% [79] 4006(6.4%) 490(0.8%) for-loop ...e/js-tweaks/src/core/simplify.rkt:57:8 for-loop [79] 46.9% match-e [91] 43.9% ---------------------------------------------------------------------------------- for-loop [53] 18.0% for-loop [43] 18.6% loop [67] 27.1% argmin [65] 36.2% [80] 2500(4.0%) 210(0.3%) for-loop ...erbie/js-tweaks/src/programs.rkt:158:2 table-ref [158] 91.6% ---------------------------------------------------------------------------------- loop [64] 100.0% [81] 2234(3.6%) 442(0.7%) gf (unknown source) propagation-apply [93] 42.2% propagation-merge [97] 20.6% propagation-apply-shifted [100] 10.3% cache-or-reuse-hash [102] 7.2% ---------------------------------------------------------------------------------- override-at-pnts [66] 100.0% [82] 2052(3.3%) 1844(3.0%) for-loop ...s-tweaks/src/core/alt-table.rkt:139:22 ??? [101] 10.1% ---------------------------------------------------------------------------------- loop [64] 100.0% [83] 616(1.0%) 0(0.0%) expand-id-application-form17 (unknown source) resolve+shift28 [92] 100.0% ---------------------------------------------------------------------------------- for-loop [69] 100.0% [84] 506(0.8%) 0(0.0%) set-precompute! ...eaks/src/core/simplify.rkt:79:0 for-loop [95] 100.0% ---------------------------------------------------------------------------------- for-loop [115] 25.1% for-loop [71] 74.9% [85] 486(0.8%) 0(0.0%) matcher ...ie/js-tweaks/src/core/matcher.rkt:118:2 ??? [96] 74.9% rewriter [57] 25.1% ---------------------------------------------------------------------------------- for-loop [68] 100.0% [86] 254(0.4%) 254(0.4%) for-loop ...js-tweaks/src/core/simplify.rkt:119:23 ---------------------------------------------------------------------------------- generic-sort/key [74] 14.3% copying-mergesort [87] 85.7% [87] 208(0.3%) 208(0.3%) copying-mergesort ...racket/private/sort.rkt:129:8 copying-mergesort [87] 85.7% ---------------------------------------------------------------------------------- eval-prog [76] 100.0% [88] 8216(13.2%) 208(0.3%) temp68_2 (unknown source) compile16 [104] 97.5% ---------------------------------------------------------------------------------- for-loop [111] 3.7% merge-egraph-nodes! [89] 17.7% for-loop [77] 78.5% [89] 4822(7.7%) 212(0.3%) merge-egraph-nodes! ...s/src/core/egraph.rkt:143:0 update-leader! [106] 42.3% loop! [160] 20.0% merge-egraph-nodes! [89] 17.7% for-loop [111] 8.2% enode-merge! [113] 5.6% dedup-children! [108] 3.9% ---------------------------------------------------------------------------------- expression-cost [78] 100.0% [90] 4364(7.0%) 256(0.4%) compile ...herbie/js-tweaks/src/programs.rkt:134:0 hash-ref! [156] 94.1% ---------------------------------------------------------------------------------- for-loop [123] 12.7% for-loop [79] 87.3% [91] 3516(5.6%) 868(1.4%) match-e ...rbie/js-tweaks/src/core/ematch.rkt:39:0 for-loop [105] 59.3% constant? [109] 13.0% variable? [110] 6.2% ---------------------------------------------------------------------------------- expand-implicit [188] 12.4% expand-id-application-form17 [83] 29.0% expand-identifier [3] 58.5% [92] 2122(3.4%) 358(0.6%) resolve+shift28 (unknown source) fallback-loop [107] 83.1% ---------------------------------------------------------------------------------- gf [81] 100.0% [93] 942(1.5%) 942(1.5%) propagation-apply (unknown source) ---------------------------------------------------------------------------------- eval-prog [76] 100.0% [94] 564(0.9%) 0(0.0%) inductor ...herbie/js-tweaks/src/programs.rkt:88:4 constant? [109] 54.3% table-ref [158] 45.7% ---------------------------------------------------------------------------------- set-precompute! [84] 100.0% [95] 506(0.8%) 0(0.0%) for-loop ...e/js-tweaks/src/core/simplify.rkt:81:2 ??? [103] 100.0% ---------------------------------------------------------------------------------- matcher [85] 100.0% [96] 486(0.8%) 0(0.0%) ??? ...erbie/js-tweaks/src/core/matcher.rkt:130:11 for-loop [115] 50.2% for-loop [116] 49.8% ---------------------------------------------------------------------------------- gf [81] 100.0% [97] 460(0.7%) 460(0.7%) propagation-merge (unknown source) ---------------------------------------------------------------------------------- for-loop [112] 24.4% for-loop [77] 75.6% [98] 410(0.7%) 0(0.0%) substitute-e ...js-tweaks/src/core/ematch.rkt:64:0 for-loop [112] 100.0% ---------------------------------------------------------------------------------- eval-prog [76] 100.0% [99] 248(0.4%) 0(0.0%) eval-one-top12 (unknown source) link-instance-from-compiled-in-memory [114]100.0% ---------------------------------------------------------------------------------- gf [81] 100.0% [100] 230(0.4%) 230(0.4%) propagation-apply-shifted (unknown source) ---------------------------------------------------------------------------------- for-loop [82] 100.0% [101] 208(0.3%) 208(0.3%) ??? ...7.0/collects/racket/private/for.rkt:1208:14 ---------------------------------------------------------------------------------- gf [81] 100.0% [102] 160(0.3%) 0(0.0%) cache-or-reuse-hash (unknown source) for-loop [178] 100.0% ---------------------------------------------------------------------------------- for-loop [95] 0.3% for-loop [75] 11.5% run [8] 44.1% [103] 62376(100.0%) 2044(3.3%) ??? ...lects/racket/private/more-scheme.rkt:261:28 profile-thunk16 [1] 44.1% run-improve43 [2] 40.9% ??? [154] 7.8% ulp-difference [157] 2.1% prepare-points [118] 1.4% oracle-error [121] 1.0% eval-errors [124] 0.4% ??? [166] 0.3% get-final-combination [5] 0.3% eval-const-expr [6] 0.3% ordinary-value? [126] 0.2% errors [61] 0.2% ---------------------------------------------------------------------------------- temp68_2 [88] 100.0% [104] 8008(12.8%) 0(0.0%) compile16 (unknown source) temp74_0 [117] 100.0% ---------------------------------------------------------------------------------- match-e [91] 100.0% [105] 2416(3.9%) 1008(1.6%) for-loop ...ie/js-tweaks/src/core/ematch.rkt:52:11 for-loop [123] 32.2% curry* [127] 12.1% cartesian-product [133] 9.1% foldr [132] 4.8% ---------------------------------------------------------------------------------- merge-egraph-nodes! [89] 100.0% [106] 2414(3.9%) 0(0.0%) update-leader! ...tweaks/src/core/egraph.rkt:211:0 for-loop [119] 69.6% hash-ref! [156] 10.9% for-loop [129] 10.8% custom-set-union! [134] 8.7% ---------------------------------------------------------------------------------- resolve+shift28 [92] 100.0% [107] 1764(2.8%) 212(0.3%) fallback-loop (unknown source) for-loop [178] 88.0% ---------------------------------------------------------------------------------- merge-egraph-nodes! [89] 31.6% for-loop [77] 68.4% [108] 1426(2.3%) 0(0.0%) dedup-children! ...tweaks/src/core/enode.rkt:195:0 loop [120] 100.0% ---------------------------------------------------------------------------------- inductor [94] 40.2% match-e [91] 59.8% [109] 762(1.2%) 0(0.0%) constant? ...js-tweaks/src/syntax/syntax.rkt:721:0 value? [122] 100.0% ---------------------------------------------------------------------------------- pattern-substitute [73] 36.0% match-e [91] 64.0% [110] 684(1.1%) 0(0.0%) variable? ...js-tweaks/src/syntax/syntax.rkt:724:0 value? [122] 64.0% ??? [27] 36.0% ---------------------------------------------------------------------------------- merge-egraph-nodes! [89] 100.0% [111] 650(1.0%) 216(0.3%) for-loop ...ie/js-tweaks/src/core/egraph.rkt:197:4 merge-egraph-nodes! [89] 66.8% ---------------------------------------------------------------------------------- substitute-e [98] 100.0% [112] 410(0.7%) 200(0.3%) for-loop ...ie/js-tweaks/src/core/ematch.rkt:73:24 mk-enode! [125] 51.2% substitute-e [98] 24.4% ---------------------------------------------------------------------------------- merge-egraph-nodes! [89] 100.0% [113] 272(0.4%) 0(0.0%) enode-merge! ...js-tweaks/src/core/enode.rkt:124:0 adopt-enode! [128] 100.0% ---------------------------------------------------------------------------------- eval-one-top12 [99] 100.0% [114] 248(0.4%) 0(0.0%) link-instance-from-compiled-in-memory ...n source) extract-namespace-scopes/values [130] 100.0% ---------------------------------------------------------------------------------- ??? [96] 100.0% [115] 244(0.4%) 0(0.0%) for-loop .../js-tweaks/src/core/matcher.rkt:132:15 matcher [85] 100.0% ---------------------------------------------------------------------------------- ??? [96] 100.0% [116] 242(0.4%) 0(0.0%) for-loop ...e/js-tweaks/src/core/matcher.rkt:106:4 foldl [131] 100.0% ---------------------------------------------------------------------------------- compile16 [104] 100.0% [117] 8008(12.8%) 288(0.5%) temp74_0 (unknown source) expand-single [135] 92.4% compile-top9 [141] 4.0% ---------------------------------------------------------------------------------- ??? [103] 100.0% [118] 1690(2.7%) 0(0.0%) prepare-points ...e/js-tweaks/src/points.rkt:166:0 loop [136] 100.0% ---------------------------------------------------------------------------------- update-leader! [106] 100.0% [119] 1680(2.7%) 0(0.0%) for-loop ...ie/js-tweaks/src/core/egraph.rkt:216:6 hash-update! [147] 71.9% for-loop [138] 28.1% ---------------------------------------------------------------------------------- dedup-children! [108] 5.3% loop [120] 94.7% [120] 1426(2.3%) 1426(2.3%) loop ...racket-7.0/collects/racket/list.rkt:434:17 loop [120] 94.7% ---------------------------------------------------------------------------------- ??? [103] 100.0% [121] 1214(1.9%) 0(0.0%) oracle-error ...bie/js-tweaks/src/points.rkt:207:0 for-loop [137] 100.0% ---------------------------------------------------------------------------------- variable? [110] 36.5% constant? [109] 63.5% [122] 1200(1.9%) 1200(1.9%) value? ...rbie/js-tweaks/src/syntax/types.rkt:18:0 ---------------------------------------------------------------------------------- for-loop [105] 100.0% [123] 896(1.4%) 0(0.0%) for-loop ...ie/js-tweaks/src/core/ematch.rkt:58:37 match-e [91] 100.0% ---------------------------------------------------------------------------------- ??? [103] 100.0% [124] 466(0.7%) 0(0.0%) eval-errors ...rbie/js-tweaks/src/points.rkt:198:0 for-loop [139] 100.0% ---------------------------------------------------------------------------------- for-loop [112] 49.5% for-loop [77] 50.5% [125] 424(0.7%) 210(0.3%) mk-enode! ...ie/js-tweaks/src/core/egraph.rkt:97:0 new-enode [144] 50.5% ---------------------------------------------------------------------------------- ??? [103] 100.0% [126] 394(0.6%) 0(0.0%) ordinary-value? ...ie/js-tweaks/src/float.rkt:80:0 special-value? [140] 100.0% ---------------------------------------------------------------------------------- for-loop [105] 100.0% [127] 292(0.5%) 292(0.5%) curry* ...et-7.0/collects/racket/function.rkt:44:2 ---------------------------------------------------------------------------------- enode-merge! [113] 100.0% [128] 272(0.4%) 0(0.0%) adopt-enode! ...js-tweaks/src/core/enode.rkt:102:0 custom-set-union [171] 100.0% ---------------------------------------------------------------------------------- update-leader! [106] 100.0% [129] 260(0.4%) 0(0.0%) for-loop ...ie/js-tweaks/src/core/egraph.rkt:226:6 update-en-expr [142] 100.0% ---------------------------------------------------------------------------------- link-instance-from-compiled-in-memory [114]100.0% [130] 248(0.4%) 248(0.4%) extract-namespace-scopes/values (unknown source) ---------------------------------------------------------------------------------- for-loop [116] 100.0% [131] 242(0.4%) 0(0.0%) foldl ....0/collects/racket/private/list.rkt:229:4 ??? [143] 100.0% ---------------------------------------------------------------------------------- for-loop [105] 100.0% [132] 234(0.4%) 234(0.4%) foldr ....0/collects/racket/private/list.rkt:242:4 ---------------------------------------------------------------------------------- for-loop [105] 100.0% [133] 220(0.4%) 220(0.4%) cartesian-product ...ollects/racket/list.rkt:822:0 ---------------------------------------------------------------------------------- update-leader! [106] 100.0% [134] 210(0.3%) 210(0.3%) custom-set-union! ...t/private/set-types.rkt:245:0 ---------------------------------------------------------------------------------- temp74_0 [117] 100.0% [135] 7396(11.9%) 0(0.0%) expand-single (unknown source) expand-capturing-lifts [145] 100.0% ---------------------------------------------------------------------------------- prepare-points [118] 100.0% [136] 1690(2.7%) 162(0.3%) loop ...lies/herbie/js-tweaks/src/points.rkt:143:4 loop [148] 80.0% ??? [153] 10.4% ---------------------------------------------------------------------------------- oracle-error [121] 100.0% [137] 1214(1.9%) 0(0.0%) for-loop .../herbie/js-tweaks/src/points.rkt:208:2 loop [146] 63.1% map [180] 36.9% ---------------------------------------------------------------------------------- for-loop [119] 100.0% [138] 472(0.8%) 0(0.0%) for-loop ...ie/js-tweaks/src/core/egraph.rkt:217:8 hash-update! [147] 100.0% ---------------------------------------------------------------------------------- eval-errors [124] 100.0% [139] 466(0.7%) 0(0.0%) for-loop .../herbie/js-tweaks/src/points.rkt:200:2 ??? [154] 100.0% ---------------------------------------------------------------------------------- ordinary-value? [126] 100.0% [140] 394(0.6%) 0(0.0%) special-value? ...bie/js-tweaks/src/float.rkt:76:0 for-loop [149] 100.0% ---------------------------------------------------------------------------------- temp74_0 [117] 100.0% [141] 324(0.5%) 0(0.0%) compile-top9 (unknown source) compile-forms31 [150] 100.0% ---------------------------------------------------------------------------------- for-loop [129] 100.0% [142] 260(0.4%) 260(0.4%) update-en-expr ...tweaks/src/core/egraph.rkt:205:0 ---------------------------------------------------------------------------------- foldl [131] 100.0% [143] 242(0.4%) 0(0.0%) ??? .../herbie/js-tweaks/src/core/matcher.rkt:26:7 core651 [151] 100.0% ---------------------------------------------------------------------------------- mk-enode! [125] 100.0% [144] 214(0.3%) 0(0.0%) new-enode ...bie/js-tweaks/src/core/enode.rkt:94:0 type-of-enode-expr [152] 100.0% ---------------------------------------------------------------------------------- expand-single [135] 100.0% [145] 7396(11.9%) 0(0.0%) expand-capturing-lifts (unknown source) lambda-clause-expander [155] 100.0% ---------------------------------------------------------------------------------- ??? [28] 0.1% loop [55] 1.4% loop! [160] 1.8% mk-enode-rec! [163] 6.7% f46 [192] 6.8% ??? [167] 8.4% for-loop [137] 18.0% loop [146] 56.9% [146] 3668(5.9%) 210(0.3%) loop ...-7.0/collects/racket/private/map.rkt:40:19 loop [146] 56.9% hash-ref! [156] 8.4% simplify [162] 6.8% mk-enode-rec! [163] 6.7% ??? [187] 5.8% ??? [154] 5.0% ??? [166] 4.3% ulp-difference [157] 2.9% loop! [160] 1.8% unpack376 [161] 0.1% ---------------------------------------------------------------------------------- for-loop [138] 28.1% for-loop [119] 71.9% [147] 1680(2.7%) 0(0.0%) hash-update! ...cket/private/more-scheme.rkt:365:4 ??? [159] 100.0% ---------------------------------------------------------------------------------- loop [136] 100.0% [148] 1352(2.2%) 172(0.3%) loop ...lies/herbie/js-tweaks/src/points.rkt:102:2 ??? [154] 87.3% ---------------------------------------------------------------------------------- special-value? [140] 100.0% [149] 394(0.6%) 394(0.6%) for-loop ...es/herbie/js-tweaks/src/float.rkt:17:3 ---------------------------------------------------------------------------------- compile-top9 [141] 100.0% [150] 324(0.5%) 0(0.0%) compile-forms31 (unknown source) for-loop [178] 100.0% ---------------------------------------------------------------------------------- ??? [143] 100.0% [151] 242(0.4%) 242(0.4%) core651 ...acket/contract/private/arr-i.rkt:918:19 ---------------------------------------------------------------------------------- new-enode [144] 100.0% [152] 214(0.3%) 0(0.0%) type-of-enode-expr ...eaks/src/core/enode.rkt:66:0 table-ref [158] 100.0% ---------------------------------------------------------------------------------- loop [136] 100.0% [153] 176(0.3%) 0(0.0%) ??? ...tlies/herbie/js-tweaks/src/points.rkt:127:2 ??? [166] 100.0% ---------------------------------------------------------------------------------- loop [146] 1.1% ??? [187] 2.6% for-loop [139] 2.8% loop [148] 7.0% ??? [103] 86.5% [154] 16850(27.0%) 1324(2.1%) ??? ...lies/herbie/js-tweaks/src/programs.rkt:99:2 ??? [164] 68.9% ??? [166] 20.2% ??? [186] 3.0% ---------------------------------------------------------------------------------- expand-capturing-lifts [145] 100.0% [155] 7396(11.9%) 0(0.0%) lambda-clause-expander (unknown source) finish-bodys [165] 88.1% loop [64] 9.1% for-loop [178] 2.8% ---------------------------------------------------------------------------------- eval-prog [76] 1.2% localize-error [35] 1.3% map [180] 3.9% loop [146] 5.0% update-leader! [106] 5.3% compile [90] 34.7% ??? [167] 48.4% [156] 4940(7.9%) 3994(6.4%) hash-ref! .../racket/private/more-scheme.rkt:376:2 ??? [167] 57.0% parse-loop30 [173] 5.3% ---------------------------------------------------------------------------------- loop [146] 5.2% ??? [103] 94.8% [157] 4084(6.5%) 1254(2.0%) ulp-difference ...bie/js-tweaks/src/float.rkt:46:0 infer-representation [168] 69.3% ---------------------------------------------------------------------------------- type-of-enode-expr [152] 7.7% inductor [94] 9.3% for-loop [80] 82.9% [158] 2762(4.4%) 1660(2.7%) table-ref .../herbie/js-tweaks/src/common.rkt:41:0 for-loop [170] 23.6% dict? [175] 8.8% assoc-iterate-first [176] 7.5% ---------------------------------------------------------------------------------- hash-update! [147] 100.0% [159] 1680(2.7%) 0(0.0%) ??? ...herbie/js-tweaks/src/core/egraph.rkt:219:24 for-loop [169] 100.0% ---------------------------------------------------------------------------------- loop [146] 39.2% merge-egraph-nodes! [89] 60.8% [160] 1258(2.0%) 504(0.8%) loop! ...herbie/js-tweaks/src/core/enode.rkt:187:2 loop [146] 39.2% custom-set-union [171] 21.6% set [172] 19.2% ---------------------------------------------------------------------------------- loop [146] 100.0% [161] 906(1.5%) 906(1.5%) unpack376 ...7.0/collects/racket/format.rkt:147:16 ---------------------------------------------------------------------------------- loop [146] 100.0% [162] 248(0.4%) 0(0.0%) simplify ...bie/js-tweaks/src/core/reduce.rkt:16:0 f46 [192] 100.0% ---------------------------------------------------------------------------------- loop [146] 50.0% for-loop [48] 50.0% [163] 244(0.4%) 0(0.0%) mk-enode-rec! ...-tweaks/src/core/egraph.rkt:117:0 loop [146] 50.0% hash-has-key? [174] 50.0% ---------------------------------------------------------------------------------- ??? [154] 100.0% [164] 11612(18.6%) 1662(2.7%) ??? ...t-7.0/collects/racket/private/kw.rkt:592:14 ??? [177] 78.5% ??? [181] 7.1% ---------------------------------------------------------------------------------- lambda-clause-expander [155] 10.2% for-loop [178] 89.8% [165] 6514(10.4%) 0(0.0%) finish-bodys (unknown source) for-loop [178] 100.0% ---------------------------------------------------------------------------------- for-loop [43] 2.0% for-loop [59] 2.4% loop [146] 3.1% ??? [153] 3.5% for-loop [45] 4.2% location-do [182] 4.5% ??? [103] 12.9% ??? [154] 67.3% [166] 5064(8.1%) 1248(2.0%) ??? ...tract/private/arrow-higher-order.rkt:357:33 ->flonum [179] 66.2% location-do [182] 8.7% approximate9 [7] 2.4% ---------------------------------------------------------------------------------- hash-ref! [156] 100.0% [167] 3750(6.0%) 686(1.1%) ??? ...ies/herbie/js-tweaks/src/programs.rkt:142:5 hash-ref! [156] 87.1% loop [146] 8.2% ---------------------------------------------------------------------------------- ulp-difference [157] 100.0% [168] 2830(4.5%) 1764(2.8%) infer-representation ...-tweaks/src/float.rkt:15:0 ??? [201] 31.8% return/no-unsupplied [200] 5.9% ---------------------------------------------------------------------------------- ??? [159] 100.0% [169] 1680(2.7%) 1680(2.7%) for-loop ...e/js-tweaks/src/core/egraph.rkt:220:26 ---------------------------------------------------------------------------------- table-ref [158] 100.0% [170] 652(1.0%) 652(1.0%) for-loop ...s/herbie/js-tweaks/src/common.rkt:43:4 ---------------------------------------------------------------------------------- loop! [160] 50.0% adopt-enode! [128] 50.0% [171] 544(0.9%) 272(0.4%) custom-set-union ...et/private/set-types.rkt:168:0 for-loop [183] 50.0% ---------------------------------------------------------------------------------- loop! [160] 100.0% [172] 482(0.8%) 482(0.8%) set ...collects/racket/private/set-types.rkt:981:0 ---------------------------------------------------------------------------------- hash-ref! [156] 100.0% [173] 260(0.4%) 0(0.0%) parse-loop30 ...s/racket/match/compiler.rkt:418:15 map [180] 75.0% for-loop [184] 25.0% ---------------------------------------------------------------------------------- mk-enode-rec! [163] 100.0% [174] 244(0.4%) 244(0.4%) hash-has-key? ...ket/private/more-scheme.rkt:371:2 ---------------------------------------------------------------------------------- table-ref [158] 100.0% [175] 242(0.4%) 242(0.4%) dict? ...ollects/racket/private/generic.rkt:146:11 ---------------------------------------------------------------------------------- table-ref [158] 100.0% [176] 208(0.3%) 208(0.3%) assoc-iterate-first ...cket/private/dict.rkt:166:0 ---------------------------------------------------------------------------------- ??? [164] 100.0% [177] 9120(14.6%) 5502(8.8%) ??? ...rbie/js-tweaks/src/syntax/syntax.rkt:209:17 return/no-unsupplied [200] 23.5% ??? [201] 8.4% ??? [186] 5.2% list-member? [193] 2.6% ---------------------------------------------------------------------------------- fallback-loop [107] 1.1% cache-or-reuse-hash [102] 2.2% lambda-clause-expander [155] 2.9% compile-forms31 [150] 4.5% for-loop [178] 7.2% finish-bodys [165] 82.1% [178] 7204(11.5%) 3188(5.1%) for-loop (unknown source) finish-bodys [165] 74.0% for-loop [178] 7.2% add-local-binding!37 [195] 2.9% syntax-e [42] 2.6% expand-implicit [188] 1.4% expand-identifier [3] 1.0% dispatch-transformer41 [4] 0.7% loop [64] 0.7% ---------------------------------------------------------------------------------- ??? [166] 100.0% [179] 3354(5.4%) 484(0.8%) ->flonum ...s/herbie/js-tweaks/src/float.rkt:149:0 ??? [185] 85.6% ---------------------------------------------------------------------------------- f46 [192] 25.9% parse-loop30 [173] 27.2% for-loop [137] 46.9% [180] 956(1.5%) 0(0.0%) map ...t-7.0/collects/racket/private/map.rkt:35:13 ??? [187] 46.9% hash-ref! [156] 27.2% f46 [192] 25.9% ---------------------------------------------------------------------------------- ??? [164] 100.0% [181] 830(1.3%) 158(0.3%) ??? ...tract/private/arrow-higher-order.rkt:361:33 ival-div [189] 41.4% ival-fabs [190] 39.5% ---------------------------------------------------------------------------------- location-do [182] 44.6% ??? [166] 55.4% [182] 668(1.1%) 0(0.0%) location-do ...bie/js-tweaks/src/programs.rkt:64:0 ??? [166] 47.4% location-do [182] 44.6% ??? [194] 8.0% ---------------------------------------------------------------------------------- custom-set-union [171] 100.0% [183] 272(0.4%) 272(0.4%) for-loop ...cts/racket/private/set-types.rkt:174:3 ---------------------------------------------------------------------------------- parse-loop30 [173] 100.0% [184] 260(0.4%) 0(0.0%) for-loop .../js-tweaks/src/core/localize.rkt:45:21 for-loop [191] 100.0% ---------------------------------------------------------------------------------- ->flonum [179] 100.0% [185] 2870(4.6%) 0(0.0%) ??? ...ghtlies/herbie/js-tweaks/src/float.rkt:23:2 for-loop [196] 100.0% ---------------------------------------------------------------------------------- ??? [177] 48.2% ??? [154] 51.8% [186] 976(1.6%) 976(1.6%) ??? ...ects/racket/contract/private/guts.rkt:746:8 ---------------------------------------------------------------------------------- loop [146] 32.3% map [180] 67.7% [187] 662(1.1%) 220(0.4%) ??? ...lies/herbie/js-tweaks/src/points.rkt:209:26 ??? [154] 66.8% ---------------------------------------------------------------------------------- for-loop [178] 100.0% [188] 610(1.0%) 346(0.6%) expand-implicit (unknown source) resolve+shift28 [92] 43.3% ---------------------------------------------------------------------------------- ??? [181] 100.0% [189] 344(0.6%) 0(0.0%) ival-div ...ie/js-tweaks/src/biginterval.rkt:148:0 bfdiv [198] 100.0% ---------------------------------------------------------------------------------- ??? [181] 100.0% [190] 328(0.5%) 0(0.0%) ival-fabs ...e/js-tweaks/src/biginterval.rkt:354:0 bfneg [199] 100.0% ---------------------------------------------------------------------------------- for-loop [184] 100.0% [191] 260(0.4%) 0(0.0%) for-loop .../js-tweaks/src/core/localize.rkt:46:23 ??? [204] 100.0% ---------------------------------------------------------------------------------- simplify [162] 25.0% taylor [16] 25.0% map [180] 50.0% [192] 248(0.4%) 248(0.4%) f46 ...0/collects/racket/match/compiler.rkt:507:40 map [180] 50.0% loop [146] 25.0% ---------------------------------------------------------------------------------- ??? [177] 100.0% [193] 236(0.4%) 236(0.4%) list-member? ...llects/racket/private/set.rkt:24:0 ---------------------------------------------------------------------------------- location-do [182] 100.0% [194] 214(0.3%) 0(0.0%) ??? ...tract/private/arrow-higher-order.rkt:345:46 ??? [197] 100.0% ---------------------------------------------------------------------------------- for-loop [178] 100.0% [195] 206(0.3%) 206(0.3%) add-local-binding!37 (unknown source) ---------------------------------------------------------------------------------- ??? [185] 100.0% [196] 2870(4.6%) 1910(3.1%) for-loop ...es/herbie/js-tweaks/src/float.rkt:24:5 return/no-unsupplied [200] 18.1% ??? [201] 15.3% ---------------------------------------------------------------------------------- ??? [194] 19.2% for-loop [56] 80.8% [197] 1114(1.8%) 214(0.3%) ??? ...ects/racket/contract/private/prop.rkt:519:4 ??? [202] 80.8% ---------------------------------------------------------------------------------- ival-div [189] 100.0% [198] 344(0.6%) 0(0.0%) bfdiv ...-lib/math/private/bigfloat/mpfr.rkt:821:4 new-mpfr [203] 100.0% ---------------------------------------------------------------------------------- ival-fabs [190] 100.0% [199] 328(0.5%) 0(0.0%) bfneg ...-lib/math/private/bigfloat/mpfr.rkt:618:4 ??? [204] 52.4% new-mpfr [203] 47.6% ---------------------------------------------------------------------------------- infer-representation [168] 5.9% for-loop [196] 18.4% ??? [177] 75.8% [200] 2830(4.5%) 2216(3.6%) return/no-unsupplied ...ct/private/arr-i.rkt:534:0 filter [206] 21.7% ---------------------------------------------------------------------------------- for-loop [196] 20.9% ??? [177] 36.4% infer-representation [168] 42.7% [201] 2108(3.4%) 2108(3.4%) ??? ...s/racket/contract/private/arr-i.rkt:1252:29 ---------------------------------------------------------------------------------- ??? [197] 100.0% [202] 900(1.4%) 0(0.0%) ??? ...lects/racket/contract/private/orc.rkt:83:14 ??? [205] 100.0% ---------------------------------------------------------------------------------- bfneg [199] 31.2% bfdiv [198] 68.8% [203] 500(0.8%) 500(0.8%) new-mpfr ...b/math/private/bigfloat/mpfr.rkt:335:0 ---------------------------------------------------------------------------------- bfneg [199] 39.8% for-loop [191] 60.2% [204] 432(0.7%) 432(0.7%) ??? /opt/racket-7.0/collects/ffi/unsafe.rkt:898:4 ---------------------------------------------------------------------------------- ??? [202] 100.0% [205] 900(1.4%) 900(1.4%) ??? ...ects/racket/contract/private/list.rkt:163:5 ---------------------------------------------------------------------------------- return/no-unsupplied [200] 100.0% [206] 614(1.0%) 614(1.0%) filter ...0/collects/racket/private/list.rkt:256:2 ----------------------------------------------------------------------------------