Slava Pestov
5ed0bc72aa
Merge git://github.com/littledan/Factor into littledan
2010-01-31 02:54:58 +13:00
Slava Pestov
6cc68e889e
stack-checker.dependencies: add tuple layout dependencies for use by 'new' and 'boa'
2010-01-30 09:29:00 +13:00
Slava Pestov
c058343167
Add some utility words to stack-checker.dependencies in preparation for a refactoring
2010-01-30 09:28:59 +13:00
Slava Pestov
26f311279c
Re-defining a tuple class now invalidates cached quotation stack effects
2010-01-30 09:28:59 +13:00
Slava Pestov
c027046857
New 'conditional dependency' mechanism for more accurate recording of recompilation information
2010-01-30 09:28:57 +13:00
Slava Pestov
817bc02392
compiler.tree.propagation.call-effect: clear out dependency tracking variables to ensure that infer calls made by call( as part of the compile process doesn't pollute the dependencies of the word being compiled
2010-01-30 09:28:57 +13:00
Daniel Ehrenberg
52f2ac2bb9
Tests for propagation additions; making fixnum-bit? inline
2010-01-25 20:15:17 -06:00
Daniel Ehrenberg
d3590ea210
Merge branch 'master' of git://factorcode.org/git/factor
...
Conflicts:
basis/compiler/tree/propagation/transforms/transforms.factor
2010-01-20 00:15:55 -06:00
Daniel Ehrenberg
aa1651032d
Adding compiler transforms in propagation
2010-01-20 00:10:49 -06:00
Slava Pestov
9a222a4163
compiler.tree.propagation.call-effect: eliminate some dispatch from call( expansion
2010-01-19 21:08:45 +13:00
Slava Pestov
3b5f7a9ecf
compiler.tree.propagation: ensure that we don't call 'equal?' or 'hashcode' on literals in words being compiled
2010-01-16 20:00:48 +13:00
Slava Pestov
df4fb4a3ee
Removing integers-as-sequences
2010-01-15 07:15:33 +13:00
Slava Pestov
50d68c1b10
Fix input-classes of /i and mod, and add some regression tests with various reductions of the original test-case from the terrain demo
2010-01-14 18:15:51 +13:00
Slava Pestov
47a5e96547
Rework min and max so that behavior with floats and NaNs is consistent between generic arithmetic and open-coded float intrinsics
2010-01-13 22:20:16 +13:00
Slava Pestov
44a604fdbe
compiler.tree: remove some code duplication concerning #alien nodes
2010-01-07 16:06:07 +13: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
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
65d8060075
fix simd intrinsic compilation
2009-11-24 11:37:28 -08:00
Joe Groff
d94ffe6d78
scalar fallbacks for simd intrinsics
2009-11-23 21:24:55 -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
Slava Pestov
0612bc6177
Factor source files should not be executable
2009-11-21 17:50:43 -06:00
Slava Pestov
361c38d5a1
heap-size now has a partial-eval instead of being foldable, and the partial-eval adds a dependency on the C type word. Fixes problem where redefining a struct didn't update specialized array
2009-11-15 11:26:37 -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
Slava Pestov
7377c96a21
compiler.tree.propagation.branches: fix recent constraints change
2009-11-13 07:16:41 -06:00
Slava Pestov
afecb9c758
Fixing call( inline caching
2009-11-13 04:32:33 -06:00
Slava Pestov
86da8ebed9
Instead of bumping the definition counter every time in the VM, bump it only if stack effects changed or macros were redefined
2009-11-13 03:52:14 -06:00
Slava Pestov
720c412431
compiler.tree.propagation: fix bug in constraints that caused retain stack overflow
2009-11-13 03:22:57 -06:00
Slava Pestov
ff25aaef54
compiler.tree.propagation.transforms: inline push if types are known. Speeds up reverse-complement, sort, sum-file benchmarks
2009-11-12 17:24:32 -06:00
Slava Pestov
7afea4c0ea
compiler.tree.propagation: implementing missing case in branch constraints
2009-11-12 17:24:11 -06:00
Slava Pestov
cba12eae37
Invalidate inline caches used by call( and execute( when words are redefined
2009-11-12 16:09:07 -06:00
Slava Pestov
cd2e226afa
stack-checker: split off stack-checker.dependencies from stack-checker.state
2009-11-08 20:34:46 -06:00
Joe Groff
8894e9047c
Merge branch 'master' into simd-cleanup
2009-11-07 22:26:09 -06:00
Joe Groff
00ce8b6a33
deprimitivize tuck and put it to pasture
2009-11-05 22:47:05 -06:00
Daniel Ehrenberg
d2fe75276e
custom inlining for diff and intersect, when given a literal sequence. this cuts off 1/3 of the running time of a microbenchmark
2009-11-05 13:13: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
42493b9778
update compiler.tree.propagation.simd, and don't load it till math.vectors.simd is loaded
2009-11-02 15:09:16 -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
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
Doug Coleman
bd13e018dd
memq? -> member-eq?, sorted-memq? -> sorted-member-eq?
2009-10-28 15:02:00 -05:00
Joe Groff
935c0797c3
update existing code for [let change
2009-10-27 22:05:37 -05:00
Slava Pestov
0c431f1222
compiler.tree.propagation: fix broken corner cases in bitand and shift transforms, exposed by Hugh Aguilar's LC53 benchmark
2009-10-24 01:09:32 -05:00
Slava Pestov
e46259bd33
compiler.tree.propagation.transforms: fix problem with 'shift' transform when input was a bignum
2009-10-23 07:50:56 -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
d9002127fa
have vshuffle accept simd-128 variable byte shuffles
2009-10-10 11:30:11 -05:00
Slava Pestov
366c341c5f
compiler.tree.propagation.branches: fix live-branches computation for #dispatch nodes
2009-10-10 00:23:50 -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
bb93543054
Another identity in value numbering for bitfields
2009-10-08 15:20:42 -05:00
Daniel Ehrenberg
eb31589092
Adding identity to propagation to remove some redundant bitands
2009-10-08 00:59:15 -05:00
Joe Groff
785f8620fd
glue conversion intrinsics to instructions
2009-10-06 20:13:38 -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
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
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
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
7db7b63552
add a %blend-vector intrinsic for v?
2009-09-30 23:03:59 -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
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
530accdad9
io.mmap: fix obsolete tests and get code to inline better
2009-09-28 03:18:27 -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
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
7ea8832556
Tweaks to reduce deployed image size
2009-09-24 06:24:43 -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
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
7cfc63af51
compiler.tree.propagation.branches: M: #phi propagate-around was unnecessary
2009-09-22 17:56:50 -05:00
Daniel Ehrenberg
45ba559ce4
Merge branch 'master' of git://factorcode.org/git/factor into constraints
2009-09-22 16:09:33 -05:00
Daniel Ehrenberg
6e936bdb05
Fixing failing unit tests in compiler.tree.propagation due to constraints
2009-09-22 16:01:14 -05:00
Slava Pestov
0f0bf667b5
Merge branch 'master' of git://factorcode.org/git/factor into integer-simd
2009-09-21 17:58:24 -05:00
Slava Pestov
962d039852
Rename specific-method to method-for-class, rename (effective-method) to method-for-object, and make both much faster
2009-09-21 17:42:20 -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
Slava Pestov
47d8763340
More integer SIMD work
...
- move generated vocab support from specialized-arrays to vocabs.generated
- add fuzz testing to math.vectors.simd
- add alien type support for integer SIMD vectors
- SIMD: parsing word generates a SIMD type, instead of pre-generating them all in math.vectors.simd
2009-09-20 16:48:17 -05:00
Joe Groff
01d2ef415a
get compiler tests loading
2009-09-16 09:20:47 -05:00
Slava Pestov
172219e931
compiler.tree.propagation: fix unary-op type functions with complex number inputs
2009-09-15 14:30:20 -07: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
dd661edf46
compiler.tree.propagation: convert /i of a positive integer by a power of two into a shift
2009-09-11 21:03:11 -05:00
Slava Pestov
7f2e2b1777
Specialized array overhaul
...
- Replace hand-written specialized-arrays.* subvocabularies with new system; instead of USE:ing specialized-arrays.T, do SPECIALIZED-ARRAY: T
- Ditto for specialized-vectors; use SPECIALIZED-VECTOR:
- io.mmap.functor: removed entirely, use <mapped-array> instead
- struct-arrays and struct-vectors have been removed because specialized arrays and vectors subsume them entirely
2009-09-09 22:33:34 -05:00
Slava Pestov
1e5bc3b376
inline alien-vector and set-alien-vector if SIMD is not available for a small speedup
2009-09-08 13:56:17 -05:00
Slava Pestov
bbca00e2ae
Fix conflicts
2009-09-07 23:51:25 -05:00
Slava Pestov
9f9b6bca01
compiler.tree.propagation: type check inputs to unsafe foldable words manually, so that stuff like [ "Hi" { } fixnum+fast ] doesn't crash in the compiler
2009-09-07 23:40:23 -05:00
Slava Pestov
a1ae209f81
compiler.tree.propagation.call-effect: stronger call( inlining; now can inline 'a [ b ] curry call(' where 'a' is literal, [ b ] doesn't infer, but [ a b ] does infer. This simplifies classes.struct:memory>struct
2009-09-07 17:45:03 -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
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
ae051e0c9a
compiler.tree.propagation: type function for clone had an issue, sometimes clone would get optimized out because of incorrect constant folding
2009-09-03 02:40:18 -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
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
ba0f3a9911
compiler.tree.propagation.transforms: don't fail to compile if 'at' called on something that's not an assoc
2009-08-27 18:57:56 -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
f01f7ad6eb
compiler.tree.propagation: bitand custom inlining was wrong if the second input was a bignum
2009-08-20 03:47:07 -05:00
Slava Pestov
2dc99ea05f
Fix interval inference of abs, absq when input is a complex number
2009-08-19 16:06:37 -05:00
Slava Pestov
829107902e
compiler.tree.propagation: improved interval inference for absq eliminates a conditional from math.vectors:distance. Type inference for rational math also a bit sharper now
2009-08-19 02:33:41 -05:00
Slava Pestov
3047d4a451
compiler.tree.propagation: remove method inlining heuristic
2009-08-17 22:29:05 -05:00
Doug Coleman
7c92ab1ea5
move if-zero etc to math, remove 1-/1+ from math
2009-08-14 14:27:23 -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
Slava Pestov
4ecf5a904a
More accurate wrap-interval in compiler.tree.propagation.info fixes test regression; constructing an interval with endpoints at infinity now outputs full-interval
2009-08-12 03:25:53 -05:00
Slava Pestov
7e35723db0
compiler.tree.propagation: be more careful with intervals, ensuring that the inferred interval of a value is a subset of the value class's interval. This improves accuracy, for example [ >fixnum 1 + >fixnum most-positive-fixnum <= ] constant-folds to true
2009-08-10 01:16:49 -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
e400d80d8b
More accurate interval inference for mod, rem, and propagation can now infer intervals in the case where a value might be f. so, [ [ 127 bitand ] [ drop f ] if dup [ 0 >= ] [ not ] if ] now constant-folds down to 't'!
2009-08-08 23:03:45 -05:00
Slava Pestov
61ea749bb6
More accurate interval-mod and interval-rem
2009-08-08 22:01:12 -05:00
Slava Pestov
c3d60e5899
compiler.tree.recursive: more accurate loop detection
2009-08-04 19:18:40 -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
e01fc93812
compiler.tree.propagation.call-effect: fix case where quotation inlining could enter an infinite loop: [ dup call( quot -- ) ] dup call( quot -- ) etc
2009-08-01 23:34:14 -05:00
Slava Pestov
501629cf75
compiler.tree.propagation.info: fix load error
2009-07-27 00:30:24 -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
1d735bc32d
compiler.tree.propagation.transforms: fix shift transform
2009-07-17 00:02:57 -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
062e33f8fb
fixing stupid bug in propagation
2009-07-16 00:43:54 -05:00
Daniel Ehrenberg
ee3e84a1f8
define-partial-eval framework in propagation pass makes it easy to add transforms; moving some transforms from stack checker to propagation, making them stronger
2009-07-16 00:34:50 -05:00
Daniel Ehrenberg
bb06facb01
new is inlined in the propagation pass when the class is known
2009-07-14 14:16:39 -05:00
Daniel Ehrenberg
47500fad06
call( and execute( inline known quotations/words in the propagation pass
2009-07-14 01:12:45 -05:00
Slava Pestov
e0d84eb3a2
compiler.tree.propagation: better length propagation
2009-07-09 02:28:30 -05:00
Doug Coleman
407377fc98
rename peek -> last and update all usages
2009-05-25 16:38:33 -05:00
Doug Coleman
a54c78007b
add a clamp word to math.order, use clamp word throughout libraries
2009-05-24 21:35:50 -05:00
Slava Pestov
66a9416473
Update documentation for stricter vocabulary search path semantics
2009-05-16 00:29:21 -05:00
Slava Pestov
fb6df472a2
Cleaning up USING: lists for new strict semantics
2009-05-14 16:54:16 -05:00
Slava Pestov
b67b617746
Fix compiler breakage if a GENERIC# has an incorrect stack effect declaration
2009-05-12 21:23:52 -05:00
Slava Pestov
466533d509
Fix overly-eager strength reduction for mod, and add a type function for >integer (reported by Joe Groff)
2009-05-07 12:32:06 -05:00
Slava Pestov
029d93a838
Make walker work better with call( and breakpoints which are nested inside combinators
2009-05-05 09:12:32 -05:00
Slava Pestov
f2ec59d658
Fix infinite loop when compiling a word containing a tuple literal with circular structure in it. This was triggered by call( inline caching in core-foundation.fsevents on Mac OS X
2009-05-01 09:36:53 -05:00
Slava Pestov
e5cdb7ac2d
call( fast-path now supports curry and compose
2009-04-30 21:08:29 -05:00
Slava Pestov
964fbd0a24
Fix test failures from ratio/complex built-in removal
2009-04-30 00:38:55 -05:00
Slava Pestov
fc4894fbdf
Replace ratio and complex built-in types with tuples defined in the library. This frees up two lo-tags, so move array and quotation over to these tags and update compiler for new tags
2009-04-30 00:27:35 -05:00
Slava Pestov
3dc9fdf9db
Fleshed out new dispatch code
2009-04-24 20:43:01 -05:00
Slava Pestov
057f75e9a1
Refactor compiler.tree.builder to fix various regressions
2009-04-21 23:02:00 -05:00
Slava Pestov
469c9ee21d
Debugging stack checking
2009-04-21 16:09:53 -05:00
Slava Pestov
05f3f9dcb9
Fixing unit tests for stack effect inference changes
2009-04-20 21:15:19 -05:00
Slava Pestov
8414693142
stack-checker: trust word declarations instead of recursively checking them
2009-04-20 18:44:45 -05:00
Slava Pestov
ec49307c88
Never inline default methods, and fix inlining of methods with hints
2009-04-20 03:27:18 -05:00
Doug Coleman
dba4c0d589
fixing compiler errors in basis
2009-04-17 12:46:04 -05:00
Slava Pestov
0a5b076c11
Make the walker infer
2009-04-16 23:14:11 -05:00
sheeple
a4e62dfdba
Fix for math.parser syntax change
2009-04-13 14:47:39 -05:00
Slava Pestov
37e278ed02
Use [ ] [ ] map-reduce instead of unclip [ ] reduce
2009-04-06 17:50:54 -05:00
Slava Pestov
932d44cab8
Small speedup for code using H{ } clone and with-scope
2009-03-31 08:16:04 -05:00
Slava Pestov
be4fb1e7d9
Move call( and execute( to core
2009-03-16 20:11:36 -05:00
Slava Pestov
4fdb5d0557
Fix infinite fixed point iteration bug found by littledan; generalize-counter-interval wasn't called in all the right places
2009-03-12 17:30:24 -05:00
Slava Pestov
42224eb4e7
Propagation pass: add inlined node counts to total node count, so that the more we inline the less we are eager to inline more
2009-03-06 23:34:01 -06:00
Slava Pestov
03cb32ad9c
Make execute( faster, add execute-unsafe( and make effect tuple slots read only
2009-03-01 20:12:35 -06:00
Slava Pestov
78ce670101
Merge branch 'for-slava' of git://git.rfc1149.net/factor
2009-02-28 14:42:56 -06:00
Slava Pestov
bda8b2dda6
Better inlining for both-fixnums?
2009-02-26 14:11:26 -06:00
Samuel Tardieu
da2ebe21a6
Fix two overzealous [ ] removal in tests
2009-02-18 03:06:14 +01:00
Samuel Tardieu
087d931c36
Remove the tail argument from do/until/while
2009-02-18 02:41:14 +01:00
Slava Pestov
6b25e99470
Add summary for heaps more vocabs
2009-02-16 21:05:13 -06:00
Daniel Ehrenberg
b65b88364c
Updating lots of things to use call( -- )
2009-02-08 22:12:11 -06:00
Doug Coleman
3c408342ef
renaming: contain? -> any?, deep-contains? -> deep-any?, pad-left -> pad-head, pad-right -> pad-tail, trim-left -> trim-head, trim-right -> trim-tail
2009-01-29 22:19:07 -06:00
Doug Coleman
990513db60
use CONSTANT: in basis
2009-02-22 19:13:08 -06:00
Slava Pestov
bf5ff11720
Update usages of all-equal? now that its in the grouping vocab
2009-01-16 15:14:30 -06:00
Doug Coleman
e661c67189
refactor a word to use smart combinators
2009-01-08 23:09:38 -06:00
Slava Pestov
34792a9f23
Remove >r/r>
2008-12-17 19:17:37 -06:00
Slava Pestov
c5160d76e9
Merge qualified, alias, symbols, constants into core
2008-12-17 18:10:01 -06:00
Slava Pestov
60a1378a0a
Faster dynamic variable lookup: 6% speedup in benchmark.fib5
...
- If type of first input of equal? is known but not second, rewrite it as swap equal? and try to inline again
- Fix hints on methods to work better
- Put hints for word and fixnum keys on at* and set-at on hashtables
2008-12-17 14:57:24 -06:00
Slava Pestov
ec23584f48
Finish up O(1) byte array allocation
2008-12-09 18:17:04 -06:00
Slava Pestov
a90118da5d
Add inc-at word to core, and update some usages of at+ to use it instead
2008-12-09 16:54:48 -06:00
Slava Pestov
640b37cb70
More permissive
2008-12-08 19:14:18 -06:00
Slava Pestov
e4f8448eb1
Fix some problems with arithmetic type inference, exposed by recent changes to log2 word
...
- declared input type for bignum-shift was stricter than the runtime behavior, leading to bad propagation of type info if shift count was a bignum
- types inferred for type functions which used number-valued/integer-valued/real-valued were not always precise, eg bignum bignum bitxor => integer
- add interval-log2, type function for (log2)
- remove math-class-min, it was useless
2008-12-07 19:44:49 -06:00
Slava Pestov
145b635eb6
More optimization intended to reduce compile time. Another 10% speedup on compiling empty PEG parser
...
- new map-flat combinator replaces usages of 'map flatten' in compiler
- compiler.tree.def-use.simplified uses an explicit accumulator instead of flatten
- compiler.tree.tuple-unboxing uses an explicit accumulator instead of flatten
- fix inlining regression from last time: custom inlining results would sometimes be discarded
- compiler.tree's 3each and 3map combinators rewritten to not use flip
- rewrite math.partial-dispatch without locals (purely stylistic, no performance increase)
- hand-optimize flip for common arrays-of-arrays case
- don't run escape analysis and tuple unboxing if there are no allocations in the IR
2008-12-06 11:17:19 -06:00
Slava Pestov
a56d480aa6
Various optimizations leading to a 10% speedup on compiling empty EBNF parser:
...
- open-code getenv primitive
- inline tuple predicates in finalization
- faster partial dispatch
- faster built-in type predicates
- faster tuple predicates
- faster lo-tag dispatch
- compile V{ } clone and H{ } clone more efficiently
- add fixnum fast-path to =; avoid indirect branch if two fixnums not eq
- faster >alist on hashtables
2008-12-06 09:16:29 -06:00
Slava Pestov
044e2867d5
Teach compiler about string-nth range
2008-12-05 23:51:58 -06:00
Slava Pestov
aa838dbc2d
Fix compile errors
2008-12-05 09:04:16 -06:00
Slava Pestov
6c7005d588
Tweak inlining heuristic
2008-12-05 01:50:14 -06:00
Slava Pestov
fa6a2047f0
New inlining heuristic: number of usages within this word. Speeds up bootstrap by 10%
2008-12-04 07:05:59 -06:00
Slava Pestov
e5ed7447ed
Removing more >r/r> usages
2008-12-03 08:46:16 -06:00
Slava Pestov
d60c79c9bf
Expand instance? with literal class
2008-12-03 08:11:51 -06:00
Slava Pestov
402da00390
Fixing bootstrap with specialized arrays
2008-12-02 02:44:19 -06:00
Slava Pestov
e8a69a3aea
Fix conflict
2008-11-29 05:14:49 -06:00
Slava Pestov
86d45262dc
Add toutput ype propagation for #alien-invoke and #alien-indirect nodes
2008-11-29 03:47:38 -06:00
Slava Pestov
1fa819191d
Change inlining heuristic so that it behaves the same with dip and >r/r>
2008-11-24 05:46:26 -06:00
Slava Pestov
c678e6e362
Don't use combinators.short-circuit in compiler
2008-11-21 04:00:37 -06:00
Slava Pestov
79bffecc2e
Add type function for /mod
2008-11-21 01:54:56 -06:00
Slava Pestov
2fe364a7bb
Specialized arrays work in progress
2008-11-14 20:18:16 -06:00
Slava Pestov
f04b32ea02
Remove duplicated logic
2008-11-11 09:10:33 -06:00
Slava Pestov
5f4b247072
Propagation pass now uses a stack of hashtables for predicated constraints instead of cloning a hashtable. New strategy for recursive propagation; now converges with fewer iterations. ~15 sec bootstrap time improvement
2008-11-11 08:49:00 -06:00
Slava Pestov
43335d9c36
Intervals now use a special singleton for the full interval to eliminate FP math in the common case; fix a bug in value-info<=
2008-11-11 08:30:14 -06:00
Slava Pestov
bfd119e3b5
I/O ricing: various hints added so that UTF8 and ASCII fastpaths compile with less dispatch. 25% improvement on reverse-complement
2008-11-06 00:02:44 -06:00
Slava Pestov
cc879fa9b7
Tuple layouts are now arrays, instead of built-in types. The superclass
...
array is now part of the tuple layout object itself, and class hashcodes
are stored alongside class words there. This removes 2 indirections when
reading a superclass, and 3 when reading a superclass hashcode.
2008-11-05 22:20:29 -06:00
Slava Pestov
06b99c31ee
Fix regression. If a parsing word called the compiler, it might compile a caller of a generic before the generic gets built, which would throw an error since the inferred effect of the generic might have less inputs than the combination's dispatch#
2008-11-03 20:59:48 -06:00
Slava Pestov
0cc0a41e57
Update for compiler.intrinsics removal
2008-10-20 20:40:36 -05:00
Slava Pestov
f092622fac
CFG IR is now pure SSA
2008-10-20 01:56:28 -05:00
Slava Pestov
c19f2257f4
Fix permission bits
2008-10-02 08:34:49 -05:00
Slava Pestov
f539406ee1
Fold class predicates applied to literals
2008-10-02 05:12:38 -05:00
Slava Pestov
1a865f89ac
Some optimizer change sfores for new codegen
2008-09-17 22:18:08 -05:00
Slava Pestov
01129fb9bd
Add unit test for locals performance regresion
2008-09-13 03:09:16 -05:00
Slava Pestov
10c68ebb21
New modular arithmetic optimization pass
2008-09-12 18:08:38 -05:00
Slava Pestov
54232f80ca
Adding identity optimization pass, tweak inlining heuristic
2008-09-12 08:18:44 -05:00
Slava Pestov
2bf532263d
Oops
2008-09-12 05:36:06 -05:00
Slava Pestov
40da49bef5
Perform loop detection before normalization, clean up normalization pass, more aggressive recursive return value propagation. Fixes regression on nsieve benchmark
2008-09-12 05:17:27 -05:00
Slava Pestov
cf80dd122a
Updating code for make and fry changes
2008-09-10 22:11:40 -05:00
Doug Coleman
8a921c791c
if-empty changes
2008-09-06 19:13:59 -05:00
Slava Pestov
e1716d92b3
Remove delegation slot
2008-09-03 03:46:56 -05:00
Slava Pestov
a4a00f6e40
Adding missing optimizations to finalization pass
2008-09-02 22:59:49 -05:00
Slava Pestov
110a5e5162
Change equality semantics
2008-09-02 02:02:05 -05:00
Slava Pestov
669e0f8f0a
Propagate slot types of literals
2008-09-01 18:25:21 -05:00