Commit Graph

1302 Commits (revert-2214-feature-commandline-documentation)

Author SHA1 Message Date
Slava Pestov 5ecd2b61c7 compiler.cfg: more silly optimizations 2010-05-14 18:37:09 -04:00
Slava Pestov 1a61c50896 compiler.cfg.instructions: change vreg-insn from a mixin into a superclass 2010-05-14 18:37:09 -04:00
Slava Pestov 6d30bb8bf4 compiler.cfg.linear-scan: pointless optimizations 2010-05-14 18:37:08 -04:00
Slava Pestov 291543c300 compiler.cfg.ssa.live-ranges: clean up 2010-05-14 18:37:08 -04:00
Slava Pestov d1e422c981 compiler.cfg.alias-analysis: simplify and speed up 2010-05-14 18:37:07 -04:00
Slava Pestov 5a67711bfd compiler.cfg: use x86 TEST instruction to optimize 'bitand 0 =' 2010-05-14 18:37:06 -04:00
Joe Groff 465a1673eb compiler.cfg.intrinsics.simd: mod shuffle indices for shuffle-2-vectors-imm intrinsic so they wrap like a real instruction would 2010-05-14 01:20:05 -07:00
Joe Groff 9f9e145819 math.vectors.simd.intrinsics: (simd-vshuffle2-elements) intrinsic that creates a vector by selecting elements from two input vectors. use ##shuffle-vector-halves-imm to implement for double-2s with SSE 2010-05-14 01:16:29 -07:00
Joe Groff 3766abd65e compiler.cfg.instructions: ##shuffle-vector-halves-imm insn to map to SSE's two-input SHUFPS/SHUFPD 2010-05-14 00:20:21 -07:00
Slava Pestov bb87d124c1 compiler: small fixes and cleanups 2010-05-13 02:48:20 -04:00
Slava Pestov db2db6a1a6 compiler.cfg.builder.alien: fix for x86-32 2010-05-12 18:07:11 -04:00
Slava Pestov 42b0d456cd Refactor x86-32 stack cleanup logic 2010-05-12 02:09:11 -04:00
Slava Pestov f89b85db7b Temporary fixes for x86-32 until FFI boxing is rewritten 2010-05-12 01:41:49 -04:00
Slava Pestov 0cde5c8fb5 Eliminate compiler.alien 2010-05-11 23:24:47 -04:00
Slava Pestov ee0640f176 Move flatten-c-type to death row so that it can be executed in part 5 2010-05-11 22:26:31 -04:00
Slava Pestov eb802208d1 FFI rewrite part 4: parameter and return value unboxing redesign 2010-05-11 19:11:44 -04:00
Slava Pestov 45689dbfe6 compiler: simplify ##unbox-small/large-struct by emitting an ##unbox-any-c-ptr first 2010-05-10 01:38:34 -04:00
Slava Pestov 4478c3a51a FFI rewrite part 3: eliminate ##push-context-stack and ##pop-context-stack 2010-05-10 00:46:29 -04:00
Slava Pestov 7316d41226 FFI rewrite part 2: use ##peek and ##replace instructions to access stack 2010-05-09 23:26:43 -04:00
Slava Pestov c211c3e84e FFI rewrite part 1: split up ##alien-invoke and friends into smaller instructions 2010-05-09 21:36:52 -04:00
Slava Pestov f988dad79c compiler.cfg: add ##load-float instruction for single precision floating point constants 2010-05-07 18:26:00 -04:00
Slava Pestov 982e704626 compiler.cfg.linear-scan: clean up clobber-insn handling 2010-05-07 18:22:35 -04:00
Slava Pestov 627295f094 Language change: tuple slot setter words with stack effect ( value object -- ) are now named FOO<< instead of (>>FOO) 2010-05-06 17:21:02 -04:00
Slava Pestov 32ab6ca8d8 compiler.cfg.intrinsics: may as well use cell-size stores instead of 32-bit stores when initializing byte arrays 2010-05-05 13:23:00 -04:00
Slava Pestov 07092df20b compiler.cfg.intrinsics.allot: fix <byte-array> intrinsic for real. Don't ever check in code without testing it 2010-05-05 13:17:20 -04:00
Slava Pestov 0dab9c7f9d compiler.cfg.intrinsics.allot: <byte-array> intrinsic was writing past the end of the array and this was causing problems for scheduling 2010-05-05 02:17:57 -04:00
Slava Pestov e763c74096 More FFI cleanups 2010-05-05 01:13:45 -04:00
Daniel Ehrenberg 24ad579631 Merge branch 'master' of git://factorcode.org/git/factor 2010-05-04 09:52:34 -05:00
Daniel Ehrenberg 4f66732c36 Fixing scheduling for compiler changes 2010-05-04 09:48:16 -05:00
Slava Pestov 572d7f77f8 compiler.cfg.value-numbering: don't use complex addressing modes unless architecture supports it 2010-05-04 05:46:21 -05:00
Slava Pestov ad69052a1a compiler.cfg.value-numbering: fix typo in unit test 2010-05-03 22:11:29 -04:00
Daniel Ehrenberg b02208ceb2 Some fixes to merge scheduling 2010-05-03 17:54:46 -05:00
Daniel Ehrenberg 277705345f Merge branch 'master' of git://factorcode.org/git/factor into s3
Conflicts:

	basis/compiler/cfg/finalization/finalization.factor
2010-05-03 17:29:03 -05:00
Slava Pestov 4352902bb6 compiler.cfg.empty-blocks: remove unused pass 2010-05-03 18:23:54 -04:00
Slava Pestov ca4f442eaa compiler.cfg.alias-analysis: storing a reference into an object now merges the reference's alias class with the heap alias class 2010-05-03 18:20:28 -04:00
Daniel Ehrenberg 5509604ffe Merge branch 'master' into s3
Conflicts:

	basis/compiler/cfg/optimizer/optimizer.factor
2010-05-03 17:19:28 -05:00
Slava Pestov 58e4381eb1 compiler: new "binary literal area" at the end of a word's machine code stores constant floats and SIMD vectors; this allows ##load-reference/##load-memory fusion to be performed on x86-64, with a RIP-relative address reaching the data; also simplifies VM since custom relocation types used by the previous 32-bit-only optimization are no longer needed 2010-05-03 17:34:35 -04:00
Slava Pestov 9b4135713e compiler.cfg.representations: make sure that immediate operands fit 2010-05-03 17:34:34 -04:00
Slava Pestov 86548320eb compiler.cfg.value-numbering: fix unit test for 64-bit 2010-05-03 17:34:33 -04:00
Slava Pestov f5c5d8b44c compiler: remove flat machine representation and generate code directly from the CFG 2010-05-03 17:34:32 -04:00
Slava Pestov 5236f327ba compiler.cfg.debugger: add ssa. word to print IR before representation selection runs 2010-05-03 17:34:31 -04:00
Slava Pestov 7f6ae34d72 Updating tests for recent compiler changes 2010-05-03 17:34:30 -04:00
Slava Pestov 38bafd2be8 compiler.cfg.linear-scan.assignment: spill slot representation logic was backwards, just like Factor 2010-05-03 17:34:29 -04:00
Slava Pestov 428ba9fd0f compiler.cfg: fuse ##load-integer/##load-reference into ##replace to form ##replace-imm 2010-05-03 17:34:28 -04:00
Slava Pestov 9788323d25 compiler: add ##load-vector instruction to avoid wasting a temporary register on x86-32 2010-05-03 17:34:28 -04:00
Slava Pestov 5979fe7f41 compiler.cfg.copy-prop: optimistic copy propagation 2010-05-03 17:34:26 -04:00
Slava Pestov e90712b1ed compiler.cfg: cleanup 2010-05-03 17:34:26 -04:00
Slava Pestov df86d1341f compiler.cfg: clean up ##phi literals in tests 2010-05-03 17:34:24 -04:00
Slava Pestov ffd1844d52 compiler.cfg.linear-scan: clean up spill slot assignment 2010-05-03 17:34:24 -04:00
Slava Pestov 65f86bfce7 compiler.cfg.ssa.detruction: coalesce different representations in more cases 2010-05-03 17:34:22 -04:00
Slava Pestov ce73031ec3 compiler.cfg.alias-analysis: write unit tests and fix redundant store elimination 2010-05-03 17:34:22 -04:00
Slava Pestov 33eb15bf44 compiler.cfg.debugger: clean up and make it more flexible 2010-05-03 17:34:22 -04:00
Slava Pestov 43f269e4eb Register allocation now uses SSA properties to coalesce values with different representations 2010-05-03 17:34:20 -04:00
Slava Pestov 9b34a4a054 compiler.cfg: remove unused 'reps' slot from compiler.cfg, and re-organize things in preparation for SSA register allocation 2010-05-03 17:34:18 -04:00
Slava Pestov 43fc230c69 compiler.cfg.linear-scan: cleanups 2010-05-03 17:34:18 -04:00
Slava Pestov d23bb19b55 Code cleanups 2010-05-03 17:34:17 -04:00
Slava Pestov c55a6bb385 compiler.cfg.gc-checks: move phi instructions into GC check block, to ensure correct behavior 2010-05-03 17:34:17 -04:00
Slava Pestov 95ff5ffe51 New GC checks work in progress 2010-05-03 17:34:16 -04:00
Slava Pestov db7403d697 compiler.cfg.linear-scan.resolve: fix incorrect behavior when one physical register is used with several representations in the same register class 2010-05-03 17:34:14 -04:00
Slava Pestov 51b13ce373 compiler.cfg.linear-scan: don't insert a _reload if the register is going to be overwritten anyway 2010-05-03 17:34:14 -04:00
Slava Pestov a9ccfa8f05 strings: move string-nth primitive out of the VM and into the library 2010-05-03 17:34:12 -04:00
Slava Pestov 458fd007be compiler.cfg.representations: simplify a little 2010-05-03 17:34:11 -04:00
Slava Pestov ed8c32989f compiler.cfg.representations: add peephole optimizations for integer comparisons 2010-05-03 17:34:11 -04:00
Slava Pestov 0f5d9974a0 compiler.cfg.representations: fix various bugs 2010-05-03 17:34:11 -04:00
Slava Pestov 456743a6ce compiler.cfg.representations: add more peephole optimizations to reduce fixnum tagging and untagging overhead 2010-05-03 17:34:11 -04:00
Slava Pestov a141df595b compiler.cfg.value-numbering: more cleanups 2010-05-03 17:34:10 -04:00
Slava Pestov ef8094e3b3 compiler.cfg.value-numbering: identify VNs with their representative vregs, eliminating the vn>vreg hash 2010-05-03 17:34:10 -04:00
Slava Pestov edaf59bf46 compiler.cfg.value-numbering: maintain a VN to instruction mapping. This eliminates all instances of expression inspection, allowing the auto-generated expression classes to be removed 2010-05-03 17:34:09 -04:00
Slava Pestov f548a08637 compiler.cfg.value-numbering: remove constant -vs- literal distinction 2010-05-03 17:34:09 -04:00
Slava Pestov 9cea3f2c93 compiler.cfg.ssa.liveness: remove unused pass 2010-05-03 17:34:08 -04:00
Slava Pestov 732f57f31d compiler.cfg.builder: fix unit tests 2010-05-03 17:34:08 -04:00
Slava Pestov f14f2cbdab compiler.cfg.value-numbering: merge 'simplify' pass into 'rewrite' 2010-05-03 17:34:08 -04:00
Slava Pestov 378c2b2a46 compiler.cfg: add ##load-memory and ##store-memory instructions implementing complex addressing modes, and associated value numbering optimizations 2010-05-03 17:34:07 -04:00
Slava Pestov b8d556514c compiler.cfg.value-numbering: add slot addressing rewrite rule to eliminate a redundant ##add-imm from array-nth and set-array-nth 2010-05-03 17:34:07 -04:00
Slava Pestov 2475699736 compiler.cfg: more flexible addressing for ##slot and ##set-slot 2010-05-03 17:34:06 -04:00
Slava Pestov 913b95192e compiler.cfg: merge all alien accessors into ##load-memory-imm and ##store-memory-imm 2010-05-03 17:34:06 -04:00
Slava Pestov 279eb461b1 compiler.cfg: remove ##set-string-nth-fast instruction since it can be expressed just as efficiently using other instructions 2010-05-03 17:34:04 -04:00
Slava Pestov efd2a80d98 compiler.cfg.value-numbering: fix compile error 2010-05-03 17:34:04 -04:00
Slava Pestov e95cd256ec compiler.cfg.representations: peephole optimizations are used to simplify the case where the input to a ##shl-imm or ##sar-imm needs to be untagged 2010-05-03 17:34:03 -04:00
Slava Pestov 2ce926594d compiler.cfg.value-numbering: new optimizations; reassociation for shifts and redistribution for shifts/multiplies over additions/subtractions 2010-05-03 17:34:02 -04:00
Slava Pestov 2ca8d543f1 compiler.cfg.instructions: more typos 2010-05-03 17:34:02 -04:00
Slava Pestov 82fb1879af Debugging untagged fixnums 2010-05-03 17:34:02 -04:00
Slava Pestov 5d3a7a7362 Untagged fixnums work in progress 2010-05-03 17:34:02 -04:00
Slava Pestov 503c0fcfde compiler: Start using tagged-rep for stuff, and split up compiler.cfg.representations into several sub-vocabularies 2010-05-03 17:34:01 -04:00
Slava Pestov 2517b2fc2b compiler: combine ##load-constant followed by ##alien-double into a ##load-double on x86-32, saving an integer register 2010-04-18 21:42:45 -05:00
Slava Pestov 8f0739197e compiler.cfg: fix some bugs introduced by the ##compare-imm fusion patch 2010-04-18 21:42:45 -05:00
Slava Pestov 2aaf24412a compiler: change how 'f' is represented in low level IR to simplify some code, and fuse a ##load-constant of a word with a ##compare into a ##compare-imm on x86-32. This eliminates a spill from binary-search 2010-04-18 21:42:45 -05:00
Daniel Ehrenberg fbb1eb98a9 Improving dependence graph correctness 2010-04-18 19:59:52 -05:00
Daniel Ehrenberg 6892bac1ca Making some scheduling assertions only run in unit tests 2010-04-15 17:36:43 -05:00
Daniel Ehrenberg 74de7d0e2a Merge branch 'master' of git://factorcode.org/git/factor into s3 2010-04-15 17:28:53 -05:00
Joe Groff 3e0d86f355 Merge branch 'master' of git://factorcode.org/git/factor into abi-symbols
Conflicts:
	basis/compiler/tests/alien.factor
2010-04-06 12:30:15 -07:00
Daniel Ehrenberg aae69daa96 Fixing USING: line of scheduling to remove unnecessary vocabs 2010-04-05 15:45:06 -05:00
Daniel Ehrenberg e22f66daf4 Scheduling has to come before representation selection, since the latter inserts memory operations 2010-04-05 00:24:12 -05:00
Daniel Ehrenberg 601b6f8457 Merge branch 'master' of git://factorcode.org/git/factor into s3 2010-04-04 19:43:15 -05:00
Slava Pestov eceabbc57e compiler: new set-special-object intrinsic; more efficient special-object intrinsic 2010-04-01 20:09:14 -04:00
Joe Groff 65c3259761 "cdecl" -> cdecl 2010-03-31 19:20:35 -07:00
Slava Pestov d98e752199 compiler: add intrinsic for context-object primitive 2010-03-27 02:56:11 -04:00
Daniel Ehrenberg 31f23c8eba Scheduling uses sets where appropriate 2010-03-24 10:38:52 -04:00
Daniel Ehrenberg 12db8a6c77 Merge branch 's3' of git://github.com/littledan/Factor into s3 2010-03-23 16:46:28 -04:00
Joe Groff 1d4d6f4ce8 factor code duplication in compiler.cfg.intrinsics.simd.backend 2010-03-20 10:57:04 -07:00
Joe Groff f82a368602 compiler.cfg.intrinsics.simd.backend: eliminate duplicated work done on successful insn sequence 2010-03-20 02:51:49 -07:00
Joe Groff ee4913702f compiler.cfg.intrinsics.simd.backend: use less grotesque metaprogramming to determine simd instruction sequences 2010-03-20 02:16:50 -07:00
Daniel Ehrenberg 248730d39f Cleaning up compiler.cfg.ssa.construction 2010-03-17 20:12:10 -04:00
Daniel Ehrenberg 512fe14e4e Merge branch 'bags' of git://github.com/littledan/Factor
Conflicts:

	basis/compiler/cfg/ssa/construction/tdmsc/tdmsc.factor
	basis/furnace/auth/auth.factor
	basis/stack-checker/backend/backend.factor
2010-03-16 13:28:00 -04:00
Joe Groff 191ac353fd generalize stack effects so we can bootstrap with the stricter stack effect checking 2010-03-08 23:38:10 -08:00
Joe Groff af57d4dfa9 fix ... in compiler.cfg.linearization 2010-03-05 14:27:58 -08:00
Daniel Ehrenberg e3481a7ed7 compiler.cfg.def-use uses sets 2010-03-02 19:23:34 -05:00
Daniel Ehrenberg 1e5f202998 Maing vocabs.hierarchy use sets; modifying alias analysis's use of sets 2010-02-28 22:55:22 -05:00
Daniel Ehrenberg 1217dc9c6e Making alias analysis use sets 2010-02-28 22:42:10 -05:00
Daniel Ehrenberg 7cd3360cdd Fixing ambiguity between sets and namespaces in many unit tests and furnace.auth 2010-02-26 17:17:40 -05:00
Daniel Ehrenberg 6298203b4c Making all of basis and extra unambiguous for sets/namespaces 2010-02-26 16:28:38 -05:00
Daniel Ehrenberg 7074979745 Moving new-sets to sets 2010-02-26 16:01:01 -05:00
Daniel Ehrenberg a72e2cc96c Finishing converting compiler.cfg.ssa.construction.tdmsc to new-sets 2010-02-26 13:53:20 -05:00
Daniel Ehrenberg 2034e1ef05 Fewer unnecessary dependence edges between stack operations, implemented by reviving stack height normalization. Now, 40% of spills and reloads are eliminated in total 2010-02-24 14:20:43 -06:00
Daniel Ehrenberg 04878057af Compiler.cfg.{dce,linearization} use new-sets 2010-02-16 15:48:07 -06:00
Daniel Ehrenberg 30cc248bb3 Bit sets use new new set protocol, and compiler.cfg.ssa.construction.tdmsc is updated for it 2010-02-16 15:14:32 -06:00
Daniel Ehrenberg 6d36bfd104 Modifying dependence graph construction for faster compile time 2010-02-13 21:35:40 -06:00
Daniel Ehrenberg 4f7fd41cf2 Using original instruction order as a tiebreaker in scheduling 2010-02-11 23:12:17 -06:00
Daniel Ehrenberg 5a3d0fb883 Scheduling doesn't have such redundant data structures anymore 2010-02-11 21:21:22 -06:00
Daniel Ehrenberg a6f255a985 Scheduling schedules more BBs--it was leaving out some ones that shouldn't've been. Now it's almost 30% of spills and reloads that are eliminated 2010-02-11 21:02:02 -06:00
Daniel Ehrenberg edae2fa2d3 Making the fan-in tree generation work. Finally: a 20% reduction in spills and reloads on x86! 2010-02-11 00:19:53 -06:00
Daniel Ehrenberg 6fe9aa50f7 Working on fixing scheduling 2010-02-10 22:36:26 -06:00
Daniel Ehrenberg 04946dcddd A first attempt at implementing Vivek Sarkar's algorithm for scheduling for register pressure 2010-02-10 21:43:30 -06:00
Slava Pestov c5c94ef1f9 compiler.cfg.intrinsics.simd: ignore dummy assert-positive word 2010-01-31 18:19:14 +13:00
Doug Coleman afdb7f6329 remove a stray character 2010-01-22 15:07:01 -06:00
Doug Coleman 8c1d202b4c Rename accumulator to collector, pusher to selector 2010-01-22 15:00:53 -06:00
Slava Pestov 7155447aed stack-checker: add inputs and outputs words, since 'infer (in>>|out>>) length' was coming up a lot 2010-01-15 08:04:14 +13:00
Slava Pestov df4fb4a3ee Removing integers-as-sequences 2010-01-15 07:15:33 +13:00
Slava Pestov 1c10196c43 Rename kernel.private:getenv/setenv to special-object/set-special-object to mirror recent renaming on the VM side 2010-01-13 18:08:18 +13:00
Slava Pestov 235f3238f5 Add alien-assembly form for inline assembler, works like alien-invoke except calls a user-supplied quotation instead of generating a subroutine call. Replaces FPU status control, SSE detection and read timestamp routines in vm/cpu-x86.*S 2010-01-07 17:39:22 +13:00
Slava Pestov ba5b90e063 Change how non-volatile register preservation is done in alien callbacks, with the aim of fixing callbacks on PowerPC, and to eventually eliminate assembly code from VM
- Simplify calculation of offset in relocation table
- Open-code %alien-callback
- Remove magic_frame hack from context objects
- Move magical return instruction from optimizing compiler backend into callback entry stub
2010-01-03 01:11:51 +13:00
Slava Pestov e96404327e Get optimizing compiler working without global register variables in VM 2009-12-22 15:42:49 +13:00
Slava Pestov 0068bce934 vm: big overhaul of non-optimizing compiler
- change some primitives into sub-primitives: fixnum+ fixnum- fixnum* inline-cache-miss inline-cache-miss-tail
- rename some relocation types for clarity
- some other minor re-organizations and cleanups
2009-12-15 07:20:09 -05:00
Joe Groff 3e40a36c50 fix simd tests 2009-12-05 17:17:16 -08:00
Joe Groff 104c29aabc simd intrinsic implementation for v*high, v*hs+, vavg, and vsad 2009-12-05 14:52:18 -08:00
Joe Groff 412b9d0c7a change compiler.cfg.intrinsics.simd tests to not use types and operations that depend on host cell size 2009-12-04 13:23:31 -08:00
Joe Groff 63b89c65f9 don't use intrinsics for simd vector element operations when the component size doesn't fit in a fixnum 2009-12-03 12:46:56 -08:00
Joe Groff 67cc1c01be Merge branch 'master' into simd-cleanup 2009-11-26 16:14:46 -08:00
Joe Groff 66d0cafa94 fix buggy simd intrinsics 2009-11-26 13:28:40 -08:00
Joe Groff c916c7c856 don't try to rewrite redundant test-vector-exprs 2009-11-25 20:06:11 -08:00
Joe Groff 50f7dff422 change name of 'unsign-rep' to more sensible 'signed-rep' 2009-11-24 22:44:12 -08:00
Joe Groff c98eb84943 make math.vectors.simd tests pass again 2009-11-24 18:30:12 -08:00
Joe Groff 9c388bf781 update compiler.cfg.intrinsics.simd tests 2009-11-24 12:50:27 -08:00
Joe Groff 65d8060075 fix simd intrinsic compilation 2009-11-24 11:37:28 -08:00
Joe Groff 152b0d2df5 break simd intrinsics into a separate vocab so they can be intrinsified before the simd methods compile 2009-11-19 11:53:46 -08:00
Joe Groff 59d85f7ad6 fix primitive emit fallback for simd intrinsics 2009-11-18 21:29:51 -08:00
Joe Groff a3e4ecfc7d enable simd intrinsics and fix first-pass compiler errors 2009-11-18 20:32:05 -08:00
Joe Groff 6583875055 tests for all simd intrinsics 2009-11-18 18:20:58 -08:00
Slava Pestov 0612bc6177 Factor source files should not be executable 2009-11-21 17:50:43 -06:00
Joe Groff f545c5d3e5 properly handle -vector-op and case words in simd.backend 2009-11-18 12:36:41 -08:00
Joe Groff cd2cf91b95 start on tests for simd intrinsics 2009-11-17 11:13:16 -08:00
Slava Pestov e30d275e41 compiler.cfg: 'basic-block new hashcode' should not throw an exception; fixes tools.deploy.test.11 2009-11-16 02:01:36 -06:00
Joe Groff d56afe9c3d compilation fixes 2009-11-14 23:43:22 -06:00
Joe Groff f544982fda Merge branch 'master' of git://factorcode.org/git/factor into simd-cleanup
Conflicts:
	basis/math/vectors/simd/functor/functor.factor
2009-11-14 21:02:39 -06:00
Joe Groff 8a8699ac98 backend fixups 2009-11-14 20:59:03 -06:00
Joe Groff e323071c44 sever lingering dependencies on simd from compiler 2009-11-11 16:08:40 -06:00
Slava Pestov 41c17f0429 Fixing test failures 2009-11-11 02:40:24 -06:00
Slava Pestov 2afd7ce244 Faster identity-hashcode primitive; fast path now opencoded by the compiler 2009-11-11 02:27:19 -06:00
Joe Groff eac9bacf40 backend for choosing available SIMD intrinsic implementations 2009-11-10 23:35:46 -06:00
Slava Pestov 064c00f78d New identity-hashcode primitive 2009-11-10 21:18:54 -06:00
Slava Pestov 19283ed83d compiler.cfg.intrinsics.slots: new implementation of value-tag 2009-11-10 17:30:27 -06:00
Joe Groff 75d04922b9 Merge branch 'master' into simd-cleanup
Conflicts:
	basis/math/vectors/simd/functor/functor.factor
2009-11-05 11:27:08 -06:00
Joe Groff 4d54f27cd1 more intrinsic madness 2009-11-05 09:52:57 -06:00
Joe Groff f6643a1c72 change ##horizontal-add-vector insn to better match what the HADD SSE instructions do (add adjacent pairs, pack results) 2009-11-04 12:18:01 -06:00
Slava Pestov 3c4c05e915 compiler.cfg.intrinsics.allot: fix inline byte array allocation on 32-bit platforms 2009-11-03 23:44:20 -06:00
Slava Pestov 109aa88b06 compiler: update unit tests for 4-bit tag change 2009-11-03 21:40:29 -06:00
Joe Groff bd77633d5b new intrinsic generators, pt1 2009-11-03 21:38:45 -06:00
Slava Pestov 51e9a891a8 cpu.x86: update %box-displaced-alien for introduction of address field 2009-11-03 03:17:43 -06:00
Slava Pestov 91ccc30a54 Merge branch 'master' into new_gc 2009-11-02 20:34:13 -06:00
Slava Pestov 0a15ae4d6b compiler.cfg.intrinsics: uncomment line commented out by mistake 2009-11-02 20:33:14 -06:00
Slava Pestov 495f776d54 Merge branch 'master' into new_gc 2009-11-02 20:11:43 -06:00
Slava Pestov 8bd2273e44 compiler.cfg: don't generate useless methods in instruction meta-programming. reduces bootstrap time 2009-11-02 20:11:29 -06:00
Slava Pestov a3b5c07e80 Minor bug fixes for 4-bit tags 2009-11-02 17:41:36 -06:00
Joe Groff e36eb438fa move all simd intrinsics to compiler.cfg.intrinsics.simd, and only load it when math.vectors.simd is loaded 2009-11-02 15:17:34 -06:00
Slava Pestov e4ad642134 vm: 4 bit tags, new representation of alien objects makes unbox-any-c-ptr more efficient (work in progress) 2009-11-02 04:25:54 -06:00
Joe Groff 1cf45abf06 Merge branch 'master' of git://factorcode.org/git/factor 2009-10-30 00:42:37 -05:00
Joe Groff b858860a67 add ##shl-vector-imm and ##shr-vector-imm insn variants. use merge/shr instead of compare/merge to do signed unpacks 2009-10-30 00:41:19 -05:00
Doug Coleman 1d12a6707d sigma -> map-sum 2009-10-29 14:34:04 -05:00
Joe Groff 3fbe722561 Merge branch 'master' of http://factorcode.org/git/factor
Conflicts:
	basis/locals/locals.factor
	basis/peg/peg.factor
	extra/infix/infix.factor
2009-10-28 16:17:24 -05:00
Joe Groff 6e1bffb1c5 update existing code to use :> ( ) when possible 2009-10-28 16:11:33 -05:00
Doug Coleman bd13e018dd memq? -> member-eq?, sorted-memq? -> sorted-member-eq? 2009-10-28 15:02:00 -05:00
Doug Coleman 1476cdb974 reverse-here -> reverse! 2009-10-28 14:40:15 -05:00
Doug Coleman 7ce4b746e5 parsed -> suffix!, add append! 2009-10-28 13:38:27 -05:00
Joe Groff 2ecf3fb568 fix load errors from bootstrapping 2009-10-28 12:51:03 -05:00
Slava Pestov 299b5b0f6c filter-here -> filter! 2009-10-28 00:44:05 -05:00
Slava Pestov 50f5c3d116 remq -> remove-eq, delq -> remove-eq! 2009-10-28 00:23:08 -05:00
Slava Pestov 951e3e9c83 delete-nth -> remove-nth! 2009-10-27 23:41:57 -05:00
Slava Pestov 08e7d25dc5 change-each -> map!, deep-change-each -> deep-map! 2009-10-27 22:32:56 -05:00
Joe Groff 935c0797c3 update existing code for [let change 2009-10-27 22:05:37 -05:00
Joe Groff c3b8847936 update a bunch of alien-callbacks and alien-indirects to use c-type words 2009-10-21 21:10:11 -05:00
Joe Groff 7fac3682a6 update some naked alien-invokes to use c-type words 2009-10-21 18:44:00 -05:00
Joe Groff 8a6b0a1453 generate unsigned vector comparison fallbacks using min/max or xor/signed compare 2009-10-20 22:30:57 -05:00
Joe Groff cb36111a3c generate better fallback code for vmin/vmax intrinsics 2009-10-20 19:22:38 -05:00
Joe Groff 6f72c3ca24 Merge branch 'master' of git://factorcode.org/git/factor 2009-10-20 17:42:29 -05:00
Joe Groff 764e085004 value numbering rewrite rules for vector ops to convert "not and" to "andn" and "not andn" to "and" 2009-10-20 17:29:01 -05:00
Slava Pestov 18be7e1f37 cpu.x86.32: only create 16-byte parameter area if the word calls into the VM 2009-10-20 05:02:42 -05:00
Slava Pestov 1e7893b6ce compiler: FFI is now slightly more efficient when unboxing parameters, only changes data stack height once 2009-10-20 04:31:48 -05:00
Slava Pestov 2d5cdd19ec compiler: on PPC, ANDI, ORI and XORI instructions take an unsigned 16-bit immediate, unlike ADDI, SUBI and MULLI which take a signed 16-bit immediate. The code generator was not aware of this, and so for example '[ >fixnum -16 bitand ]' would generate incorrect code. Split up small-enough? hook into immediate-arithmetic? and immediate-bitwise? and update value numbering to be aware of this. Fixes classes.struct bitfields test failure 2009-10-19 04:58:29 -05:00
Joe Groff 448ef2f1d5 fix unsigned vector unpack 2009-10-16 14:25:33 -05:00
Slava Pestov d48c72a274 compiler.cfg: fix unit tests 2009-10-15 06:01:46 -05:00
Slava Pestov 7d97c19227 compiler: tweak ##write-barrier-imm 2009-10-15 02:40:23 -05:00
Slava Pestov 1ce39963fd Working on adding support for the new write barrier to optimized code 2009-10-14 02:06:01 -05:00
Joe Groff 97ab9dc4ab only emit ##alien-vector/##set-alien-vector insns if the rep is available 2009-10-10 12:53:10 -05:00
Joe Groff d9002127fa have vshuffle accept simd-128 variable byte shuffles 2009-10-10 11:30:11 -05:00
Joe Groff 3bc097f6ff rename ##shuffle-vector to ##shuffle-vector-imm, and add a new ##shuffle-vector for dynamic shuffles. have vshuffle use ##shuffle-vector to do word and byte shuffles on x86 2009-10-09 21:26:27 -05:00
Joe Groff 471c86a110 generate better code for vabs when instruction isn't available instead of using software fallback (-0.0 andn for floats, x > 0 ? x : -x for signed ints, nop for unsigned ints) 2009-10-09 14:24:55 -05:00
Joe Groff 01f5d392be implement vneg as an intrinsic in terms of load -0, subtract 2009-10-09 13:16:39 -05:00
Daniel Ehrenberg 2db25b937e Doing constant folding on ##neg and ##not in value numbering 2009-10-08 01:57:54 -05:00
Joe Groff dd691a61e8 break vector compare intrinsics into %compare, %or, and %not instructions that map directly to cpu instructions 2009-10-07 15:27:03 -05:00
Joe Groff f2c9eb79e2 decompose %unpack-vector-head/tail into %compare-vector/%merge-vector-head/tail or %tail>head-vector/%unpack-vector-head insns when there isn't an actual unpack insn; get rid of fake x86 implementations 2009-10-07 14:09:46 -05:00
Joe Groff fd6f370119 typo in convert-to-fill-vector? 2009-10-07 12:53:10 -05:00
Joe Groff 47cfb7d3a5 fix ##load-constant/##scalar>vector folding when constant is a fixnum 2009-10-07 12:46:08 -05:00
Joe Groff ea051063a4 convert all-ones vector ##load-reference/##load-constant to a ##fill-vector insn 2009-10-07 12:35:21 -05:00
Joe Groff 34def34481 don't generate a ##not-vector instruction if the cpu doesn't have one; instead, fall back to a ##fill-vector/##xor-vector combo. get rid of pretend %not-vector in cpu.x86 2009-10-07 11:59:36 -05:00
Joe Groff 879fe9a665 fix x86 %unpack-vector insns 2009-10-06 20:38:51 -05:00
Joe Groff 785f8620fd glue conversion intrinsics to instructions 2009-10-06 20:13:38 -05:00
Joe Groff fb8eeb6065 Merge branch 'master' of git://factorcode.org/git/factor 2009-10-05 22:34:41 -05:00
Joe Groff 529c444e32 add insns for vector pack, unpack, integer>float, and float>integer 2009-10-05 22:34:14 -05:00
Slava Pestov 55fe25ebd1 Merge branch 'master' of git://factorcode.org/git/factor 2009-10-05 18:22:09 -05:00
Slava Pestov 5b40fc6533 compiler.cfg.linear-scan: fix unit test 2009-10-05 18:21:58 -05:00
Joe Groff fbe810fc3b rename SIMD vmerge and kids to (vmerge), make new vmerge more generally useful 2009-10-05 17:55:39 -05:00
Slava Pestov b4e36608da compiler.cfg: remove _gc instruction, it doesn't need to exist, and change GC checks to ensure that the right amount of space is available instead of blindly checking for 1Kb 2009-10-05 05:27:49 -05:00
Joe Groff 0c9c3d4859 add %merge-vector-head and %merge-vector-tail instructions to back vmerge 2009-10-03 21:48:53 -05:00
Joe Groff 04bb03bb61 add intrinsics for v<=, v<, v=, v>, v>=, vunordered? 2009-10-03 11:29:34 -05:00
Joe Groff 4e024cbbc2 extend x86 %compare-vector to cover all comparison codes, sometimes stupidly for now 2009-10-02 23:19:56 -05:00
Joe Groff 38f413a8a6 add intrinsic for vnot/vbitnot 2009-10-02 20:04:28 -05:00
Joe Groff aa3392e50f implement vand, vor, vandn, and vxor as bitwise intrinsics for simd types 2009-10-02 14:17:01 -05:00
Slava Pestov cb71fbf4fe Fix compiler.cfg.value-numbering and math.matrices.simd unit tests 2009-10-02 02:32:35 -05:00
Slava Pestov bcbdc9e0c8 Merge branch 'master' of git://factorcode.org/git/factor into improved-aa 2009-10-02 00:21:44 -05:00
Slava Pestov fb09d67936 compiler.cfg.alias-analysis: fix ##compare where operands are copies 2009-10-01 23:54:19 -05:00
Slava Pestov 2a4475f85e Fix alias analysis of a ##compare whose input is another ##compare 2009-10-01 23:20:05 -05:00
Joe Groff 53b265f682 Merge branch 'master' of git://factorcode.org/git/factor
Conflicts:
	basis/compiler/codegen/codegen.factor
2009-10-01 23:14:16 -05:00
Slava Pestov 31f39ce32f compiler.cfg.alias-analysis: optimize ##vm-field-ptr and ##alien-global instructions, and optimize out ##compare between values of different alias classes; this optimizes '[ [ >float ] bi@ [ + ] [ - ] 2bi eq? ]' down to an o-op and removes boxing from '[ [ >float ] bi@ [ + ] [ - ] 2bi = ]' 2009-10-01 23:03:17 -05:00
Joe Groff f9695951a0 fold test-vector/branch sequences into a test-vector-branch instruction 2009-10-01 19:53:30 -05:00
Slava Pestov c3d81cefe9 compiler.cfg: don't unbox the same value more than once per basic block 2009-10-01 19:41:23 -05:00
Slava Pestov b9577e2b0e compiler.cfg.instructions: remove ##box-float, ##unbox-float, ##box-vector, ##unbox-vector since they can be expressed in terms of ##alien-double, ##set-alien-double, ##alien-vector, ##set-alien-vector, and ##allot 2009-10-01 18:07:50 -05:00
Joe Groff d14f150b58 %test-vector instruction for vany?, vall?, vnone? 2009-10-01 15:35:38 -05:00
Joe Groff 987ced4070 %compare-vector instruction (only does v= for now) 2009-10-01 14:31:37 -05:00
Joe Groff a93f8f66f9 Revert "add a %blend-vector intrinsic for v?"
This reverts commit 21e4b28b67.
2009-09-30 23:40:37 -05:00
Joe Groff 67cc45235d Merge branch 'master' of git://factorcode.org/git/factor 2009-09-30 23:04:04 -05:00
Joe Groff 7db7b63552 add a %blend-vector intrinsic for v? 2009-09-30 23:03:59 -05:00
Slava Pestov 2384b630b2 math.vectors.simd: use fallbacks for hlshift, hrshift, vshuffle if parameter is not a literal;al; element access in int-4 on x86-64 now sign-extends the value; don't throw error at compile time if parameter for vshuffle does not have enough elements 2009-09-30 20:04:37 -05:00
Joe Groff 2625f2d210 Merge branch 'master' of git://factorcode.org/git/factor 2009-09-30 11:35:40 -05:00
Joe Groff cb646db54a add a "test-mr." word to compiler.cfg.debugger equivalent to "test-mr mr." 2009-09-30 11:34:19 -05:00
Slava Pestov b677822b76 compiler.cfg.value-numbering: fix overly-zealous ##compare-imm conversion 2009-09-30 05:09:20 -05:00
Slava Pestov cdc7b7e2c7 Various minor compiler tweaks: Combine address calculation with dereferencing in alien accessors; convert SIMD XOR of a vector with itself into an XOR of the destination with itself; convert SIMD unbox of zero vector into XOR of the destination with itself; fix SIMD indexing on x86-64 2009-09-30 05:00:36 -05:00
Slava Pestov 1da18d06b1 compiler.cfg.value-numbering: add some more rewrite rules, neg/neg, not/not, and a few for SIMD 2009-09-30 02:18:29 -05:00
Slava Pestov 80e84a357d math.vectors.simd: add vbroadcast intrinsic, fix integer overflow issues 2009-09-29 22:58:20 -05:00
Slava Pestov 810cd7b4bb compiler.cfg.ssa.destruction: don't coalesce registers with different representations, even if they're in the same register class, since this messes up spilling 2009-09-29 22:28:20 -05:00
Slava Pestov f395d83379 math.vectors.simd: add fast intrinsic for 'nth', replace broadcast primitive with shuffles 2009-09-29 04:48:11 -05:00
Slava Pestov e40a95c1e1 math.vectors.simd: add vshuffle intrinsic 2009-09-28 23:12:13 -05:00
Slava Pestov a8ea929ad9 Work in progress 2009-09-28 17:31:34 -05:00
Slava Pestov 08a2eb74f4 cpu.x86: shifts didn't work if dst != src1; re-organize file a bit 2009-09-28 05:39:53 -05:00
Slava Pestov da5f0d0a14 compiler.cfg.ssa.destruction: we can coalesce two registers with different representations as long as they both belong to the same register class 2009-09-28 03:24:54 -05:00
Slava Pestov b2ea3afd84 math.vectors.simd: add hlshift, hrshift (128-bit shift), vbitandn intrinsics 2009-09-28 02:17:46 -05:00
Slava Pestov 2de6ab9e21 compiler.cfg.linear-scan: fix tests for hash order 2009-09-27 23:35:56 -05:00
Slava Pestov 1d872db58d compiler.cfg.linear-scan: tweak it so that register allocation does not depend on hashing order 2009-09-27 23:29:48 -05:00
Slava Pestov 59fbe85c9b compiler.cfg: nuke ##bignum>integer and ##integer>bignum since they were unused 2009-09-27 20:36:05 -05:00
Slava Pestov 66071f45a3 Add a couple more def-is-use instructions 2009-09-27 20:34:20 -05:00
Slava Pestov f757b454cc Merge branch 'master' into more_aggressive_coalescing 2009-09-27 19:29:50 -05:00
Slava Pestov 705b4ab5c3 compiler.cfg.linear-scan: fix partial sync point logic in case where dst == src, and clean up spilling code 2009-09-27 19:28:20 -05:00
Slava Pestov 1e841e5086 compiler.cfg.ssa.destruction: more aggressive coalescing work in progress 2009-09-27 17:17:26 -05:00
sheeple 01a4047126 Merge branch 'slots' of git://factorcode.org/git/factor into slots
Conflicts:

	basis/cpu/x86/x86.factor
2009-09-26 03:12:42 -05:00
Daniel Ehrenberg 51f2bbd74b Completing slot and set-slot changes on x86 2009-09-26 01:39:48 -05:00
Daniel Ehrenberg 7bd330cfd5 Making ##slot and ##set-slot not have a temporary parameter 2009-09-26 00:28:14 -05:00
Slava Pestov c0abb9ce95 hints: fix regression with declarations 2009-09-25 18:50:08 -05:00
Slava Pestov bbbb207dab Some fixes and cleanups in math.vectors
- Tighten up type inference for operations on complex float arrays
- Fix v. to have correct behavior with complex numbers
- Rename v<< and v>> to vlshift and vrshift to avoid clashing with v>> accessor
2009-09-24 06:58:33 -05:00
Slava Pestov cb497f009b Merge branch 'vm_cleanup' of git://github.com/phildawes/factor 2009-09-24 04:31:55 -05:00
Slava Pestov 7b6128dd03 math.vectors.simd: add v<< and v>> intrinsics for bitwise shifts on elements 2009-09-24 03:32:39 -05:00
Phil Dawes 84faf2431f cleaned up vm-field-ptr compiler code 2009-09-24 08:16:57 +01:00
Slava Pestov 9f59f6b9c6 Merge branch 'master' into integer-simd 2009-09-23 02:48:38 -05:00
Slava Pestov 7d39499d86 compiler.cfg.ssa.cssa: correctly handle overflowing fixnum instructions 2009-09-23 02:47:56 -05:00
Slava Pestov 43fa252af5 math.vectors.simd: new operations: vabs vsqrt vbitand vbitor vbitxor 2009-09-23 02:47:14 -05:00
Slava Pestov d23826906f Merge branch 'master' into integer-simd 2009-09-22 20:21:40 -05:00
Slava Pestov 0e3a261637 Fix test failures in compiler.cfg.linearization.order, compiler.tests.low-level-ir and compiler.graphviz 2009-09-22 05:07:52 -05:00
Slava Pestov 629fd1fc82 Merge branch 'master' into integer-simd 2009-09-22 03:24:52 -05:00
Slava Pestov 513ba1f176 compiler.cfg.linearization.order: basic blocks were being inserted twice if some blocks had repeated successors, causing problems for register allocation 2009-09-22 03:19:23 -05:00
Slava Pestov 9d90bdd439 Fix conflict 2009-09-20 23:18:07 -05:00
Slava Pestov ea44ea3522 math.vectors.simd: add saturated arithmetic operations 2009-09-20 23:16:02 -05:00
Slava Pestov acea55c692 math.vectors: add v+- word which is accelerated by SSE3 2009-09-20 17:43:16 -05:00
Phil Dawes ff8f2b10ec fixed up getenv compiler intrinsic to use vm struct userenv 2009-09-16 08:16:32 +01:00
Joe Groff 4d16c569f0 struct classes now make their own C type without help from alien.structs. remove alien.structs dependencies from everywhere outside of alien and compiler, and have the FFI handle both alien.structs and classes.struct c-types 2009-09-15 17:38:49 -05:00
Slava Pestov 4f702de449 math.functions: more accurate log10 (fixes problem reported by OneEyed) 2009-09-14 16:19:58 -05:00
Slava Pestov a2de9d9e54 compiler.cfg.builder: don't run certain tests if float intrinsics are not available 2009-09-13 23:12:47 -05:00
Slava Pestov 32b95c2cdf math: add unordered comparison operators u< u<= u> u>= which behave exactly like < <= > >= except no floating point exceptions are set if one or both inputs are NaNs; also add efficient intrinsic for unordered? predicate, and fix propagation type functions for abs, absq, and bitnot 2009-09-12 22:20:13 -05:00
Slava Pestov 86a848bae6 compiler.cfg.intrinsics: compile float-mod as a ##binary-float-function instead of a primitive call 2009-09-11 21:00:17 -05:00
Slava Pestov daff63071f Fix the build 2009-09-09 13:44:54 -05:00
Slava Pestov 15d85c1c4f compiler.cfg.save-contexts: add new pass 2009-09-08 21:56:28 -05:00
Slava Pestov 7e2f0e5dbf compiler: separate ##save-context instruction from ##alien-invoke, generate a ##save-context for libm calls, and add a pass to combine multiple context saves within a basic block. Fixes crashes with FP traps thrown by libm functions on x86-32 2009-09-08 21:50:55 -05:00
Joe Groff 0ea9949e51 split unordered and ordered float comparison intrinsics in compiler; generate only unordered comparisons for now 2009-09-08 17:04:26 -05:00
Slava Pestov bbca00e2ae Fix conflicts 2009-09-07 23:51:25 -05:00
Slava Pestov 7c04b912bb compiler.cfg.value-numbering: update tests for Joe's condition code changes 2009-09-04 03:11:56 -05:00
Slava Pestov 4a2823b2eb compiler: tweak generated code 2009-09-04 03:01:18 -05:00
Slava Pestov e11d1e37f5 math.vectors.simd: allow punning SIMD vectors between types 2009-09-04 02:35:58 -05:00
Slava Pestov c92e54b560 compiler.cfg.intrinsics: fix type detection on the alien type for vector accessors 2009-09-04 02:22:54 -05:00
Slava Pestov e36a0d7ef4 compiler: clean up code generation for alien boxing/unboxing a bit 2009-09-03 21:22:43 -05:00
Slava Pestov 4d5a4222b6 More SIMD work
- Rename SIMD types and register representations: <type>-<count> rather than <count><type>-array
- Make a functor to define 256-bit vector types, use it to define float-8 type
- Make SIMD instructions pure-insns so that they participate in value numbering
2009-09-03 20:58:56 -05:00
Joe Groff 036ff77306 add compiler comparison codes for floating-point unordered comparisons; update x86 backend to generate proper code for all floating-point comparisons 2009-09-03 20:32:05 -05:00
Slava Pestov bf81cb4259 math.vectors.simd: split off intrinsics into a sub-vocabulary, to avoid loading most of the SIMD code on bootstrap 2009-09-03 03:43:43 -05:00
Slava Pestov ff8c70dbe0 Initial implementation of SSE vector intrinsics:
- cpu.architecture: add SSE vector representations
- compiler.cfg.intrinsics.alien: remove an attempt at optimization that value numbering handles now
- compiler.cfg.representations: support instructions where the representation is set in the 'rep' slot, and support conversions between single and double floats
- alien-float, set-alien-float now use the single float representation, and the conversion is implicit; this fixes a long-standing bug where a register could get clobbered because of how %set-alien-float was defined on x86
- math.vectors.specialization: add support for SIMD specialization (where the vector word's body is replaced by another quotation), also specialize the 'sum' word
- math.vectors.simd: 4float-array, 2double-array, 4double-array types, and specializers for the math.vectors words
2009-09-03 02:33:07 -05:00
Slava Pestov 85a2bfab6c compiler: eliminate boilerplate by centralizing info in declarative INSN: syntax 2009-09-02 06:22:37 -05:00
Slava Pestov f91b539c31 cpu.ppc: implement fast float function calls; 3x speedup on benchmark.struct-arrays on PowerPC 2009-09-01 15:19:26 -05:00
Slava Pestov 868009aaee compiler.cfg.intrinsics: cleanup: the "intrinsic" word property is now a quotation, not a boolean, making this mechanism more extensible 2009-08-30 22:20:49 -05:00
Slava Pestov 447c5fbf7a compiler.cfg.linear-scan.live-intervals: dead-value-error is never thrown anymore 2009-08-30 05:15:18 -05:00
Slava Pestov 9595be4bf9 %box-displaced-alien: fix clobberage found by Doug 2009-08-30 05:11:08 -05:00
Slava Pestov 0db01f6d5f compiler.cfg.linear-scan now supports partial sync-points where all registers are spilled; taking advantage of this, there are new trigonometric intrinsics which yield a 2x performance boost on benchmark.struct-arrays and a 25% boost on benchmark.partial-sums 2009-08-30 04:52:01 -05:00
Slava Pestov 908b4742c5 compiler.cfg.value-numbering: fix ##box-displaced-alien simplification 2009-08-28 19:05:49 -05:00
Slava Pestov 2bb6293217 compiler: add fixnum-min/max intrinsics; ~10% speedup on benchmark.yuv-to-rgb 2009-08-28 19:02:59 -05:00
Slava Pestov d957ae4e44 Performance improvements to make struct-arrays benchmark faster
- improved optimization of ##unbox-any-c-ptr on ##box-displaced-alien; convert it to ##unbox-c-ptr where possible using class info stored in the ##bda instruction
- make fcos, fsin, etc inline again; everything in math.libm inline again, except for fsqrt which is an intrinsic
- convert min and max on floats to float-min and float-max
- make min and max not inline, so that the above can work
- struct-arrays: rice a bit so that more fixnums come up
2009-08-28 05:21:16 -05:00
Slava Pestov 8f19f14c1f compiler.cfg.instructions: forgot that ##box-displaced-alien needs a GC check; fixes segfault in benchmark.mandel 2009-08-27 04:09:35 -05:00
Slava Pestov f662e6403a compiler: new inline intrinsic for <displaced-alien> where the inputs have known types; value numbering now eliminates unnecessary allocation of displaced aliens if the result is immediately unboxed again 2009-08-27 00:06:19 -05:00
Slava Pestov 8bf709acd0 compiler.cfg.linear-scan: fix unit tests for new fake-representations 2009-08-26 08:58:00 -05:00
Slava Pestov 8d55616d34 compiler.cfg.debugger: fix fake-representations so that low-level-ir tests can pass on x86 2009-08-25 23:44:01 -05:00
Slava Pestov 0df8aadce2 cpu.x86: use SQRTSD instruction for math.libm:fsqrt word 2009-08-25 23:22:15 -05:00
Slava Pestov 81b72cb5c5 Add some unit tests 2009-08-22 17:15:10 -05:00
Slava Pestov 5197aca215 compiler.cfg.dataflow-analysis: when intersecting sets, treat uninitialized sets as universal rather than empty; reduces number of stack instructions generated by 1% 2009-08-20 18:15:41 -05:00
Slava Pestov fd2f0a602d compiler.cfg.stacks.local: more accurate local replace set computation; optimizes out 'swap swap' 2009-08-19 22:00:21 -05:00
Slava Pestov a598cc35a5 compiler: add unit tests for new bugs 2009-08-19 16:56:26 -05:00
Daniel Ehrenberg 478b960560 Merge branch 'master' of git://factorcode.org/git/factor 2009-08-14 20:11:54 -05:00
Daniel Ehrenberg 3cec74867d Improving write barrier elimination; change to compiler.cfg.utilities to support this 2009-08-14 19:41:41 -05:00
Daniel Ehrenberg 8197d9356b Write barriers are hoisted out of loops when their target is slot-available 2009-08-13 20:26:44 -05:00
Doug Coleman 2ed4425b7a Merge branch 'master' of git://factorcode.org/git/factor
Conflicts:
	basis/calendar/calendar.factor
2009-08-13 19:40:02 -05:00
Doug Coleman 3f3d57032b Delete empty unit tests files, remove 1- and 1+, reorder IN: lines in a lot of places, minor refactoring 2009-08-13 19:21:44 -05:00
Daniel Ehrenberg 5a3e350490 Global write barrier elimination tracks newly allocated objects 2009-08-13 15:18:47 -05:00
Daniel Ehrenberg d35e1eb76c Fixing write-barrier elimination; adding bb as a parameter to join-sets in dataflow analysis 2009-08-12 23:52:29 -05:00
Daniel Ehrenberg 1a7ab59f56 Making write barrier elimination global 2009-08-11 21:21:21 -05:00
Slava Pestov 8a9c15ab0b compiler.tree.escape-analysis: if the output of an #introduce node has an immutable tuple class type declaration, and it is not passed to any subroutine calls, or returned from the word, then unbox it. This speeds up vector arithmetic words on specialized arrays, because the specialized array is unboxed up-front, eliminating an indirection on every loop iteration 2009-08-09 16:29:21 -05:00
Slava Pestov cc5476c823 _gc instruction doesn't need slot to hold GC root area size, since that's just tagged-values>> length 2009-08-09 03:08:13 -05:00
Slava Pestov 687454878a compiler.cfg.linearization: change order to fit older unit tests 2009-08-08 23:06:57 -05:00
Slava Pestov 24a50c8006 compiler.cfg.two-operand: sometimes we can eliminate a copy in the x = y <op> y case 2009-08-08 20:03:42 -05:00
Slava Pestov 55acddef3f compiler.cfg.representation: OK to unbox output of ##load-reference globally 2009-08-08 20:03:13 -05:00
Slava Pestov d0c393aa60 compiler.cfg: new system to track when results of analyses need to be recomputed (reverse post order, linear order, predecessors, dominance, loops). Passes can now call needs-predecessors, needs-dominance, needs-loops at the beginning, and cfg-changed, predecessors-changd at the end. Linearization order now takes loop nesting into account, and linear scan now uses linearization order instead of RPO. 2009-08-08 20:02:56 -05:00
Slava Pestov 11dc0a23a8 compiler.cfg.ssa.liveness: fix tests 2009-08-08 16:15:45 -05:00
Slava Pestov 1bf8a0cac7 compiler.cfg.representations: emit-conversion should not be private since CSSA construction uses it 2009-08-08 04:13:30 -05:00
Slava Pestov 4b7ba38aab compiler.cfg: virtual registers are integers now, and representations are stored off to the side. Fix bug in representation selection that would manifest if a value was used as a float and a fixnum in different branches; cannot globally unbox float in this case 2009-08-08 04:02:18 -05:00
Slava Pestov e21ca289c3 compiler.cfg.representations: new pass to make global unboxing decisions, relies on new compiler.cfg.loop-detection pass for loop nesting information 2009-08-08 00:24:46 -05:00
Slava Pestov 725280d424 Split off the notion of a register representation from a register class 2009-08-07 17:44:50 -05:00
Slava Pestov 370f4c081d compiler.cfg: convert code into two-operand form before SSA destruction; SSA destruction now operates on a relaxed SSA form where multiple defs of the same vreg are allowed, but only within a single basic block. This makes linear scan's coalescing redundant, allowing it to be removed completely 2009-08-05 18:57:46 -05:00
Slava Pestov b49e4c9c9b Merge branch 'master' of git://factorcode.org/git/factor 2009-08-03 10:31:27 -05:00
Slava Pestov d286a7f426 compiler.cfg.critical-edges: no longer neededed 2009-08-03 10:31:00 -05:00
Slava Pestov d20d335447 compiler.cfg.stacks: more accurate deconcatenatization inserts fewer partially redundant ##peeks. 11% improvement on benchmark.beust2, 2% reduction in ##peek and ##replace instructions inserted 2009-08-03 07:08:28 -05:00
Slava Pestov 720bfe378f compiler.cfg.stacks.uninitialized: use bitand instead of min 2009-08-03 06:03:38 -05:00
Joe Groff 63e5b0d6d8 Merge branch 'master' of git://factorcode.org/git/factor 2009-08-02 23:16:52 -05:00
Joe Groff 7c5ef08aab [ [ ... ] compare ] sort => [ ... ] sort-with 2009-08-02 20:09:23 -05:00
Slava Pestov dac7edd2ab compiler.cfg.def-use: remove compute-def-use word, passes have to call compute-defs or compute-uses now; compiler.cfg.ssa.liveness: don't compute dominance and def-use first since destruction does already 2009-08-02 19:12:32 -05:00
Slava Pestov df6c87d350 Merge branch 'master' of git://factorcode.org/git/factor 2009-08-02 18:46:27 -05:00
Slava Pestov 32d9102feb Revert "SSA destruction uses new SSA liveness checking"
This reverts commit 98c7de8410.
2009-08-02 18:41:31 -05:00
Slava Pestov a15b20a671 Revert "compiler.cfg.liveness.ssa: remove"
This reverts commit 6144fee101.
2009-08-02 18:41:16 -05:00
Daniel Ehrenberg 665b3921d1 Merge branch 'master' of git://factorcode.org/git/factor 2009-08-02 18:25:37 -04:00
Daniel Ehrenberg f7a53811c1 Merge branch 'master' of git://factorcode.org/git/factor
Conflicts:

	basis/compiler/cfg/ssa/liveness/liveness-tests.factor
2009-08-02 18:23:49 -04:00
Slava Pestov 634e1dd525 compiler.cfg.liveness.ssa: remove 2009-08-02 17:19:01 -05:00
Daniel Ehrenberg 765efc1a66 Removing phi-outs set in SSA liveness checking 2009-08-02 18:15:18 -04:00
Slava Pestov 777bda70dc Merge branch 'master' of git://factorcode.org/git/factor 2009-08-02 17:07:06 -05:00
Slava Pestov 8a8ebcb908 compiler.cfg.ssa.liveness: fix unit tests 2009-08-02 17:06:35 -05:00
Daniel Ehrenberg 3b78d03e2a minor SSA liveness code reorganization 2009-08-02 18:05:51 -04:00
Daniel Ehrenberg cf7ab59fb7 SSA destruction uses new SSA liveness checking 2009-08-02 18:04:45 -04:00
Daniel Ehrenberg d349cc565a def-use puts phi uses in respective predecessors 2009-08-02 18:04:07 -04:00
Slava Pestov 73e7ead209 compiler.cfg.ssa.destruction: add optimization from old destruction pass: don't run on CFGs that have no phi instructions 2009-08-02 10:57:27 -05:00
Slava Pestov ba55633b19 compiler.cfg.ssa.interference: cleanup 2009-08-02 10:35:02 -05:00
Slava Pestov 82c1106945 compiler.cfg.ssa.destruction: new implementation: simpler and more correct 2009-08-02 10:26:52 -05:00
Slava Pestov c1c8424605 Compiler speedups 2009-08-02 09:16:21 -05:00
Slava Pestov 8aa41672ca compiler.cfg.ssa.destruction.copies: factor out add-instructions combinator into compiler.cfg.utilities 2009-08-02 08:20:50 -05:00
Slava Pestov cff5976a0d Move compiler.cfg.ssa.destruction.interference to compiler.cfg.ssa.interference 2009-08-02 08:15:36 -05:00
Slava Pestov 87e13db946 compiler.cfg.ssa.destruction.interference: fix a bug and add unit tests 2009-08-02 08:11:30 -05:00
Slava Pestov 7ec288b013 compiler.cfg.debugger: fix load error 2009-08-02 08:11:04 -05:00
Slava Pestov b5a978d4e5 compiler.cfg.ssa.destruction: add some unit tests 2009-08-02 06:17:44 -05:00
Slava Pestov c61b729125 compiler.cfg.critical-edges: update ##phi nodes 2009-08-02 06:17:22 -05:00
Slava Pestov 01f51a96cd compiler.cfg.utilities: add each-phi combinator to iterate over all ##phi instructions in a basic block 2009-08-02 06:16:58 -05:00
Slava Pestov e1c7f7394a compiler.cfg: clean up unit tests using some new utilities 2009-08-02 03:49:25 -05:00
Slava Pestov 9bde92220b compiler.cfg.two-operand: if last instruction in a basic block is an overflowing arithmetic op of the form x = y op x, we now convert it correctly. This fixes compiler regression with benchmark.dawes after recent coalescing changes 2009-08-01 23:50:47 -05:00
Slava Pestov 1ef9cd27d3 compiler.cfg.copy-prop: eliminate phi nodes that have the same inputs as a previous phi node in the basic block 2009-08-01 22:33:27 -05:00
Slava Pestov 05b7bb0079 Merge branch 'master' of git://factorcode.org/git/factor 2009-08-01 20:22:51 -05:00
Slava Pestov 20ec574965 compiler.cfg.ssa.destruction: fix bug in trivial-interference heuristic, and type error in code path that didn't run before 2009-08-01 20:22:31 -05:00
Daniel Ehrenberg 0838beed1e Merge branch 'master' of git://factorcode.org/git/factor 2009-08-01 20:33:41 -04:00
Slava Pestov 76368cae9b compiler.cfg.liveness.ssa: fix bad bug discovered by littledan 2009-08-01 18:54:24 -05:00
Slava Pestov 2d719534cf compiler.cfg.stacks: kill set now includes all locations eliminated as a result of stack height decrease; reduces number of ##replace instructions generated by 2% 2009-08-01 06:12:43 -05:00
Slava Pestov d515715b0c compiler.cfg.ssa.destruction: fix bug in renaming triggered by sequence-parser:take-sequence 2009-07-31 18:34:15 -05:00
Daniel Ehrenberg 8134d775a8 Faster SSA liveness testing 2009-07-30 15:23:47 -04:00
Slava Pestov be363d1a5b compiler.cfg: Get inline GC checks working again, using a dataflow analysis to compute uninitialized stack locations in compiler.cfg.stacks.uninitialized. Re-enable intrinsics which use inline allocation 2009-07-30 09:19:44 -05:00
Slava Pestov 791fbe4003 compiler.cfg.linear-scan: fix case where a register can be made available for only a part of a live interval's lifetime, but there are no more usages after the split location. This case never came up until global stack analysis, at which point it started to be exercised on x86-32 2009-07-30 02:13:30 -05:00
Slava Pestov 6274c0337a compiler.cfg.ssa.destruction: fix 2009-07-29 23:43:00 -05:00
Slava Pestov b133649edd compiler.cfg.ssa.destruction: tweak in preparation for landing Dan's new SSA liveness analysis 2009-07-29 23:35:51 -05:00
Slava Pestov cb36a40dc4 compiler.cfg.linear-scan: more test fixes 2009-07-29 07:04:52 -05:00
Slava Pestov cb7735ddf4 compiler.cfg: remove 'regs' slot from instruction tuples now that register allocation doesn't use it anymore 2009-07-29 06:50:46 -05:00
Slava Pestov 639a1cbb1f compiler.cfg.linear-scan.resolve: fix unit tests to not depend on hashing 2009-07-29 06:48:01 -05:00
Slava Pestov 74766d1ccd compiler.cfg.linear-scan.assignment: modifies instructions in place instead of storing a registers assoc for further compile-time performance improvement 2009-07-29 06:36:14 -05:00
Slava Pestov 1532a6f2e3 compiler.cfg.linear-scan.assignment: more efficient data structures 2009-07-29 06:12:33 -05:00
Slava Pestov 50bf6f52b4 compiler.cfg.linearization: fix bootstrap 2009-07-28 22:52:07 -05:00
Slava Pestov eabaf9fc40 Merge branch 'master' of git://factorcode.org/git/factor 2009-07-28 21:31:25 -05:00
Slava Pestov 8c6b38533c compiler.cfg.linearization: rotate loops. 2x speedup with empty times loop, 1.5x speedup on benchmark.dawes 2009-07-28 21:31:08 -05:00
Slava Pestov 9afa39aa3a compiler.cfg.ssa.destruction: rename coalesce word to destruct-ssa 2009-07-28 12:56:33 -05:00
Slava Pestov d913d7331f compiler.cfg: Minor optimization. Instructions can now only ever produce a single value; this eliminates 1array constructions and some iterations 2009-07-28 12:29:07 -05:00
Slava Pestov 7d3b6892d5 compiler.cfg.ssa.construction: use the optimization from the pruned-SSA paper to minimize stack pushing and popping 2009-07-28 11:52:42 -05:00
Slava Pestov 62fe308776 compiler.cfg.ssa.construction: Use TDMSC algorithm to compute Phi placement 2009-07-28 11:16:10 -05:00
Slava Pestov d10993b837 compiler.cfg: Rename ssa to ssa.construction, coalescing to ssa.destruction 2009-07-28 09:34:08 -05:00
Slava Pestov 80e10f1bd0 compiler.cfg: Fix some unit tests 2009-07-28 08:56:14 -05:00
Slava Pestov d394dd3c36 compiler.cfg.branch-splitting: re-enable with a better heuristic 2009-07-28 08:48:05 -05:00
Slava Pestov ff81b055a5 compiler.cfg.utilities: add loop-entry? word 2009-07-28 08:47:50 -05:00
Slava Pestov e6f5eab598 compiler.cfg.linear-scan: fix resolve pass 2009-07-28 08:47:35 -05:00
Slava Pestov 3edf4a2b75 compiler.cfg.coalescing: cleanups 2009-07-28 08:47:03 -05:00
Slava Pestov cf26800dbd Revert "compiler.cfg.coalescing: some cleanups"
This reverts commit e5834c4ba7.
2009-07-28 07:51:44 -05:00
Slava Pestov 18717a449f compiler.cfg.linear-scan.resolve: unit tests 2009-07-28 07:41:41 -05:00
Slava Pestov 009cfbfc8d compiler.cfg.utilities: fix stack effect declaration 2009-07-28 07:40:09 -05:00
Slava Pestov 857ef94acc compiler.cfg.linear-scan: use compiler.cfg.parallel-copy in resolve pass 2009-07-28 07:39:46 -05:00
Slava Pestov f2c8f2824a compiler.cfg.coalescing: some cleanups 2009-07-28 07:37:50 -05:00
Slava Pestov 3e6e5278a4 compiler.cfg.utilities: fix load error 2009-07-28 06:51:03 -05:00
Slava Pestov a4cb242396 compiler.cfg.coalescing: Only run if CFG has ##phi nodes, fix interference for case where value is not used in a block and is not live-in, forgot to run liveness analysis first 2009-07-28 06:48:20 -05:00
Slava Pestov 1878b0dc32 compiler.cfg.liveness: fix liveness computation in case where instruction uses a register it defines 2009-07-28 06:45:02 -05:00
Slava Pestov d2b158c8e4 compiler.cfg.critical-edges: reset RPO 2009-07-28 01:04:13 -05:00
Slava Pestov 3cc71a1934 compiler.cfg.coalescing: precompute live intervals, add support for instructions where output cannot equal an input, split critical edges 2009-07-27 22:29:17 -05:00
Slava Pestov e8cf50ac3e compiler.cfg.two-operand: make it work in more cases 2009-07-27 22:28:29 -05:00
Slava Pestov 423d2996fa compiler.cfg.debugger: reset vreg counters 2009-07-27 22:28:13 -05:00
Slava Pestov c5d7ed58a5 Debugging compiler.cfg.coalescing 2009-07-27 19:24:13 -05:00
Slava Pestov 1a765c38da compiler.cfg.parallel-copy: fix algorithm 2009-07-27 16:54:47 -05:00
Slava Pestov 9fa71959b5 compiler.cfg.coalescing: fix shuffling bug 2009-07-27 03:58:01 -05:00
Slava Pestov e112b0d70e compiler.cfg.phi-elimination: no longer needed 2009-07-27 02:20:53 -05:00
Slava Pestov ba696b68b8 compiler.cfg.coalescing: more or less complete, now needs debugging 2009-07-27 02:20:45 -05:00
Slava Pestov a32cbdd231 compiler.cfg.coalescing: more work done 2009-07-27 00:31:21 -05:00
Slava Pestov a5e5510615 compiler.cfg.coalescing: work in progress 2009-07-26 21:11:26 -05:00
Slava Pestov e9935b6aad compiler.cfg.copy-prop: remove ##phi nodes where all inputs are copy-equivalent 2009-07-26 21:11:02 -05:00
Slava Pestov fc41140720 compiler.cfg.utilities: move value-info utilities to compiler.tree.propagation.info 2009-07-26 21:10:33 -05:00
Slava Pestov 1319d8e549 compiler.cfg.def-use: build def-use chains 2009-07-26 21:10:14 -05:00
Slava Pestov 2137c9cc79 compiler.cfg.dominance: add pre order and max pre order numbers; use them to implement dominates? check 2009-07-26 21:10:05 -05:00
Slava Pestov 053de0af40 compiler.cfg.copy-prop: work in progress 2009-07-24 19:56:21 -05:00
Slava Pestov 2fb0198d48 compiler.cfg.parallel-copy: forgot to add this 2009-07-24 19:46:33 -05:00
Slava Pestov 4624af75f4 compiler.cfg.phi-elimination: move some utilities from compiler.cfg.utilities here since that's the only place they get used 2009-07-24 16:45:31 -05:00
Slava Pestov 13c3fdcb5c compiler.cfg: Fixing test failures 2009-07-24 06:08:07 -05:00
Slava Pestov 7068de6cd3 compiler.cfg.copy-prop: Global copy propagation 2009-07-24 05:30:46 -05:00
Slava Pestov e0f6d89ff1 compiler.cfg.value-numbering: insert ##copy instructions for instructions whose expressions simplify. While subsequent usages are replaced with the instruction computing the simplified vreg locally, global usages may exist of the original instruction. In this case, the ##copy is not dead 2009-07-24 05:30:30 -05:00
Slava Pestov de73534424 compiler.cfg.write-barrier: simplify a little bit. It doesn't need to do copy propagation, since its a separate pass now 2009-07-24 05:29:28 -05:00
Slava Pestov 7590ad3574 compiler.cfg: introduce less temporaries when building CFG 2009-07-24 03:37:18 -05:00
Slava Pestov 2bea107202 compiler.cfg.builder: fix stack effect declaration 2009-07-23 21:24:15 -05:00
Slava Pestov d947c61bd7 compiler.cfg.stacks: now performs online local DCN 2009-07-23 20:54:38 -05:00
Slava Pestov b1afd4c491 compiler.cfg.linear-scan.mapping: simplify 2009-07-23 18:03:04 -05:00
Slava Pestov 747a2d72c8 compiler.cfg.empty-blocks: new pass to delete empty blocks, runs after phi elimination 2009-07-23 18:02:46 -05:00
Slava Pestov 93c58a8bb5 compiler.cfg.branch-splitting: now that we do SSA construction we can split branches with fixnum overflow ops (which have a live-out) 2009-07-23 18:02:29 -05:00
Slava Pestov 610c3b33c7 compiler.cfg.intrinsics: Disable inline allocation for now 2009-07-22 21:11:06 -05:00
Slava Pestov 69ded76c66 Fixing compiler tests 2009-07-22 21:10:50 -05:00
Slava Pestov 45c66b58af compiler.cfg.dcn.rewrite: remove unused word 2009-07-22 19:18:12 -05:00
Slava Pestov 5559d77d05 compiler.cfg.checker: eliminate dead code before checking MR 2009-07-22 19:17:57 -05:00
Slava Pestov d29c275089 compiler.cfg.builder: Fix construction of ##return instructions from #return-recursive nodes 2009-07-22 19:17:21 -05:00
Slava Pestov 091d2d07f2 Merge branch 'master' into dcn 2009-07-22 06:19:44 -05:00
Slava Pestov 995a96d7e4 compiler.cfg.dominance: fix unit tests 2009-07-22 06:19:31 -05:00
Slava Pestov 26a5d51d93 compiler.cfg.ssa: now builds pruned SSA form 2009-07-22 06:08:04 -05:00
Slava Pestov d864214119 compiler.cfg.dominance: add algorithm for computing iterated dominance frontiers 2009-07-22 06:07:51 -05:00
Slava Pestov 89db2e745d Move liveness back to compiler.cfg.liveness, fix a corner-case where it didn't work on some forms of non-SSA code 2009-07-22 06:07:28 -05:00
Slava Pestov 31491df5f1 Removed unused code from compiler.cfg.def-use 2009-07-22 06:05:33 -05:00
Slava Pestov 44bcd258f6 Insert _loop-entry in linearization pass instead of in CFG builder, so that optimizations don't have to worry about it 2009-07-22 06:05:17 -05:00
Slava Pestov 1e5ce41364 Fix bootstrap 2009-07-22 03:26:27 -05:00
Slava Pestov 25c42d04fd compiler.cfg: Fix conflicts after merging local optimization refactoring into DCN branch 2009-07-22 03:17:53 -05:00
Slava Pestov 21a012e3d7 compiler.cfg: Major restructuring -- do not compute liveness before local optimization, and instead change local optimizations to be more permissive of undefined values. Now, liveness is only computed once, after phi elimination and before register allocation. This means liveness analysis does not need to take phi nodes into account and can now use the new compiler.cfg.dataflow-analysis framework 2009-07-22 03:08:28 -05:00
Slava Pestov 55111bdc24 Merge branch 'master' into dcn 2009-07-22 02:07:08 -05:00
Slava Pestov c105b033ef Merge branch 'master' of git://factorcode.org/git/factor 2009-07-22 02:06:47 -05:00
Slava Pestov e6a323dfaa compiler.cfg.dataflow-analysis: iterative dataflow analysis framework 2009-07-22 02:06:35 -05:00
Slava Pestov b39b0dd393 compiler.cfg.dcn.global: redo using compiler.cfg.dataflow-analysis 2009-07-22 02:05:40 -05:00
Slava Pestov b869e1250c compiler.cfg.stack-analysis: Out with the old, in with the new 2009-07-22 00:52:25 -05:00
Slava Pestov 86df665f78 Merge branch 'master' of git://factorcode.org/git/factor into dcn 2009-07-22 00:14:53 -05:00
Slava Pestov 1aa6c9a0d5 compiler.cfg: Fix unit tests 2009-07-21 22:25:19 -05:00
Slava Pestov e49de006c4 compiler.cfg.dcn: Fixing various bugs, hook up with optimizer 2009-07-21 22:24:50 -05:00
Slava Pestov cfb584ed8d Merge branch 'master' into dcn 2009-07-21 17:51:22 -05:00
Slava Pestov ead57fc5dd compiler.cfg.registers: minor optimization 2009-07-21 17:49:44 -05:00
Slava Pestov e7e5bee9a2 compiler.cfg.ssa: Cytron's SSA construction algorithm 2009-07-21 17:49:30 -05:00
Slava Pestov 802b4ffdf5 compiler.cfg.dcn: remove stores to stack locations above top of stack (these are never read again) 2009-07-21 17:46:09 -05:00
Slava Pestov 441c2bae2d Merge branch 'master' into dcn 2009-07-21 03:08:42 -05:00
Slava Pestov 3136549f48 compiler.cfg.dominance: fix idom computation, compute dominator tree, compute dominance frontiers, add some tests 2009-07-21 03:02:45 -05:00
Slava Pestov fd9a353fd6 Move conjoin-at from compiler.cfg.liveness to sets 2009-07-21 03:02:06 -05:00
Slava Pestov e16acae2f5 compiler.cfg.dcn: flesh out rewrite pass 2009-07-21 01:24:19 -05:00
Slava Pestov fdef772d67 compiler.cfg: if a block has an instruction that kills values it must be the only instruction in the block 2009-07-19 20:12:04 -05:00
Slava Pestov 0a95ddd105 compiler.cfg.dcn: Implement height tracking 2009-07-19 19:45:23 -05:00
Slava Pestov 605b37a949 compiler.cfg.builder: annotate calls with height changes, once again 2009-07-18 23:08:53 -05:00
Slava Pestov ec1407bdae compiler.cfg.dcn: starting work on deconcatenatization pass to replace compiler.cfg.stack-analysis 2009-07-18 22:27:42 -05:00
Slava Pestov 9cbd6c52a6 compiler.cfg.stack-analysis: fix outdated tests 2009-07-18 06:38:42 -05:00
Slava Pestov 32e4a97855 compiler.cfg.linear-scan: fix tests 2009-07-18 06:10:01 -05:00
Slava Pestov 343151fd62 compiler.tree.finalization: undo a change that resulted in a compile time regression 2009-07-18 03:33:24 -05:00
Slava Pestov 3ee68d1ff5 Disable fixnum>bignum and bignum>fixnum intrinsics since they're not very useful and they increase code size significantly 2009-07-18 01:07:43 -05:00
Slava Pestov ea69566ddd compiler.cfg.linear-scan: algorithmic optimizations 2009-07-18 00:14:39 -05:00
Slava Pestov 5061db2a48 compiler.cfg: Move tail call optimization to the end, compiler.tree: simplify finalization pass because of this 2009-07-17 22:57:28 -05:00
Slava Pestov b83f27af74 compiler.cfg.builder: remove some dead code 2009-07-17 21:52:33 -05:00
Slava Pestov 43fab5b2ae Remove some unnecessary work from stack-analysis pass 2009-07-17 18:39:41 -05:00
Slava Pestov e88e7f70be Merge branch 'master' of git://factorcode.org/git/factor 2009-07-17 00:03:13 -05:00
Slava Pestov 3fb4fc1bde Improve code generation for shift word: add intrinsics for fixnum-shift-fast in the case where the shift count is not constant, transform 1 swap shift into a more overflow check with open-coded fast case, transform bitand into fixnum-bitand in more cases 2009-07-16 23:50:48 -05:00
Daniel Ehrenberg 8ea2996438 Removing two unused words in compiler.cfg.two-operand 2009-07-16 22:59:38 -05:00
Daniel Ehrenberg 3ca5665ad6 Merge branch 'master' of git://factorcode.org/git/factor 2009-07-16 22:42:39 -05:00
Daniel Ehrenberg 8477cf8e91 Phi elimination doesn't have the swap problem now 2009-07-16 22:42:13 -05:00
Slava Pestov e76dce8aff Overflowing fixnum intrinsics now expand into several CFG nodes. This speeds up the common case since only the uncommon case is now a stack syncpoint 2009-07-16 18:29:40 -05:00
Slava Pestov 685e32b091 compiler.cfg.stack-analysis: global optimization work in progress 2009-07-16 16:43:14 -05:00
Slava Pestov fc0e0f1924 compiler.cfg.block-joining: relax join heuristic 2009-07-16 05:50:44 -05:00
Slava Pestov 884e41dd9c compiler.cfg.linear-scan.live-intervals: remove bogus assertion 2009-07-16 02:42:01 -05:00
Slava Pestov 9f926ab88c compiler.cfg.block-joining: join basic blocks connected by a single edge to improve effectiveness of local optimizations 2009-07-16 02:17:58 -05:00
Slava Pestov ebcd0dc252 compiler.cfg: Fix regressions from recent changes 2009-07-14 20:43:06 -05:00
Slava Pestov 4ac74e9304 compiler.cfg.branch-splitting: don't split if there's one predecessor 2009-07-14 20:42:50 -05:00
Slava Pestov 11731f8d48 compiler.cfg.value-numbering: merge in compiler.cfg.branch-folding 2009-07-14 20:05:01 -05:00
Slava Pestov a75d558b30 compiler.cfg.intrinsics.fixnum: don't generate -imm forms anymore since value numbering does it 2009-07-14 19:18:57 -05:00
Slava Pestov 73a2222541 compiler.cfg.value-numbering: branch folding 2009-07-14 19:17:12 -05:00
Slava Pestov 2ace87370e compiler.cfg.value-numbering: more optimizations 2009-07-14 16:05:25 -05:00
Slava Pestov d1eea090b6 compiler.cfg.value-numbering: add some unit tests 2009-07-14 13:25:07 -05:00
Slava Pestov c860a3b1e6 compiler.cfg: update unit tests for compiler.cfg.comparisons 2009-07-14 12:06:55 -05:00
Slava Pestov 5ccf7bc99f Merge branch 'master' of git://factorcode.org/git/factor 2009-07-13 22:59:19 -05:00
Doug Coleman ccae9b59a4 clean up value numbering conversion of ##add/sub to ##add/sub-imm 2009-07-13 19:02:05 -05:00
Slava Pestov 768e2a5148 compiler.cfg: split off condition codes into a comparisons sub-vocabulary 2009-07-13 14:42:52 -05:00
Slava Pestov 3b244d5d41 compiler.cfg.value-numbering: fix ##compare and ##compare-branch rewrites 2009-07-13 12:33:58 -05:00
Slava Pestov d7aeae45be compiler.cfg.branch-splitting: split blocks with successors 2009-07-13 10:44:08 -05:00
Slava Pestov 8ff473e42c compiler.cfg.linear-scan.resolve: get it to work on CFGs with critical edges 2009-07-12 23:00:33 -05:00
Slava Pestov 608fb054f2 compiler.cfg: Some code cleanups, update stack-analysis and phi-insertion to work on CFGs with critical edges 2009-07-12 22:22:46 -05:00
Slava Pestov 1cf6bb7f99 compiler.cfg.linear-scan: disable unit test for unimplemented feature 2009-07-10 07:48:49 -05:00
Slava Pestov ae67de6f90 compiler.cfg.linear-scan: fix fencepost error in spill insertion 2009-07-10 03:58:51 -05:00
Slava Pestov 11347e784c insn. doesn't print numbers 2009-07-10 03:05:45 -05:00
Slava Pestov dea872c7e3 compiler.cfg.linear-scan.allocation: fix broken spill slot reuse logic 2009-07-10 00:25:46 -05:00
Slava Pestov 7edb2df01c Merge branch 'master' of git://factorcode.org/git/factor 2009-07-09 23:14:45 -05:00
Slava Pestov 789d82745c compiler.cfg.value-numbering: factor out value renaming into a separate compiler.cfg.renaming vocabulary 2009-07-09 23:14:26 -05:00
Slava Pestov 6810b922ee compiler.cfg: move back-edge? word from stack-analysis to top-level vocab 2009-07-09 23:13:30 -05:00
Slava Pestov d02854b04e compiler.cfg.linear-scan: two live intervals which are coalesced will use the same spill slot 2009-07-09 23:12:49 -05:00
Slava Pestov bb701bed7e Revert "Remove unused vocabulary" -- committed patch from the wrong machine
This reverts commit 04c3c15411.
2009-07-09 19:50:15 -05:00
Slava Pestov 8008bfb1f9 Remove unused vocabulary 2009-07-09 19:10:36 -05:00
U-SLAVA-DFB8FF805\Slava 508b7272b5 compiler.cfg.optimizer: fix irrelevant test 2009-07-09 06:17:10 -05:00
Slava Pestov d0980edafe compiler.cfg.linear-scan: fixing unit tests 2009-07-09 00:48:00 -05:00
Slava Pestov 5a64290386 compiler.cfg.linear-scan: more code cleanups, and working on split-to-fit algorithm 2009-07-09 00:20:03 -05:00
Slava Pestov 4507bdcbc0 compiler.cfg.linear-scan: code cleanups 2009-07-08 23:28:28 -05:00
Slava Pestov c20e6c290f compiler.cfg.linear-scan: split off parallel mapping code from resolve pass, use it in assignment pass to resolve parallel copies 2009-07-08 23:07:06 -05:00
Slava Pestov e2044602aa compiler.cfg.linear-scan: debugging spilling, add more assertions 2009-07-07 13:01:27 -05:00
Slava Pestov 43c873f00a compiler.cfg.linear-scan: code cleanup 2009-07-07 03:45:27 -05:00
Slava Pestov 0bcf4ce535 compiler.cfg.linear-scan: Re-implement spilling, add some additional runtime assertions, simplify assignment pass since it doesn't have to track spill slots anymore; just assume a live value that's not in active or inactive is spilled 2009-07-07 03:28:55 -05:00
Slava Pestov 4402d8652c compiler.cfg.linear-scan: minor fixes 2009-07-05 22:51:53 -05:00
Slava Pestov a452f32e3a compiler.cfg.linear-scan: Get cycle breaking in resolve pass to work by allocating a spare spill slot for this purpose 2009-07-05 21:32:23 -05:00
Slava Pestov f14a61fac2 Fix compiler.cfg.linear-scan.resolve test failure 2009-07-04 16:30:16 -05:00
Slava Pestov c0f1b2205a compiler.cfg.value-numbering.rewrite: disable ##compare optimizations for now 2009-07-04 03:26:37 -05:00
Slava Pestov fb488025aa compiler.cfg.value-numbering.rewrite: fix ##compare-imm rewrite rule 2009-07-04 02:50:50 -05:00
Slava Pestov c00af97fa1 compiler.cfg.linear-scan.resolve: More fixes 2009-07-04 00:45:06 -05:00
Slava Pestov da13681bc8 compiler.cfg.linear-scan: redo resolve pass to fix a correctness issue 2009-07-03 23:38:52 -05:00
Slava Pestov 8d3a45dee2 compiler.cfg: clean up GC check generation to use spill-slot data type 2009-07-03 23:11:23 -05:00
Slava Pestov d07c0429fc compiler.cfg.linear-scan: assign spill slots to vregs globally, so that resolve pass never has to perform a memory->memory transfer 2009-07-03 22:51:40 -05:00
Doug Coleman cae8fed16c convert ##compare with immediates to ##compare-imm 2009-07-03 19:19:33 -05:00
Slava Pestov 2c3b2a0b71 compiler.cfg.predecessors: delete dead predecessors from phi nodes 2009-07-03 18:45:03 -05:00
Doug Coleman e7a227ad40 add constant folding for integer ops, refactor some rewrites 2009-07-02 19:03:21 -05:00
Doug Coleman f11ba00667 Revert "fix a unit test so it's sure to overflow 64bit machines"
This reverts commit 88a545a215.
2009-07-02 18:18:50 -05:00
Doug Coleman 559a77be43 fix a unit test so it's sure to overflow 64bit machines 2009-07-02 18:05:55 -05:00
Doug Coleman 2aade588ee Merge branch 'master' of git://factorcode.org/git/factor 2009-07-02 18:01:58 -05:00
Doug Coleman e11e3cf6d2 unit test to make sure adds are not optimized incorrectly 2009-07-02 18:01:00 -05:00
Doug Coleman 80eb5068e2 fix bug in rewriting #add -- wasn't checking small-enough?, and change negative adds to subtractions/negative subtractions to adds 2009-07-02 17:55:35 -05:00
Slava Pestov 6d46bf623c compiler.cfg.liveness: update for new ##phi node representation 2009-07-02 17:28:02 -05:00
Slava Pestov 90daf6d03d compiler.cfg: change representation of ##phi nodes. The input slot of ##phi nodes is now an assoc mapping predecessors to values, rather than a sequence of values. This ensures that optimization which delete predecessors can be implemented 2009-07-02 17:10:50 -05:00
Doug Coleman 86901eb01e rewrite rules for add/sub/mul/and/or/xor-imm, rewrite load-immediate/add to be add-imm 2009-07-02 11:35:31 -05:00
Doug Coleman 04cb320c55 simplify sub and sub-imm 2009-07-02 11:33:15 -05:00
Doug Coleman 826464724e add a utility word vreg>constant 2009-07-02 11:32:23 -05:00
Slava Pestov 3a4916462b compiler.cfg.dce: now performs three passes over the CFG to fix a phase ordering issue 2009-07-02 03:17:19 -05:00
Slava Pestov 513a600664 compiler.cfg.dce: minor renamings 2009-07-02 02:41:10 -05:00
Daniel Ehrenberg 392e313f05 Merge branch 'master' of git://factorcode.org/git/factor 2009-07-02 02:31:06 -05:00
Daniel Ehrenberg fcfd7f01a3 Dead code elimination eliminates some dead allocations 2009-07-02 02:30:46 -05:00
Slava Pestov 2de41f01da compiler.cfg.optimizer: enable branch folding 2009-07-02 01:05:59 -05:00
Slava Pestov af875ba836 compiler.cfg: bug fixes in GC check insertion and fixnum intrinsics 2009-07-02 00:51:06 -05:00
Slava Pestov e6b1c21590 compiler.cfg.linear-scan: fix spilling 2009-07-01 22:37:27 -05:00
Slava Pestov a19f22ec82 compiler.cfg.linear-scan: debugging spilling and resolve pass 2009-07-01 17:41:07 -05:00
Slava Pestov 7e3fa45512 compiler.cfg.stack-analysis: fix unit tests for useless-blocks renaming and ##no-tco instruction 2009-06-30 23:17:33 -05:00
Slava Pestov a3b21292b6 Merge branch 'master' of git://factorcode.org/git/factor 2009-06-30 23:07:36 -05:00
Slava Pestov f894baf60e compiler.cfg.optimizer: disable branch folding for now 2009-06-30 23:07:27 -05:00
Slava Pestov 72b6bef19d compiler.cfg.builder: emit less crap after a #terminate node 2009-06-30 23:03:25 -05:00
Doug Coleman 8b728e0a8a Merge branch 'master' of git://factorcode.org/git/factor 2009-06-30 23:02:04 -05:00
Doug Coleman b1c7374175 optimize fixnum*fast and fixnum-shift-fast 2009-06-30 23:01:44 -05:00
Doug Coleman ded1e29d2f combine add-imm instructions into a single add 2009-06-30 22:59:53 -05:00
Slava Pestov 3385e50c43 compiler.cfg.branch-folding: fold away branches where both inputs are the same register. This results in 'push' being compiled slightly better 2009-06-30 22:43:32 -05:00
Slava Pestov fc595a7075 Fix possible infinite loop in skip-empty-blocks and remove redundant test in compiler.cfg.useless-conditionals 2009-06-30 22:43:02 -05:00
Slava Pestov f412bbc6d6 Change branch splitting around a bit, rename useless-blocks to useless-conditionals and rewrite it 2009-06-30 22:11:15 -05:00
Slava Pestov eb7f50adf4 Fix conflict 2009-06-30 21:37:49 -05:00
Slava Pestov 0402790001 compiler.cfg Remove height tracking for ##call instructions, wire in ##no-tco instruction 2009-06-30 21:21:46 -05:00
Slava Pestov 3da560130a compiler.cfg.tco: fix tail call optimization for ##fixnum-mul 2009-06-30 21:08:08 -05:00
Slava Pestov eca718b32d compiler.cfg.builder: fix stack effect 2009-06-30 21:07:55 -05:00
Slava Pestov 612e4b99b0 compiler.cfg.linear-scan.assignment: insert-copy did the wrong thing if the second interval had been split. Fixes compilation of 'trilerp' 2009-06-30 21:07:39 -05:00
Slava Pestov 1acf243cce Fix conflict 2009-06-30 20:16:09 -05:00
Slava Pestov 5c6c3ecd85 compiler.cfg.tco: Tail call optimization moved out of compiler.cfg.builder into its own pass 2009-06-30 20:13:35 -05:00
Doug Coleman 2cd202d175 remove duplicate using 2009-06-30 18:48:52 -05:00
Doug Coleman 357408df3e Merge branch 'master' of git://factorcode.org/git/factor 2009-06-30 18:48:10 -05:00
Doug Coleman 97cd0d584e make commutative operations with immediates output the same IR 2009-06-30 18:47:24 -05:00
Slava Pestov bc2a6c0ecc compiler.cfg.stack-analysis: fix tests 2009-06-30 18:22:54 -05:00
Slava Pestov d199154179 Merge branch 'master' of git://factorcode.org/git/factor 2009-06-30 18:12:00 -05:00
Slava Pestov 3355fa4809 compiler.cfg.stack-analysis: enable global optimization 2009-06-30 18:11:45 -05:00
Slava Pestov 54876d0cba compiler.cfg.linear-scan.assignment: get check-assignment? to work with coalescing 2009-06-30 18:10:53 -05:00
Doug Coleman f1b2550035 Merge branch 'master' of git://factorcode.org/git/factor 2009-06-30 16:45:57 -05:00
Doug Coleman d1f6871081 fix bug where traversal order was lost 2009-06-30 16:44:14 -05:00
Slava Pestov 578b0126fc compiler.cfg.linear-scan: compute-free-pos was broken in the case where more than one inactive interval had the same physical register assigned 2009-06-30 16:07:58 -05:00
Doug Coleman f41f84436c spill to spill-temp, not to virtual spill addresses 2009-06-30 15:40:13 -05:00
Doug Coleman ede8e1ca30 Merge branch 'master' of git://factorcode.org/git/factor 2009-06-30 15:32:11 -05:00
Doug Coleman ea072731d4 add branch splitting pass to compiler.cfg 2009-06-30 15:31:48 -05:00
Slava Pestov 32738dddde compiler.cfg.stack-analysis: fix typos in unit tests 2009-06-29 16:37:40 -05:00
Slava Pestov 82bfaca188 Fix conflict 2009-06-29 01:59:53 -05:00
Slava Pestov 0f68ee3e9a compiler.cfg.linear-scan.resolve: remove redundant vocabs from using list 2009-06-28 22:58:35 -05:00
Slava Pestov 6e72cf9711 compiler.cfg.stack-analysis: fix another corner case with ##peek insertion, and fix changed-loc merging 2009-06-28 22:52:28 -05:00
Doug Coleman 1fab8efeee Merge branch 'master' of git://factorcode.org/git/factor 2009-06-28 16:43:45 -05:00
Doug Coleman 3b0954f63e fix bug in linear-scan.resolve by rewriting entire algorithm 2009-06-28 16:43:17 -05:00
Slava Pestov d4de1d38b9 Merge branch 'master' of git://factorcode.org/git/factor 2009-06-27 17:33:00 -05:00
Slava Pestov d5179b724e compiler.cfg.stack-analysis: Fix case where both an ##inc-d/r and a ##peek get inserted 2009-06-27 17:32:37 -05:00
Doug Coleman 1cb6bc99da Merge branch 'master' of git://factorcode.org/git/factor
Conflicts:
	basis/compiler/cfg/linear-scan/resolve/resolve-tests.factor
2009-06-26 21:51:08 -05:00
Doug Coleman 90017eb248 add spill-temp to compiler.cfg.instructions, implement parallel register assignment in linear-scan.resolve 2009-06-26 21:48:21 -05:00
Slava Pestov ef32eb2e72 Fix bootstrap and unit test 2009-06-26 17:44:33 -05:00
Slava Pestov 96baede36a Redesign compiler.cfg.stack-analysis to make compiler.cfg.height redundant, and to fix some problems 2009-06-26 17:29:55 -05:00
Slava Pestov 22fa524db1 compiler.cfg.stack-analysis: split up into three vocabs 2009-06-24 13:54:43 -05:00
Slava Pestov f3cf8fad2b compiler.cfg.linear-scan: fix unit tests 2009-06-24 13:54:12 -05:00
Slava Pestov c53aca6016 compiler.cfg.linear-scan: fix coalescing to take lifetime holes into account 2009-06-23 21:32:51 -05:00
Slava Pestov 387f6df9e5 compiler.cfg.linear-scan: Debugging resolve pass 2009-06-22 00:24:51 -05:00
Slava Pestov 330bea3cc2 compiler.cfg.linear-scan.resolve: unit tests 2009-06-21 00:23:34 -05:00
Slava Pestov 5a78956956 compiler.cfg.linear-scan: Working on resolve pass 2009-06-21 00:20:01 -05:00