summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
Diffstat (limited to 'tools')
-rw-r--r--tools/cgannotate.tcl24
-rw-r--r--tools/microoptimization/clockformatscan.tcl5
-rw-r--r--tools/microoptimization/generalbytecode.tcl13
-rw-r--r--tools/microoptimization/oocreate.tcl13
-rw-r--r--tools/microoptimization/oodispatch.tcl11
5 files changed, 66 insertions, 0 deletions
diff --git a/tools/cgannotate.tcl b/tools/cgannotate.tcl
new file mode 100644
index 0000000..f8b9b7d
--- /dev/null
+++ b/tools/cgannotate.tcl
@@ -0,0 +1,24 @@
+#!/usr/bin/tclsh
+#
+# A wrapper around cg_annotate that sets appropriate command-line options
+# and rearranges the output so that annotated files occur in a consistent
+# sorted order.
+#
+
+set in [open |[list cg_annotate --show=Ir --auto=yes --context=40 {*}$argv] r]
+set dest !
+set out(!) {}
+while {![eof $in]} {
+ set line [string map {\t { }} [gets $in]]
+ if {[regexp {^-- Auto-annotated source: (.*)} $line all name]} {
+ set dest $name
+ } elseif {[regexp {^-- line \d+ ------} $line]} {
+ set line [lreplace $line 2 2 {#}]
+ } elseif {[regexp {^The following files chosen for } $line]} {
+ set dest !
+ }
+ append out($dest) $line\n
+}
+foreach x [lsort [array names out]] {
+ puts $out($x)
+}
diff --git a/tools/microoptimization/clockformatscan.tcl b/tools/microoptimization/clockformatscan.tcl
new file mode 100644
index 0000000..c7cec46
--- /dev/null
+++ b/tools/microoptimization/clockformatscan.tcl
@@ -0,0 +1,5 @@
+apply {{{limit 5000}} {
+ for {set i 0} {$i < $limit} {incr i} {
+ clock scan [clock format $i -format %T] -format %T
+ }
+}} {*}$argv
diff --git a/tools/microoptimization/generalbytecode.tcl b/tools/microoptimization/generalbytecode.tcl
new file mode 100644
index 0000000..2471943
--- /dev/null
+++ b/tools/microoptimization/generalbytecode.tcl
@@ -0,0 +1,13 @@
+apply {{{limit1 100} {limit2 1000}} {
+ for {set i 0} {$i < $limit1} {incr i} {
+ apply {limit2 {
+ set a {}
+ set b {}
+ for {set i 0} {$i < $limit2} {incr i} {
+ lappend a $i
+ dict set b $i [expr {$i*$i}]
+ }
+ return [string length $a],[string length $b]
+ }} $limit2
+ }
+}} {*}$argv
diff --git a/tools/microoptimization/oocreate.tcl b/tools/microoptimization/oocreate.tcl
new file mode 100644
index 0000000..0a5d3dc
--- /dev/null
+++ b/tools/microoptimization/oocreate.tcl
@@ -0,0 +1,13 @@
+oo::class create foo {
+ method bar {} {
+ return abc
+ }
+}
+apply {{{iter 10000}} {
+ for {set i 0} {$i < $iter} {incr i} {
+ set obj1 [foo new]
+ set obj2 [foo create inst]
+ $obj1 destroy
+ $obj2 destroy
+ }
+}} {*}$argv
diff --git a/tools/microoptimization/oodispatch.tcl b/tools/microoptimization/oodispatch.tcl
new file mode 100644
index 0000000..041c8e3
--- /dev/null
+++ b/tools/microoptimization/oodispatch.tcl
@@ -0,0 +1,11 @@
+oo::class create foo {
+ method bar {} {
+ return abc
+ }
+}
+foo create inst
+apply {{{iter 100000}} {
+ for {set i 0} {$i < $iter} {incr i} {
+ inst bar
+ }
+}} {*}$argv