Home

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

174 check-ins using file quadcode/constjump.tcl version 0b39e2ae54

2017-05-20
16:47
Another tranche of internal API check-in: 7f1baa9fc1 user: dkf tags: tcl-api
07:21
Redo the type widening so that it doesn't get so awful. check-in: 46abd31cc7 user: dkf tags: dkf-callframe-impl
2017-05-19
21:51
merge dkf-callframe-impl check-in: 3f580223cb user: kbk tags: kbk-callframe-motion
21:48
Merge trunk Closed-Leaf check-in: b30d5235b8 user: kbk tags: kbk-bug-e1f697c808
08:25
merge trunk check-in: 9218c64ce6 user: dkf tags: dkf-callframe-impl
08:22
Added definitions for much of the remaining Tcl API. check-in: d1240091e0 user: dkf tags: trunk
08:20
Internal API and call attribute tweaking. check-in: 6c8693dd16 user: dkf tags: tcl-api
2017-05-18
23:55
Merge trunk check-in: 49aa9ba778 user: kbk tags: kbk-bug-e1f697c808
23:38
Another tranche of Tcl's API check-in: 7f77b6974a user: dkf tags: tcl-api
08:46
Another tranche of Tcl's API check-in: 25a234d851 user: dkf tags: tcl-api
2017-05-16
22:15
Another tranche of Tcl's API check-in: 72b4c1b4dd user: dkf tags: tcl-api
08:42
Another tranche of Tcl's API check-in: ead48dfe8b user: dkf tags: tcl-api
2017-05-14
23:16
Add a nanopass to remove 'moveFromCallFrame' and 'moveToCallFrame' when it is known that (a) an invoked command doesn't use/modify the variable being moved, or (b) the value being moved to the callframe is already there. The code includes characterization of the effect of a great many of Tcl's builtin commands on the caller's variables. check-in: e016cb6dc3 user: kbk tags: kbk-callframe-motion
17:46
Another tranche of Tcl's API check-in: b96224cf75 user: dkf tags: tcl-api
16:59
Another tranche of Tcl's API check-in: 5219c0900a user: dkf tags: tcl-api
16:03
Another tranche of Tcl's API check-in: 2335c968a4 user: dkf tags: tcl-api
13:57
merge trunk check-in: 0ee077fe05 user: dkf tags: tcl-api
12:13
merge trunk check-in: 30bdc52a01 user: dkf tags: dkf-callframe-impl
10:44
merge trunk check-in: 4419de9303 user: dkf tags: dkf-colored-output
10:40
merge trunk Leaf check-in: 95e004d191 user: dkf tags: more-flightaware-examples
10:35
merge trunk check-in: fbf82b2d69 user: dkf tags: dkf-optimization-experiment
10:03
merge trunk check-in: e51accf9c3 user: dkf tags: dkf-remove-unused-functions
10:02
[5800594ba4] Add hard error in case this ever comes up again. check-in: 4976822fe2 user: dkf tags: trunk
03:49
If a procedure always throws an error, change its return type from a bald FAIL to FAIL STRING. Otherwise, there are several issues with trying to generate code for its callers. check-in: 2ea9177c1f user: kbk tags: kbk-bug-e1f697c808
2017-05-13
21:39
Bug [5800594ba4] - Do not emit widening instructions whose target is a literal check-in: 8b82804231 user: kbk tags: trunk
21:26
toss out obsolete code check-in: a314fc6fcc user: kbk tags: trunk
21:14
Complete rework of SSA repair. Node splitting and type narrowing are now much simpler, and the SSA repair technique is much more like a 'black box' that is agnostic to the specific program transformation that damaged SSA. check-in: 7d469bcdc0 user: kbk tags: trunk
21:10
Fix stupid bug in SSA repair that caused phi nodes to be mislinked Closed-Leaf check-in: f1db21a01e user: kbk tags: kbk-ssa-repair
18:47
Make node splitting use the 'black box' SSA repair. NOT WORKING - powmul2 infinite loop? check-in: a89601c4ce user: kbk tags: kbk-ssa-repair
14:29
Added testcase (for [5800594ba4]) that highlights issues with widening of literals. check-in: 327019999e user: dkf tags: trunk
13:32
merge trunk check-in: e5a6f94d24 user: dkf tags: dkf-remove-unused-functions
13:31
GC of unused functions now part of llvmtcl 3.7 check-in: 462299a7c9 user: dkf tags: dkf-remove-unused-functions
08:11
Fixes to handling of IMPURE and reference count management problems that that exposed. check-in: 44fa79e9a9 user: dkf tags: trunk
08:08
Workaround for leaks caused by bad widenTo's of literals. (See [5800594ba4]) Closed-Leaf check-in: ef635af798 user: dkf tags: dkf-workaround-widenTo-literal
2017-05-12
21:55
merge trunk check-in: 48585a0c71 user: kbk tags: kbk-ssa-repair
08:23
Corrections to reference count handling for narrowToType when working with IMPURE types. Closed-Leaf check-in: 11bb40a048 user: dkf tags: fixing-impure2-issues
03:06
Return to aggressive copy propagation for temporaries. Adopt a new theory of SSA repair that reconstructs SSA for specific variables by renaming only the affect variable and tracing uses upward to their reaching defs, adding phis as necessary. Temporarily bypass node splitting/jump threading, because it is not yet using the new approach to SSA repair. New algorithms should not require Conventional SSA for the repairs, so efforts to preserve it have been abandoned. check-in: f7580cf32d user: kbk tags: kbk-ssa-repair
2017-05-11
08:02
merge trunk check-in: 534f624da1 user: dkf tags: fixing-impure2-issues
08:01
Add capability to suppress inlining of some macro implementation functions. check-in: 58dbacc6fe user: dkf tags: trunk
07:59
Fix refcount handling for copying of constants. check-in: ef569cfebf user: dkf tags: fixing-impure2-issues
2017-05-10
07:26
Fix refcount handling with constants in vectors check-in: 1715597d9b user: dkf tags: fixing-impure2-issues
2017-05-09
18:37
Garbage collect those functions that are currently unused. Which are unused depends on what Tcl bytecodes were in starting code. check-in: 5473c2585a user: dkf tags: dkf-remove-unused-functions
07:26
Fix for debugging prints when applied to STRING? types. check-in: 63dc044805 user: dkf tags: fixing-impure2-issues
2017-05-08
19:24
Fix silly error. check-in: 32add5260b user: dkf tags: fixing-impure2-issues
2017-05-07
17:27
Working on fixing the issues with compiling impure2. check-in: 121519fdcf user: dkf tags: fixing-impure2-issues
2017-05-03
07:31
Make better use of colour. check-in: a9c75a3565 user: dkf tags: dkf-colored-output
2017-05-02
18:41
Tinkering with errortest2. !!BUG!! errortest2-caller currently uncompileable. check-in: 2d11c0a858 user: dkf tags: trunk
10:17
merge trunk check-in: be2e8d7c6a user: dkf tags: dkf-colored-output
09:40
Factor out the code to run the demos from the demos themselves. check-in: 4abaf40456 user: dkf tags: trunk
07:18
merge trunk check-in: 0ce9320ff8 user: dkf tags: dkf-callframe-impl
2017-04-24
13:57
Add colour to banners printed by demo code. check-in: d124d0d754 user: dkf tags: dkf-colored-output
13:56
Silence some 'puts' calls in non-debug mode. check-in: 93e7b76578 user: dkf tags: trunk
2017-04-22
15:37
Generate correct Tcl line numbers in LLVM IR debugging info. check-in: 8cafd1d034 user: dkf tags: trunk
15:23
Improve the generation of source information in warnings. check-in: 570f3ec2e5 user: dkf tags: trunk, minor change
12:37
merge trunk check-in: 29b9c473e9 user: dkf tags: dkf-callframe-impl
2017-04-19
19:49
Uncomment the test (which now passes) check-in: d91216509e user: dkf tags: trunk, minor change
19:41
[7c599d4029] Switch to using typecodes in tcl function names so that we can have two versions of something with the same LLVM implementation type. check-in: 8414358591 user: dkf tags: trunk
2017-04-15
20:03
Reinsert critical [source] calls lost in merge. check-in: 6064e6b5e8 user: dkf tags: dkf-callframe-impl
18:38
merge trunk check-in: df89ed8fb8 user: dkf tags: dkf-callframe-impl
18:02
Merge in changes to specializer order of operations so that node splitting does not create un-analyzed procedure instances. check-in: 982ee9ab19 user: kbk tags: trunk
17:57
Cosmetic changes to nodesplit.tcl Closed-Leaf check-in: 22976e49d6 user: kbk tags: kbk-bug-7c599d4029
17:34
Finish renaming 'typeunroll' to 'nodesplit' check-in: 86e33b69b3 user: kbk tags: kbk-bug-7c599d4029
17:27
Start to expunge the name, 'typeunroll', in favour of 'nodesplit'. check-in: f504469463 user: kbk tags: kbk-bug-7c599d4029
17:20
Remove unused 'typeunroll' method check-in: 3d0f7aee3a user: kbk tags: kbk-bug-7c599d4029
17:12
Update the bug-7c599d4029 case to demonstrate problem with quadcode type algebra check-in: fa0b850c48 user: kbk tags: kbk-bug-7c599d4029
16:48
Refactor specializer so that the order of operations respects the fact that node splitting may change types of invoked procedures. check-in: 364120427c user: kbk tags: kbk-bug-7c599d4029
15:30
Make dead code elimination and copy propagation track whether they have changed the program. check-in: ea85afde7b user: kbk tags: kbk-bug-7c599d4029
14:57
merge trunk check-in: 4b9267fa69 user: kbk tags: kbk-bug-7c599d4029
14:52
Make 'cleanupNarrow' track whether it has modified the program. check-in: 9428105279 user: kbk tags: kbk-bug-7c599d4029
11:58
Move more of codegen.tcl into a separate file. Mark all files in codegen/ as UTF-8 for Emacs. check-in: f19b7c2814 user: dkf tags: trunk
2017-04-14
19:15
Refactor worklist management in preparation for big refactor of node splitting check-in: 73b3d6f437 user: kbk tags: kbk-bug-7c599d4029
16:12
Further simplification to type unrolling: consolidate a method to find a single node to split and split it. check-in: 29e3d534df user: kbk tags: kbk-bug-7c599d4029
16:00
Remove misguided hack that tried to keep node splitting from running on incomplete type information check-in: 062b737ea8 user: kbk tags: kbk-bug-7c599d4029
15:54
Refactor 'removeSplitMarkers' out of 'typeunroll' check-in: 572788f99a user: kbk tags: kbk-bug-7c599d4029
15:40
Place cleanup optimizations into a single method check-in: a5d36d8a81 user: kbk tags: kbk-bug-7c599d4029
15:10
Refactor the placement of split markers out of typeunroll in preparation for bigger refactor of unrolling. check-in: 9dcbbe3832 user: kbk tags: kbk-bug-7c599d4029
2017-04-08
19:53
Don't fold a copy-to-temp together with a phi. check-in: 799df0d1dd user: kbk tags: kbk-bug-7c599d4029
2017-03-25
15:13
Adapt to changes to what instructions deal with CALLFRAMEs and add some more diagnostic warnings. check-in: c32e63b7cc user: dkf tags: dkf-callframe-impl
08:14
merge trunk check-in: 23ec9d57a9 user: dkf tags: dkf-callframe-impl
08:13
A bunch of corrections to support functions, developed originally on the dkf-callframe-impl branch. check-in: 482ae5b3be user: dkf tags: trunk
06:34
More work on type conversions. check-in: 4e1c23c371 user: dkf tags: dkf-callframe-impl
2017-03-22
08:44
Fix silly mistakes and change to arguments to 'return'. check-in: 6dbda5c9fe user: dkf tags: dkf-callframe-impl
06:25
Rewrite the injected printers to use Tcl's API usually, for better output. check-in: ac26b5fb55 user: dkf tags: not working, dkf-callframe-impl
2017-03-19
07:18
merge callframe branch; code is broken by this once again check-in: 021b966ed9 user: dkf tags: not working, dkf-callframe-impl
06:58
And getting the reference count handling right seems to make it work. check-in: 250e218e6a user: dkf tags: dkf-callframe-impl
2017-03-18
19:04
With a little help from that code, we've passed a test! More still to do... check-in: 15ed35ed76 user: dkf tags: not working, dkf-callframe-impl
17:38
Critical fix to implementation of offsetof method. check-in: c5454c155a user: dkf tags: trunk
17:36
Import interesting bits from dkf-global-read branch check-in: b32f55a148 user: dkf tags: dkf-callframe-impl
16:58
No longer crashes... check-in: 88d1d542ba user: dkf tags: not working, dkf-callframe-impl
2017-03-17
09:24
Threading the information more to where it belongs. check-in: 748311765b user: dkf tags: not working, dkf-callframe-impl
06:26
Starting to assemble the metadata during module initialisation. check-in: 06b1dc1092 user: dkf tags: not working, dkf-callframe-impl
2017-03-14
16:01
Merge trunk: peephole optimization of 'copy to variable from temp' Closed-Leaf check-in: 24c1c594d9 user: kbk tags: callframe
15:59
Peephole optimization for 'copy to variable from temp' check-in: 5d203eae6b user: kbk tags: trunk
03:37
Merge trunk - change to fix small bug that made copy propagation violate Conventional SSA check-in: ce19fcbe9a user: kbk tags: callframe
03:36
Fix typo that caused some killing assignments to be missed, violating Conventional SSA check-in: 1a0a2c2bdc user: kbk tags: trunk
01:34
Merge trunk: rename temps whose live ranges do not intersect, allowing for better copy propagation. check-in: 6ac5b3d569 user: kbk tags: callframe
01:33
Rename temps whose live ranges do not intersect, to allow for more aggressive copy propagation. check-in: 1a0e986689 user: kbk tags: trunk
2017-03-13
03:46
Merge trunk, to get code that has better source variable identification and control of live ranges. Fix a bug in 'widen' that crashed on 'return' if a return value needed to be widened. check-in: a63f47c0b2 user: kbk tags: callframe
02:52
Merge in changes to copy propagation that force source variable names to be preserved and ensure that at most one version of any value is live at any point in the program (the Conventional SSA property). check-in: 200cbdce60 user: kbk tags: trunk
02:47
Adjust copy propagation to kill the maximum number of copies that will still preserve the property that no variable's live range crosses a phi for another copy of that variable (Conventional-SSA form). Performance of 'impure' and the FlightAware benchmarks is now restored. Closed-Leaf check-in: 4cefa69f56 user: kbk tags: kbk-refactor-copyprop
2017-03-12
21:04
Rearrange copy propagation so that source variables are always identified. Still has a performance bug in that safe copies around 'instanceOf' and 'narrowToType' are not folded. check-in: c98c9ec9cc user: kbk tags: kbk-refactor-copyprop
09:00
Use more of Tcl's machinery. Actually do the variable placement. check-in: 3abe56cd62 user: dkf tags: not working, dkf-callframe-impl
2017-03-11
21:03
Preserve variable names through widening operations check-in: 85ac9e1d12 user: kbk tags: trunk
17:45
D'oh! Make the translator keep track of the name of the proc it's compiling! check-in: c2a8ca6a10 user: kbk tags: trunk
10:26
Working towards frame creation. check-in: 53a1ec6206 user: dkf tags: not working, dkf-callframe-impl
08:34
Add debug decls. check-in: 8abd4c694a user: dkf tags: not working, dkf-callframe-impl
08:17
Push the frame handling code through another level of the code generator. check-in: b4f6d411fd user: dkf tags: not working, dkf-callframe-impl
2017-03-05
20:25
Fix things that recent changes broke. check-in: a7112f0b47 user: dkf tags: minor change, not working, dkf-callframe-impl
12:24
merge callframe branch check-in: 25977eee2c user: dkf tags: dkf-callframe-impl
04:41
support for [regsub] check-in: 825e74e8e3 user: kbk tags: callframe
04:03
Add partial support for [lsort] check-in: c5ce4dc2c0 user: kbk tags: callframe
2017-03-04
20:55
Add support for [dict keys] and [regexp]. Move the store-load peephole optimization out of 'narrow' into 'cleanupCallFrameMotion' because doing it early misses opportunities to kill 'moveFromCallFrame' instructions. check-in: bf8242a174 user: kbk tags: callframe
17:06
Fix some overlooked callframe refs in 'returnCode' and 'returnOptions' check-in: 56516707ae user: kbk tags: callframe
16:37
Remove actual I/O from the callframe demo, and add missing tcl::dict::values to the builtin command table check-in: d619516e22 user: kbk tags: callframe
16:25
merge trunk; fix channel leak in 'parseBuiltinsTxt' demo check-in: 32ceda9d40 user: kbk tags: callframe
16:18
merge trunk Closed-Leaf check-in: 826deb31f4 user: kbk tags: kbk-impure
16:15
'invoke', by default, should result in FAIL STRING check-in: a487af5c87 user: kbk tags: trunk
16:12
Remove some FIXME comments from stuff that's fixed. check-in: dc0c58c363 user: kbk tags: trunk
2017-02-28
04:13
Add new files missing from previous commit check-in: 72d2924bfd user: kbk tags: callframe
04:07
Add a pass that removes 'moveToCallFrame' and 'moveFromCallFrame' for variables that are known not to be consumed by/produced in a given invocation. check-in: 4aac9ac511 user: kbk tags: callframe
2017-02-26
01:52
Merge trunk: implementations of 'resolveCmd' and 'originCmd' quadcodes. check-in: dc7a238870 user: kbk tags: callframe
01:51
Merge trunk: implementations of 'resolveCmd' and 'originCmd' quadcodes. check-in: 4239bec35b user: kbk tags: kbk-impure
01:48
Added implementations of 'resolveCmd' and 'originCmd' quadcodes (and test cases), which will be needed for callframe testing. check-in: 0c99bf7722 user: kbk tags: trunk
2017-02-25
18:02
Working towards a first implementation of callframes. check-in: 86ec362dc6 user: dkf tags: not working, dkf-callframe-impl
18:01
Type corrections in docs. check-in: ce1eada8ce user: dkf tags: callframe
15:49
More updates to my notes. check-in: bf86b5f2f4 user: dkf tags: callframe
2017-02-23
15:48
Updated the notes. check-in: 036dccb0dc user: dkf tags: callframe
2017-02-22
21:18
add table of builtin functions check-in: 0283626768 user: kbk tags: callframe
04:39
Answer some of Donal's questions in his 2017-02-11 note regarding callframes check-in: a1f5d76f1b user: kbk tags: callframe
04:34
Correct return type of 'invoke' operations in the presence of callframes check-in: 43ddda402f user: kbk tags: callframe
04:09
Fix a bug where the 'return' operation tried to widen the callframe rather than the return value check-in: bcbb7c22ef user: kbk tags: callframe
03:43
Merge current IMPURE branch check-in: 19123d148a user: kbk tags: callframe
03:40
Merge mark. check-in: fd465a19d6 user: kbk tags: kbk-impure
03:40
Merge changes for IMPURE parameters and to remove premature type unrolling. check-in: 685bd8a5fb user: kbk tags: trunk
03:39
Remove premature type unrolling from the specialiser. Add code to handle transmission of IMPURE parameters to compiled procedures. check-in: c83e14fa23 user: kbk tags: kbk-impure
2017-02-20
16:36
merge mark check-in: 077a7aaf73 user: kbk tags: kbk-impure
16:35
Merge changes to generate thunks for the EMPTY return type and to keep hexadecimal type codes from showing up in contexts where they're compared as strings. check-in: c5410ff1b2 user: kbk tags: trunk
16:34
Keep hexadecimal typecodes from leaking out of types.tcl, and add thunk generation for the EMPTY return type. (Allows for some additional demonstration codes.) check-in: a07514e624 user: kbk tags: kbk-impure
03:40
merge mark check-in: 2589e4c7f1 user: kbk tags: kbk-impure
03:40
Merge kbk-impure branch - basic block cloning is now implemented, giving significant speedup to cases like 'xsum2', 'msrange' and 'impure', where values of different types converge in the program. check-in: 053f97df49 user: kbk tags: trunk
03:14
deadcode: be much more aggressive about pruning worthless phi operations. check-in: daa3fdec8b user: kbk tags: kbk-impure
2017-02-19
22:47
Fix bugs in resolving interprocedural dependencies during loop unrolling check-in: 2352a59d7f user: kbk tags: kbk-impure
20:27
Avoid runaways by constraining how many copies may be introduced by splitting a basic block check-in: 54c6d0489d user: kbk tags: kbk-impure
2017-02-15
20:54
All test cases pass once more, but only by virtue of a hideous hack inside typeunroll to keep it below a certain number of splits. The five cases, lcmRange, linesearch::getAllLines2, qsort, wordcounter2 and xsum2 all appear to go into runaway behaviour, growing program size exponentially (and perhaps not even converging). check-in: 68b8d45ad1 user: kbk tags: kbk-impure
03:57
NOT WORKING: Fix bugs to make a few more test cases compile check-in: 4bdc54e7fd user: kbk tags: kbk-impure, not working
2017-02-13
03:27
Allow a few more procs from ::linesearch check-in: 13076603e0 user: kbk tags: kbk-impure, not working
02:58
NOT WORKING: continued work on loop unrolling for data type analysis. Passes many more tests, and speeds up 'impure' by 30x check-in: 97d781d5db user: kbk tags: kbk-impure, not working
2017-02-12
04:06
NOT WORKING: Further debugging of node splitting check-in: e2dd4e6ce1 user: kbk tags: kbk-impure, not working
2017-02-11
13:21
Added some notes on implementing a CALLFRAME. check-in: 2cdefc473f user: dkf tags: callframe
2017-02-08
01:35
NOT WORKING: considerably more work on node splitting, but not finished. check-in: 90db1fcf7d user: kbk tags: kbk-impure, not working
2017-01-25
04:04
Basic block splitting - identify the initial sets. Much more work to go here! check-in: 0618577d44 user: kbk tags: kbk-impure
01:35
merge further work on IMPURE handline check-in: 2eaa1486ab user: kbk tags: callframe
2017-01-24
02:04
Merge mark check-in: 231dad0bc1 user: kbk tags: kbk-impure
02:03
Merge in changes to eliminate the BOOLWORD data type in favour of IMPURE BOOLEAN check-in: c9dfa64f05 user: kbk tags: trunk
02:00
Remove the BOOLWORD data type - it's just an IMPURE BOOLEAN check-in: b0fee59756 user: kbk tags: kbk-impure
2017-01-22
06:37
oops: remove console dribble check-in: 3dbb7d1baf user: kbk tags: minor change, kbk-impure
06:23
Separate the string-compare and numeric-compare parts of comparison operators, and correct the type errors that arise. check-in: 46cc1a89c6 user: kbk tags: kbk-impure
2017-01-21
19:17
Merge mark check-in: cb098090c6 user: kbk tags: kbk-impure
19:17
Merge in the implementation of IMPURE objects. check-in: a89a734883 user: kbk tags: trunk
19:14
Complete (?) the implementation of the 'IMPURE' type. Restore 'uplus', which must have the side effect of purifying an impure argument. Suspect that there may be memory leakage in the 'impure' handling? check-in: 3568a798b4 user: kbk tags: kbk-impure
17:40
Now [uplustest] runs, but fails as unary plus semantics not right yet. check-in: 4d48a00e0e user: dkf tags: kbk-impure
2017-01-19
09:03
Work around incompatibility with some revisions of Tcl 8.6. check-in: d430ba6853 user: dkf tags: minor change, kbk-impure
2017-01-17
03:49
Remove a little bit of console dribble, and add the callframe to 'return' operations. check-in: 87f91db133 user: kbk tags: callframe
2017-01-16
19:48
merge kbk-impure check-in: 5c0d321e61 user: kbk tags: callframe
19:47
merge trunk check-in: efcb016e7f user: kbk tags: kbk-impure
2017-01-14
10:12
merge trunk check-in: 8bbe3907b7 user: dkf tags: kbk-impure
2017-01-09
04:22
merge trunk; improve tracing; make quadcode.tcl try to find out information about builtins check-in: 8e4200acb3 user: kbk tags: callframe
03:28
SSA generation must not fail in the presence of unreachable code. check-in: 901523ebae user: kbk tags: kbk-impure
2017-01-08
02:04
Merge mark check-in: c042455d72 user: kbk tags: callframe
02:03
Merge trunk check-in: d91c391c1d user: kbk tags: kbk-impure
01:34
merge trunk check-in: ca2e310318 user: kbk tags: kbk-impure
2017-01-07
19:19
Add store-load peephole optimization to the callframe management check-in: 996ca57a46 user: kbk tags: callframe
2017-01-05
04:32
Initial sketch of callframe management at 'invoke' - not working, but at least shows the opcodes check-in: 02f28f9bf9 user: kbk tags: callframe
2017-01-04
01:59
Add notes about how constant jumps SHOULD be handled. check-in: 0a03f41f22 user: kbk tags: kbk-impure