| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
| |
* lisp/emacs-lisp/comp-cstr.el (comp-normalize-valset): Make
it more reproducible.
|
|
|
|
|
|
|
|
| |
* lisp/emacs-lisp/comp-cstr.el (comp-cstr-intersection-no-mem):
intersect pos and neg value sets
* test/lisp/emacs-lisp/comp-cstr-tests.el
(comp-cstr-typespec-tests-alist): Add two tests and fix some
test number.
|
| |
|
|
|
|
|
|
|
| |
* test/lisp/emacs-lisp/comp-cstr-tests.el (comp-ctxt): Remove
`comp-ctxt' definition.
* lisp/emacs-lisp/comp.el (comp-ctxt): Likewise.
* lisp/emacs-lisp/comp-cstr.el (comp-ctxt): Define it here.
|
| |
|
| |
|
| |
|
|
|
|
|
|
| |
* lisp/emacs-lisp/comp-cstr.el (comp-cstr-=): Remove unnecessary
quote.
* lisp/emacs-lisp/comp.el (comp-compile-ctxt-to-file): Likewise.
|
|
|
|
|
|
|
|
| |
* lisp/emacs-lisp/comp-cstr.el (comp-intersect-typesets)
(comp-cstr-imm): Use Use `length=' and family where possible.
* lisp/emacs-lisp/comp.el (comp-add-cond-cstrs-target-block)
(comp-compute-dominator-frontiers)
(batch-byte-native-compile-for-bootstrap): Likewise.
|
|
|
|
|
|
|
| |
* lisp/emacs-lisp/comp-cstr.el
(comp-cstr-intersection-no-hashcons): When negated and
necessary relax dst to t.
* test/src/comp-tests.el (comp-tests-type-spec-tests): Add a test.
|
|
|
|
|
|
|
|
| |
* lisp/emacs-lisp/comp-cstr.el
(comp-cstr-intersection-homogeneous): Fix indent + use `memql'.
(comp-cstr-=): Handle 0.0 -0.0 idiosyncrasy
* test/src/comp-tests.el (comp-tests-type-spec-tests): Add two
tests and fix enumeration.
|
|
|
|
|
|
|
| |
* lisp/emacs-lisp/comp-cstr.el (comp-cstr-=): Don't crash when
truncate fails.
* test/src/comp-test-funcs.el (comp-test-=-nan): Add two functions
to be compiled.
|
|
|
|
|
|
|
|
| |
* lisp/emacs-lisp/comp-cstr.el (comp-cstr): Synthesize
`comp-cstr-shallow-copy'.
(comp-cstr-=): Relax inputs before intersecting them.
* test/src/comp-tests.el (comp-tests-type-spec-tests): Add three
tests.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Extend assumes allowing the following form:
(assume dst (and-nhc src1 src2))
`and-nhc' assume operator allow for constraining correctly
intersections where non hash consed values are not propagated as
values but rather promoted to their types.
* lisp/emacs-lisp/comp-cstr.el
(comp-cstr-intersection-no-hashcons): New function.
* lisp/emacs-lisp/comp.el (comp-emit-assume): Logic update to emit
`and-nhc' operator (implemented in fwprop by
`comp-cstr-intersection-no-hashcons').
(comp-add-cond-cstrs): Map `eq' to `and' assume operator and
`equal' `eql' into `and-nhc'.
(comp-fwprop-insn): Update to handle `and-nhc'.
* test/src/comp-tests.el (comp-tests-type-spec-tests): Add two
tests covering `eql' and `equal' propagation of non hash consed
values.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Extend assumes allowing the following form
(assume dst (= src1 src2))
to caputure '=' semanting during fwprop handling float integer
conversions.
* lisp/emacs-lisp/comp.el (comp-equality-fun-p): Don't treat '=' as
simple equality.
(comp-arithm-cmp-fun-p, comp-negate-arithm-cmp-fun)
(comp-reverse-arithm-fun): Rename and add '=' '!='.
(comp-emit-assume, comp-add-cond-cstrs, comp-fwprop-insn): Update
for new function nameing and to handle '='.
* lisp/emacs-lisp/comp-cstr.el (comp-cstr-=): New function.
* test/src/comp-tests.el (comp-tests-type-spec-tests): Add a bunch
of '=' specific tests.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* lisp/emacs-lisp/comp-cstr.el (comp-cstr-imm-vld-p)
(comp-cstr-imm, comp-cstr-fixnum-p, comp-cstr-symbol-p)
(comp-cstr-cons-p): Move and rename from 'comp.el'.
* lisp/emacs-lisp/comp.el (comp-mvar-type-hint-match-p)
(make-comp-mvar, comp-emit-assume, comp-fwprop-prologue)
(comp-function-foldable-p, comp-function-call-maybe-fold)
(comp-fwprop-call, comp-fwprop-insn, comp-call-optim-func)
(comp-compute-function-type): Update for renamed functions.
* src/comp.c (emit_mvar_rval): Likewise.
* test/src/comp-tests.el (comp-tests-mentioned-p-1)
(comp-tests-cond-rw-checker-val): Likewise.
|
|
|
|
|
|
|
|
| |
* lisp/emacs-lisp/comp-cstr.el (comp-cstr-union-1-no-mem): Fix neg
type shadowing pos values.
* test/lisp/emacs-lisp/comp-cstr-tests.el
(comp-cstr-typespec-tests-alist): Add testcase.
* test/src/comp-tests.el (comp-tests-type-spec-tests): Fix testcase.
|
|
|
|
|
|
|
| |
* lisp/emacs-lisp/comp-cstr.el (comp-cstr->, comp-cstr->=)
(comp-cstr-<, comp-cstr-<=): Fix inverted logic.
* test/src/comp-tests.el (comp-tests-type-spec-tests): Add
three integer constrain tests.
|
|
|
|
|
|
|
|
|
| |
These have the effect of bloating the IR for no effect killing compile
time. The typical cases for that are extremely long backuoted lists.
* lisp/emacs-lisp/comp-cstr.el (comp-cstr-t): New var.
* lisp/emacs-lisp/comp.el (comp-add-call-cstr): No need to add
arg call constraints if this is t.
|
|
|
|
|
|
|
|
|
| |
* lisp/emacs-lisp/comp-cstr.el (comp-cstr-union-1-no-mem): Fix
missing mixed pos neg handling.
* test/lisp/emacs-lisp/comp-cstr-tests.el
(comp-cstr-typespec-tests-alist): Add a test.
* test/src/comp-tests.el (45635): New testcase.
* test/src/comp-test-funcs.el (comp-test-45635-f): New function.
|
|
|
|
|
|
|
|
|
| |
* lisp/emacs-lisp/comp.el (comp-known-predicates)
(comp-known-predicates-h): New constants.
(comp-known-predicate-p, comp-pred-to-cstr): New functions.
* lisp/emacs-lisp/cl-macs.el (cl-deftype-satisfies): Don't define.
* test/src/comp-tests.el (comp-test-45576): New testcase.
* test/src/comp-test-funcs.el (comp-test-45576-f): New function.
|
|
|
|
|
| |
* lisp/emacs-lisp/comp-cstr.el (comp-cstr-empty-p)
(comp-cstr-null-p): Fix missing negation handling.
|
| |
|
|
|
|
|
|
|
|
|
|
| |
* lisp/emacs-lisp/comp.el (comp-emit-assume): Update.
(comp-known-predicate-p): New function.
(comp-add-cond-cstrs): Extend to pattern match predicate calls.
* lisp/emacs-lisp/comp-cstr.el (comp-cstr-null-p)
(comp-pred-to-cstr): New function.
* test/src/comp-tests.el (comp-tests-type-spec-tests): Add a
number of tests and fix comments.
|
| |
|
|
|
|
|
|
|
| |
* lisp/emacs-lisp/comp-cstr.el (comp-cstr-one): New special var.
* lisp/emacs-lisp/comp.el (comp-fwprop-call): Propagate integer
ranges on +1 -1.
* test/src/comp-tests.el (comp-tests-type-spec-tests): Add two tests.
|
|
|
|
|
|
|
|
|
|
| |
* lisp/emacs-lisp/comp-cstr.el (comp-range-+, comp-range--): New
functions.
(comp-cstr-set-range-for-arithm): New macro.
(comp-cstr-add-2, comp-cstr-sub-2, comp-cstr-add, comp-cstr-sub):
New function.
* lisp/emacs-lisp/comp.el (comp-fwprop-call): Wire-up + - integer
range propagation.
|
| |
|
|
|
|
|
|
| |
* lisp/emacs-lisp/comp-cstr.el (comp-cstr-smallest-in-range)
(comp-cstr-greatest-in-range): New function.
(comp-cstr->, comp-cstr->=, comp-cstr-<, comp-cstr-<=): Make use of.
|
|
|
|
|
|
| |
* lisp/emacs-lisp/comp-cstr.el (comp-cstr-set-cmp-range): Add
float handling.
* test/src/comp-tests.el (comp-tests-type-spec-tests): Update results.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* lisp/emacs-lisp/comp-cstr.el (comp-cstr-set-cmp-range)
(comp-cstr->, comp-cstr->=, comp-cstr-<, comp-cstr-<=): New
functions.
* lisp/emacs-lisp/comp.el (comp-equality-fun-p)
(comp-range-cmp-fun-p): New functions.
(comp-collect-rhs): Use `comp-assign-op-p' in place of
`comp-set-op-p'.
(comp-negate-range-cmp-fun, comp-reverse-cmp-fun): New functions.
(comp-emit-assume): Rework to be able to emit also comparision
assumption.
(comp-add-cond-cstrs-simple): Update for new `comp-emit-assume'.
(comp-add-cond-cstrs-simple): Update to emit range assumption.
(comp-fwprop-insn): Execute range assumptions.
* test/src/comp-tests.el (comp-tests-type-spec-tests): Add tests.
|
|
|
|
|
| |
* lisp/emacs-lisp/comp-cstr.el (comp-subtype-p): Memoize.
(comp-cstr-ctxt): Add `subtype-p-mem' slot.
|
|
|
|
|
|
|
| |
* lisp/emacs-lisp/comp-cstr.el (comp-cstr-negation): Symplify (not
t) => nil and (not nil) => t.
* test/lisp/emacs-lisp/comp-cstr-tests.el
(comp-cstr-typespec-tests-alist): Add two tests.
|
|
|
|
|
|
|
|
|
|
|
| |
* lisp/emacs-lisp/comp-cstr.el (comp-cstr-value-negation): New
function.
* lisp/emacs-lisp/comp.el (comp-fwprop-insn): Use
`comp-cstr-value-negation'.
* test/src/comp-test-funcs.el (comp-test-45376-1-f): Rename.
(comp-test-45376-2-f): New funcion.
* test/src/comp-tests.el (bug-45376-1): Rename test.
(bug-45376-2): Add test.
|
|
|
|
|
|
|
| |
* lisp/emacs-lisp/comp-cstr.el (comp-cstr-union-homogeneous): Add
range parameter and handle the non range case.
(comp-cstr-union-1-no-mem, comp-cstr-intersection-no-mem): Update
`comp-cstr-union-homogeneous' call sites.
|
|
|
|
|
|
| |
* lisp/emacs-lisp/comp-cstr.el (comp-cstr-union-1)
(comp-cstr-intersection): Copy input before soting it into the
memoization hash table.
|
| |
|
|
|
|
|
|
|
| |
* lisp/emacs-lisp/comp-cstr.el (comp-cstr-union-1-no-mem): Logic
update.
* test/lisp/emacs-lisp/comp-cstr-tests.el
(comp-cstr-typespec-tests-alist): Add a test.
|
|
|
|
|
|
| |
* lisp/emacs-lisp/comp-cstr.el (comp-cstr-union-1-no-mem)
(comp-cstr-union-1, comp-cstr-intersection-no-mem)
(comp-cstr-intersection): Logic update.
|
|
|
|
|
|
|
| |
* lisp/emacs-lisp/comp-cstr.el (comp-cstr-intersection-no-mem):
Add logic.
* test/lisp/emacs-lisp/comp-cstr-tests.el
(comp-cstr-typespec-tests-alist): Add two tests.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* lisp/emacs-lisp/comp-cstr.el (with-comp-cstr-accessors):
Simplify.
(comp-cstr-empty-p): New Funchion.
(comp-split-pos-neg): Minor.
(comp-normalize-typeset): Logic update.
(comp-union-typesets): Minor.
(comp-intersect-two-typesets): New functio.
(comp-intersect-typesets): Logic update.
(comp-range-union, comp-range-intersection): Minor.
(comp-cstr-union-homogeneous, comp-cstr-union-1-no-mem)
(comp-cstr-intersection-homogeneous)
(comp-cstr-intersection-no-mem, comp-cstr-negation)
(comp-type-spec-to-cstr, comp-cstr-to-type-spec): Logic update.
* lisp/emacs-lisp/comp-cstr.el (with-comp-cstr-accessors): Simplify.
|
|
|
|
|
|
|
|
|
| |
* lisp/emacs-lisp/comp-cstr.el (comp-cstr-ctxt): Add new slot
`intersection-mem'.
(comp-cstr-intersection-homogeneous): Fix non local exit target.
(comp-cstr-intersection-no-mem): Rename from
`comp-cstr-intersection'.
(comp-cstr-intersection): New function.
|
|
|
|
|
|
|
| |
* lisp/emacs-lisp/comp-cstr.el (comp-range-intersection): Cosmetic.
(comp-cstr-intersection-homogeneous): Rename from
`comp-cstr-intersection'.
(comp-cstr-intersection): New function.
|
|
|
|
|
|
|
|
|
|
|
| |
* lisp/emacs-lisp/comp-cstr.el (comp-normalize-valset)
(comp-union-valsets, comp-intersection-valsets)
(comp-normalize-typeset): New functions.
(comp-union-typesets, comp-intersect-typesets)
(comp-cstr-union-homogeneous-no-range, comp-cstr-union-1-no-mem):
Update to return normalized results.
* test/lisp/emacs-lisp/comp-cstr-tests.el
(comp-cstr-typespec-tests-alist): Normalize expected type specifiers.
|
|
|
|
|
| |
* lisp/emacs-lisp/comp-cstr.el (comp-split-pos-neg): New function.
(comp-cstr-union-1-no-mem): Update to call `comp-split-pos-neg'.
|
|
|
|
|
|
| |
* lisp/emacs-lisp/comp-cstr.el (comp-cstrs-homogeneous): New
function.
(comp-cstr-union-1-no-mem): Make use of.
|
|
|
|
|
| |
* lisp/emacs-lisp/comp-cstr.el (comp-cstr-union-1-no-mem): Define
a local function `give-up' as a common fall-back exit point.
|
|
|
|
|
|
|
|
|
| |
* lisp/emacs-lisp/comp-cstr.el (comp-cstr-union-1-no-mem):
Generalize disjoint pos types vs neg values conditions.
(comp-cstr-union-1-no-mem): Do not propagate ranges when we are
already returning integer as generic type.
* test/lisp/emacs-lisp/comp-cstr-tests.el
(comp-cstr-typespec-tests-alist): Add corresponding tests.
|
|
|
|
|
|
|
|
|
|
| |
* lisp/emacs-lisp/comp-cstr.el (comp-cstr): Do not synthesize the
copier.
(comp-cstr-ctxt): Add `union-1-mem-no-range' `union-1-mem-range'
slots.
(comp-cstr-copy): New function.
(comp-cstr-union-1-no-mem): Rename from `comp-cstr-union-1'.
(comp-cstr-union-1): New function.
|
|
|
|
|
|
|
| |
* lisp/emacs-lisp/comp-cstr.el (comp-cstr-union-1): Better handle
mixed positive/negated cases.
* test/lisp/emacs-lisp/comp-cstr-tests.el
(comp-cstr-typespec-tests-alist): Add a number of tests.
|