Commit Graph

79 Commits (ebdf57d175ab2005dbc48fd6e94d74de135f47c7)

Author SHA1 Message Date
Björn Lindqvist 70e9834f2f compiler.cfg.*: new system for emitting spill/reloads for gc calls (#1471)
GC calls were treated as sync points so all registers were spilled
around them. But if the gc call isn't triggered, it is unnecessary to
spill. This commit fixes that by handling ##call-gc specially and
putting ##spill and ##reloads in the same block as the gc call itself.
2016-04-22 19:21:15 +02:00
Björn Lindqvist 92a85ebe86 compiler.*: more compiler docs 2016-04-22 12:57:54 +02:00
Björn Lindqvist 89e98e96a4 compiler.cfg.linear-scan.live-intervals: hairy- and clober-insn moved to
this vocab
2016-04-03 20:56:30 +02:00
Björn Lindqvist 54d7b50d1b compiler.cfg.linear-scan.live-intervals: better way to write insn>sync-point 2016-04-03 20:56:29 +02:00
Björn Lindqvist 026abb9c38 compiler.cfg.linear.scan.*: makes it so ranges and uses are guaranteed
to be vectors

Simplifies the code and makes it a little faster.
2016-04-02 17:48:23 +02:00
Björn Lindqvist 95c1b6bbe3 compiler.cfg.linear-scan.live-intervals: doc lint fixes 2016-04-01 23:42:00 +02:00
Björn Lindqvist a60f122c5e basis.compiler.cfg.linear-scan.*: fixing boostrap problems due to the
word rename

Sorry for the noise.
2016-04-01 20:16:13 +02:00
Björn Lindqvist 52e78441f8 compiler.cfg.linear-scan.live-intervals: simplify uses-vregs* 2016-04-01 19:16:35 +02:00
Björn Lindqvist 76be7b54ed compiler.cfg.linear-scan.*: removed start and end from live-interval-state
They weren't needed because start>> was always equal to ranges min and
end>> ranges max
2016-04-01 19:16:35 +02:00
Björn Lindqvist 804348287c Docs: fix a bunch of help-lint warnings 2015-09-22 08:52:59 +02:00
Björn Lindqvist 4db173cadb compiler.*: random doc and tests updates 2015-09-22 08:52:59 +02:00
Björn Lindqvist aaef9af863 compiler.cfg.*: random doc updates 2015-09-22 08:51:46 +02:00
Björn Lindqvist 89e261f673 compiler.cfg.linear-scan.ranges: remove the live-range definition and
use integer pairs instead

so instead of ranges being a sequence of live-ranges it is now a
sequence of integer pairs instead. That makes the
compiler.cfg.linear-scan.ranges simpler and easier to generalize
2015-09-22 08:51:04 +02:00
Björn Lindqvist 2943e7f246 compiler.cfg.linear-scan.ranges: new word ranges-endpoints and remove relevant-ranges 2015-09-22 08:51:04 +02:00
Björn Lindqvist fb45bc278f compiler.cfg.linear-scan.live-intervals: the reg-class slot can be
removed

it's always the same as vreg>> rep-of reg-class-of so no need to store
that data twice
2015-09-22 08:51:04 +02:00
Björn Lindqvist 68c6654763 compiler.cfg.linear-scan.*: move words for splitting and intersecting ranges to the compiler.cfg.linear-scan.ranges vocab 2015-09-22 08:51:04 +02:00
Björn Lindqvist b8d47ed845 compiler.cfg.linear-scan.ranges: new vocab to contain all the range
related stuff from live intervals
2015-09-22 08:51:03 +02:00
John Benediktsson ceb75057da change ERROR: words from throw-foo back to foo. 2015-08-13 16:13:05 -07:00
Doug Coleman b6be8685c3 basis: ERROR: changes. 2015-08-13 03:20:39 -07:00
Björn Lindqvist 31aae02916 compiler.cfg.linear-scan.live-intervals: simpler code for finding the
sync points in the cfg
2015-07-28 17:58:27 -07:00
Björn Lindqvist c0645ecafe compiler.cfg.linear-scan.*: fix help-lint errors 2015-06-14 16:44:37 +02:00
Björn Lindqvist 5ad35fabd1 compiler.cfg.*: lots of more compiler docs 2015-06-14 16:44:37 +02:00
Björn Lindqvist 418438ab13 compiler.cfg.linear-scan.*: change compute-live-intervals so that it
returns only one sequence, it makes some words a little simpler
2015-06-14 16:44:37 +02:00
John Benediktsson b366a06c41 use reject instead of [ ... not ] filter. 2015-05-12 18:50:34 -07:00
Björn Lindqvist 6215561ad4 compiler.cfg.*: more docs and removing a test that isn't relevant anymore 2015-04-29 09:31:59 -07:00
Björn Lindqvist c3ca8bd859 compiler.cfg.*: even more compiler docs 2015-04-29 09:31:58 -07:00
Björn Lindqvist 997f95196c compiler.cfg.*: lots of new unit tests 2015-04-29 09:31:58 -07:00
Björn Lindqvist 8a011c8366 compiler.cfg.*: more docs 2014-12-15 20:44:07 +01:00
John Benediktsson c65877104e compiler: cleanup usings. 2014-12-13 16:10:21 -08:00
Björn Lindqvist a617855aef Docs: fixing smaller help-lint nitpicks 2014-10-19 14:05:06 +02:00
Björn Lindqvist 164af978ba compiler.cfg.*: more stub docs for cfg construction words 2014-10-19 13:45:42 +02:00
Björn Lindqvist 60ffe0680e kernel: new combinator 2with = with with 2014-07-22 07:40:13 -07:00
Doug Coleman 5f377c0849 compiler: Rename value-info, live-interval 2013-03-23 22:56:47 -07:00
Alex Vondrak e90ce0865c compiler.cfg.ssa.destruction.leaders: break off leader-map to resolve circular dependencies (oops) 2012-12-31 11:20:57 -08:00
John Benediktsson 1987deb359 Fix M: stack effects. 2011-10-13 16:41:17 -07:00
Slava Pestov b052aa61cb compiler.cfg.linear-scan: extend lifetime intervals of base pointers correctly (reported by Anton Gorenko) 2010-09-30 20:49:03 -07:00
Slava Pestov 355d89e8e8 compiler.cfg: now that kill-blocks cannot contain instructions that define vregs we can skip them all 2010-07-27 12:40:31 -04:00
Slava Pestov b776a92546 compiler.cfg.linear-scan: fix bad interaction between split position calculation and register-clobbering instructions 2010-07-18 17:38:52 -04:00
Slava Pestov e27adb2830 compiler: re-architect low-level optimizer to allow more than one output value per instruction 2010-07-13 07:40:14 -04:00
Slava Pestov 5b48cd2a63 FFI rewrite part 5: return value boxing and callback parameter boxing now uses vregs; simplify return value unboxing 2010-05-16 03:43:23 -04:00
Slava Pestov 6d30bb8bf4 compiler.cfg.linear-scan: pointless optimizations 2010-05-14 18:37:08 -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 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 f5c5d8b44c compiler: remove flat machine representation and generate code directly from the CFG 2010-05-03 17:34:32 -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 95ff5ffe51 New GC checks work in progress 2010-05-03 17:34:16 -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