# Copyright (C) 2005, The Perl Foundation. # $Id: ChangeLog 12828 2006-05-30 02:34:44Z coke $ - 2005-12-07 particle * moved imcc/ directory to compilers/imcc/ - 2003-11-03 Bernhard Schmalhofer * Migrate TestCompiler.pm to Parrot/Test.pm - 2003-11-03 melvin * move register allocation and spill related code to reg_alloc.c * cleanup some routine names * make imc_compile_unit the main entry point from parser -> compiler * Add some initial framework for collecting all compilation units before compiling or emitting anything. - 2003-10-13 leo * report error location inside macros too * allow macro defintions outsied of subs - 2003-09-29 leo * new .nci_call directive * updated docs/calling_conventions for NCI * the return label after a pcc/nci_call is now optional * check param count of unprototyped P params too - 2003-09-19 sfink * version number change to 0.0.11.0 for parrot 0.0.11 release - 2003-08-23 leo * start moving globals tointerpreter->imcc_info - 2003-08-23 leo * REMOVE THE DEPRECATED NESTED SUBS FEATURE. All code must be contained now in .sub/.pcc_sub/.emit blocks. For PASM source files an .emit/.eom is provided by the lexer. - 2003-08-22 leo * HLL line and file information. The lexer parses now: #line\s(\d+)\s"([^"]*)" setfile\s+"([^"])*" setline\s+(\d+) as HLL file/line information. The setline and setfile opcodes are *not* emitted. This information will go into some debug segment. - 2003-08-12 leo * lexer: enable macros for PIR parsing mode - 2003-08-11 leo * PCC: approaching life analysis for subroutine in/out variables this breaks some imcpasm tests - 2003-08-10 leo * PCC: experimental tail call optimization with -Oc - 2003-08-09 leo * PCC: fix nested subs (preserve ret continuation) * PCC: fix multiple return blocks * SYNTAX: NEW: unless arg1 relop arg2 goto label works like if (with reversed relop), so that $HL can directly translate: if (a < b) {block} [skip:] to unless a < b goto skip block ... skip: - 2003-08-08 leo * try_find_op: e.g. add_n_i_n => add_n_n_i - 2003-08-02 leo * DEPRECATE NESTED SUBROUTINES and CODE OUTSIDE OF SUBS * fix CFG for pcc invoke * use want_regno in register assignments for -Oc * pcc_optimize() experimental post_optimizer -Oc - 2003-08-01 leo * version 0.0.10.3 * unprototyped subroutines now check the amount and type of parameters against their .param definitions at runtime * TestCompiler.pm: capture stderr too * added coroutine code courtesy of Kenneth A Graves s. t/syn/pcc.t for an example and #23186 for a description * if a pcc sub calls another sub (or it yields), the passed registers (I5...) are not used as parameters dirctly. * emit savetop/restoretop in a yield block - 2003-07-30 leo * PCC stuff: * prototyped calling sequence * overflow array * put all in a separate file: pcc.c - 2003-07-29 leo * version 0.0.10.2 * first try on implementing PCC from docs/calling_conventions.pod - no optimizations - only upper half of registers are preserved - s. t/imcpasm/pcc.t for generated code * ignore text between =$pod_marker and =cut - 2003-07-09 leo * version 0.0.10.1 * -E, --pre-process-only - 2003-07-06 leo * new instruction: $Preg = new classname, $Pinitializer - 2003-07-03 leo * switch to PASM/PIR mode, when reading .pasm/.imc include files * search runtime/parrot/include too for includes - 2003-07-02 leo * build imcc as parrot * bump version ------------------- * various fixes * newsub opcode fixup * constant_propagation (-O2) (by Matt Fowles) - 2003-02-22 leo / Juergen Boemmels * correct line numbers for debugger WRT macros (thanks to Juergen Boemmels) * first try to get effects of clear?, pop?, restoreall ops into register life info - 2003-02-21 leo * version 0.0.9.15 * opimized some ugly quadratic timings in cfg building and branch optimizations by: * build bb_list earlier and use basic blocks This improves e.g. -O2 t/op/stacks_33 from >1m to 2s * absolute experimental and early stages for using imcc as JIT optimizer (-Oj) this is broken WRT rx_ops, which have an inout INT param and can branch, and WRT NCI/invoke and probably a lot more. - 2003-02-20 leo / Juergen Boemmels * version 0.0.9.14 * macro preprocessor - thanks Juergen Boemmels s. docs/macros.pod * lot of constants optimizations, like add I0, 10, 20 * reorganized optimization levels * run allocate for PASM code too, if optimizing - 2003-02-08 leo * changed branch_branch to optimize a sequence of absolute branches to branch to the final target * dead blocks removal * unreachable lines removal ***************************************************** make the long announced rule fix: o global labels MUST start with an underscore o labels of bsr calls are global o labels of set_addr op are global o local labels SHOULD NOT start with an underscore ***************************************************** - 2003-02-08 leo * version 0.0.9.13 * pass -Ox on to tests * remove dead code * remove branch to next ins * fix use_count for invoke and .local vars * don't remove unused global labels - 2003-02-07 leo * first step for bsr handling in the CFG local bsrs (target in the same compilation unit) can preserve registers. s. docs/operation.pod - 2003-02-07 leo * version 0.0.9.12 * changed -d (--debug) options and made more granular debug output. s. docs/running.pod - 2003-01-31 leo * version 0.0.9.11 * changed the until now global Parrot_Interp * to a local one This implies: ***************************************************** CHANGES in many function prototypes, which now take a interpreter param ***************************************************** - 2003-01-20 leo * version 0.0.9.10 * the -r command line option is now optional, default mode now is running the program, except when a -o output is given * the -c option now means: assume PBC on stdin and run it. * imcc_compile * generate file/line info for programs and compile ops - 2003-01-14 leo * version 0.0.9.9. * fix const integer multi keys * recognize op_fullnames * allow reserved word (i.e. parrot ops) as labels - 2002-12-12 leo * version 0.0.9.8 * .const directive * identifier and const scope - 2002-12-09 leo * version 0.0.9.7 * docs/*.pod * nested subs * _global label * imcpasm tests - 2002-12-07 leo * version 0.0.9.6 * split imcc.y -> main.c parser_util.c * INS takes now an additional param "emit" * make namespace running - 2002-12-xx * added t/harness stuff * SYNTAX change: .sub / ret => .sub / .end - 2002-09-15 leo * fixed GC bug, BUFFER_constant_FLAG! imcc runs now all perl6 tests like parrot - 2002-09-12 leo * pbc.c / packout.c / perl6 Write .pbc files. * imcc.y / imcc.l Allow mixed usage of $I0, I0, and _Lexicals * imcc.y / symreg.[ch] / instruction.c / imc.c Implement key structures P["key"; 0; $I42 ] - 2002-09-11 leo * removed anyop.c/h. If we need more then one lib the core should provide this functionality. * parrot core proposed changes WRT op_lib, op_code() lookup, and core_ops organization including patches for prederefencing (ok now). - 2002-09-10 leo Bigger changes to allow running PBC inside imcc, no external assembler, no parrot{,.exe} needed anymore. $ perl6 --test -r -RG runs _all_ perl6 tests w/o complaints Changes in execution sequence: * imcc.l - expect_eol is gone - expect_pasm, - STRINGCONSTANT patch from list - .emit reworked * imcc.y - infrastructure for parsing key structures - rewrote all instructions to go through iANY (except some pseudos like labels) - rewrote iNEW + new macro helper - opfullname reworked - iANY implement keyed format P[] - moved branch flags to iANY - changed many %types from SymReg * to Instructions *, what they actually are. - emit is now a sub like token - added pasm* syntax - nls between subs - keylist [ key ; key ] - use parrot compatible commandline options (long options to come later) - additionally: -G turn off GC -c write .pbc -r run PBC -o outputfile (can't use second file as output, this is a run argument for the first). * symreg.h - reorganized VT flags - ->nextkey field - low level hash functions taking a hash as param too * symreg.c - mk_pasm_reg, + low level funcs - check for uniq labels / subs - keys structures * instructions.c / .h - abstraction of emit_xx interface throug emitters[] - deprecate _mk_instruction (no opcode lookup!) * debug.c - add opnum and opsize to dump_instructions * imc.c, optimizer.c - use iANY * NEW pbc.c pbc,h - generate PBC in memory (a unpacked packfile) This uses currently existing structures, like SymReg to hold various information, so r->color might be e.g. a index into the constants table. UTSL for more * GONE anyop.c / .h Many thanks to Sean, for providing these two files, plus the first iANY instruction, this was really the kick, to get above running. 2002-09-04 leo * pbc.c - start coding, first 3 liner get's executed in imcc - link to libparrot$(A) * symreg.c - data members for parrot ops * Makefile, imcc.y, anyop.c - use parrot structures for anyop 2002-09-04 leo * cfg.c - reworked find_basic_blocks - loop_info: remember size, depth... - dead code detection * instructions.h - removed redundant ->basic_block * optimizer.c - loop_optimization - branch_branch * symreg.c - detect duplicate labels 2002-09-02 leo * overall - cleanup, memory freeing - warning/info/fatal code for diagnostics - include file cleanup * anyop.c - integrated GC patch * cfg.c - find_basic_blocks() 2. branch of two consecutive - propagate_alias - remember loop_info * debug.c - fatal(), warning(), info(), ... - more info in dump_instructions() - dump_loops - more info in dump_symreg() * imc.c - register usage statistic - rearranged alloc() loop - separated reglist out of interference_graph - build_interference_graph() splitted and optimized - use always life_info - much simpler spill(), no additional symbols needed * imcc.l - {EOL} code for CR/LF systems (untested) * imcc.y - total rewrite of functions, using anyop where possible - cleanup - commandline switches --help, --version, -O * instructions.c - use a linked list instead an array of ins - allow 16 registers per instruction - delete_ins() - rewrote emit() * instructions.h - rearranged INSTYPE flags - ins->op * sets.c - bugfix und cleanup - set_clear() * symreg.c - cleanup - free_sym() * symreg.h - use_count, lhs_use_count * optimizer.c (NEW) - if_branch(): if x, L1 / branch L2 / L1: => unless x, L2 / L1: - unused_labels() removal 2002-09-02 leo * ChangeLog startet after parrot 0.0.8 release above summarizes all changes from ~mid 0.07