HTTPS clone URL
Subversion checkout URL
7.0.2 7.3.0 7.7.0 240/fix_cond_eval 714/scheduler_bug 777/no_pretty_debug Util/tt_1891_complex_trig avl_string_cache ayardley/documentation_revisions bacek/unmerge_context benabik/pbc_gz breed cached_eh checkdepend_pmcs chromatic/early_pmc_gc chromatic/early_pmc_mark_throws_exception chromatic/lorito_dynops cmp_pmc coke/rm_pasm constant_unfolding cyg-desparse-gh888 eval_pmc exceptions_refactor_merge exceptions_refactor fix_hll_mmd gc_ms2_sf gc_tuning gcc_defines gci_fill_params_reduce gci_fill_params_reduce2 gci_tt1199 gerd/JSON_nqp gerdr/socket-readline-gh944 gh-pages gh346 gh798_embed_api_green_threads gh956_unicode_sprintf gsoc_instrument gsoc_nfg gsoc_past_optimization hints_more_verbose http-daemon-gh898 inside-out-ctx jit_prototype kid51/release_update_version kill-useless-defaults lean leto/pbc_gz libffi-gh1082 lorito m0-debugger m0-typed-deref m0-unified-memory-spec m0 manual_args master mem_limit mls/new-autoclose native_attrs native_pbc2 new-layout new-packfile-api notfound/declaration-after-statement nqp-p6 nqp_pct nwellnhof/compiler_flags ops2c-necromancy opsc_lasm opsc_llvm pasm-serializer pcc_reorder_signatures pcc_reorder pct_winxed pdds_restart pge_no_namespace_methods pmc_i_ops pmc_pct ptc/pod_checker-gh1053 ptc/rm_morph-gh372 remove_sub_flags repcc rurban/JSON_nqp rurban/asctime_r-gh858 rurban/bitwise_uni-gh848 rurban/broken-sprintf-uplus-gh832 rurban/darwin-build-gh1096 rurban/fix-gc-thr-gh880+gh875 rurban/fix-gc-thr2 rurban/gc-precise rurban/gcms-numfree rurban/gh1017-proxy-get_id rurban/html-gh667 rurban/jit rurban/json-utf16-gh845 rurban/lexqnames-gh1095-dev rurban/morph-gh372 rurban/object-subclass-gh1010 rurban/ops2c-lines-gh641 rurban/ops2c_llvm rurban/pasm_out-gh989 rurban/pasm_out rurban/pgegrep rurban/relocatable-gh800 rurban/socket-read2-gh909 rurban/sockopt-gh909 rurban/task_interp rurban/thread-lock-gh1187 rurban/threads_array_heap rurban/va_arg-float-gh828 rurban/6model separator_fixes shallow_clone shims sixparrot-nci sixparrot smoke-me/JSON_nqp1 smoke-me/cast-align-gh1201 smoke-me/coro-return-gh1106 smoke-me/darwin-rpath-gh883 smoke-me/env-gh1191 smoke-me/gc-ms-default smoke-me/gc-ptrdiff-gh1200 smoke-me/release_manager_guide smoke-me/slow-mod smoke-me/stringbuilder-gh1123 smoke-me/struct_debug-gh1195 smoke-me/win64-gh1203 soh-cah-toa/hbdb soh-cah-toa/odius soh-cah-toa/podds soh-cah-toa/tt-2155 soh-cah-toa/tt1215 splint-quiet substr_eq_at tadzik/tt-2101-fix tailcall_new_gh596 tied-cstring tt389_fix tt855_debugging_options tt1516_builddir_option tt2094 tt2103_cmp_pmc unshared_buffers vtable_various whiteknight/foldcase_str whiteknight/gc_finalize whiteknight/gc_precise whiteknight/gc_two_stage_sweep whiteknight/gh_663 whiteknight/io_userhandle whiteknight/io_vtable_lookup whiteknight/pipe_pmc whiteknight/rm_pasm2 whiteknight/userhandle win32_64_fixes zeroargs_subs_checking
Nothing to show
Nothing to show
Fetching latest commit...
Cannot retrieve the latest commit at this time.
|Failed to load latest commit information.|
IMCC imcc is the Intermediate Code Compiler for Parrot. The language it compiles is currently termed Parrot Intermediate Language (PIR). Why? Writing a compiler is a large undertaking. We are trying to take some of the load off of potential language designers, including the designers of the Perl6 compiler. We can provide a common back-end for Parrot that does: Register Allocation and Spillage Constant folding and expression evaluation Instruction selection Optimization Bytecode generation This way, language designers can get right to work on Tokenizing, parsing, type checking AST/DAG production Then they can simply feed PIR to imcc which will compile directly to Parrot bytecode. So far, all the compiler does is register allocation and spilling. I like Steve Muchnick's MIR language, and I'm taking a few things from it. I expect the IR compiler to be FAST, simple, and maintainable, and never develop featuritis; however I want it to be adequate for all languages targeting parrot. Did I mention that it needs to be FAST? Register Allocation The allocator uses graph-coloring and du-chains to assign registers to lexicals and symbolic temporaries. One weakness of the allocator is the lack of branch analysis. A brute force method is used in the du-chain computation where we assume any symbol is live from the time it was first used until either the last time it was used or the last branch instruction. This is being replaced with directed graphs of basic blocks and flow analysis. Optimization We break the instructions into a directed graph of basic blocks. The plan is to translate to SSA form to make optimizations easier. Why C and Bison? Until Perl6 compiles itself (and does it fast), a Bison parser is the easiest to maintain. An additional, important benefit, is C-based parsers are pretty darn fast. Currently assembling Parrot on the fly is still relatively slow. Instructions not known to imcc are looked up in parrot's op_info_table and must have the proper amount and types of arguments. Please mail email@example.com with bug-reports or patches. Original Author: Melvin Smith <firstname.lastname@example.org>, <email@example.com> Contributing Authors: Angel Faus <firstname.lastname@example.org> ... CFG, life analysis Sean O'Rourke <email@example.com> ... anyop, iANY Leopold Toetsch <firstname.lastname@example.org> ... major rewrite numerous bugfixes/cleanup/rewrite optimizer.c run parrot code inside imcc Juergen Boemmels <email@example.com> Macro preprocessor