<feed xmlns='http://www.w3.org/2005/Atom'>
<title>delta/ocaml.git/lambda, branch enter-mod-decl</title>
<subtitle>github.com: ocaml/ocaml
</subtitle>
<link rel='alternate' type='text/html' href='http://91.123.203.49/cgit/delta/ocaml.git/'/>
<entry>
<title>Refactor environment lookup functions</title>
<updated>2019-08-15T14:56:50+00:00</updated>
<author>
<name>Leo White</name>
<email>leo@lpw25.net</email>
</author>
<published>2018-10-12T09:20:21+00:00</published>
<link rel='alternate' type='text/html' href='http://91.123.203.49/cgit/delta/ocaml.git/commit/?id=c19e8b23506e38fc47c110138d50b57fe93f7d7e'/>
<id>c19e8b23506e38fc47c110138d50b57fe93f7d7e</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>matching.ml: correct a missed optimization opportunity in split_no_or</title>
<updated>2019-08-13T13:10:20+00:00</updated>
<author>
<name>Gabriel Scherer</name>
<email>gabriel.scherer@gmail.com</email>
</author>
<published>2019-08-09T13:52:13+00:00</published>
<link rel='alternate' type='text/html' href='http://91.123.203.49/cgit/delta/ocaml.git/commit/?id=b08c4e2efc4497f5250bbde34679007447a9b58b'/>
<id>b08c4e2efc4497f5250bbde34679007447a9b58b</id>
<content type='text'>
One optimization in split_no_or is the insertion of a split before
a last matrix line that has only variables. Splitting a matrix there
creates two default environments (instead of one for the non-split
matrix), the first of which often gets specialized away by further
refinement, and the second one jumping directly to the catch-all
case -- this produces better code.

The code would detect this case (all-variable last row) by calling
`group_var` on all the patterns of the row, but the `group_*`
functions assume that their input is already simplified, and only the
first column of the row is simplified.

The present commit fixes it by defining a predicates that does not
assume the pattern is simple, and check that "all its heads" are
a variable. In the future we will refactor this code using
Parmatch.Simple_head.t, and the function invocation may change.

Note: two testcases are changed in tests/basic/patmatch_split_no_or,
the first is the actual optimization and the second is just
stamp-related noise.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
One optimization in split_no_or is the insertion of a split before
a last matrix line that has only variables. Splitting a matrix there
creates two default environments (instead of one for the non-split
matrix), the first of which often gets specialized away by further
refinement, and the second one jumping directly to the catch-all
case -- this produces better code.

The code would detect this case (all-variable last row) by calling
`group_var` on all the patterns of the row, but the `group_*`
functions assume that their input is already simplified, and only the
first column of the row is simplified.

The present commit fixes it by defining a predicates that does not
assume the pattern is simple, and check that "all its heads" are
a variable. In the future we will refactor this code using
Parmatch.Simple_head.t, and the function invocation may change.

Note: two testcases are changed in tests/basic/patmatch_split_no_or,
the first is the actual optimization and the second is just
stamp-related noise.
</pre>
</div>
</content>
</entry>
<entry>
<title>matching: add some documentation</title>
<updated>2019-08-13T13:10:19+00:00</updated>
<author>
<name>Thomas Refis</name>
<email>thomas.refis@gmail.com</email>
</author>
<published>2019-08-12T15:40:07+00:00</published>
<link rel='alternate' type='text/html' href='http://91.123.203.49/cgit/delta/ocaml.git/commit/?id=3a55b73bd115f4bf8a447d9f8eae19df5708b948'/>
<id>3a55b73bd115f4bf8a447d9f8eae19df5708b948</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>matching: point to extra division example</title>
<updated>2019-08-06T14:13:34+00:00</updated>
<author>
<name>Thomas Refis</name>
<email>thomas.refis@gmail.com</email>
</author>
<published>2019-08-06T14:11:53+00:00</published>
<link rel='alternate' type='text/html' href='http://91.123.203.49/cgit/delta/ocaml.git/commit/?id=1034ef46eb114fae80f581022b282f2e521ed677'/>
<id>1034ef46eb114fae80f581022b282f2e521ed677</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>matching: move spliting decision to its own function</title>
<updated>2019-08-06T14:13:34+00:00</updated>
<author>
<name>Thomas Refis</name>
<email>thomas.refis@gmail.com</email>
</author>
<published>2019-08-06T14:09:12+00:00</published>
<link rel='alternate' type='text/html' href='http://91.123.203.49/cgit/delta/ocaml.git/commit/?id=1db1946346d13977e4d3ff6d07bc8f7f70ba12e8'/>
<id>1db1946346d13977e4d3ff6d07bc8f7f70ba12e8</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>matching: dedup precompile_normal and dont_precompile_var</title>
<updated>2019-08-06T09:20:23+00:00</updated>
<author>
<name>Thomas Refis</name>
<email>thomas.refis@gmail.com</email>
</author>
<published>2019-08-06T09:20:23+00:00</published>
<link rel='alternate' type='text/html' href='http://91.123.203.49/cgit/delta/ocaml.git/commit/?id=acc00cfb38c468295fc0bc70fb96ce55ed29be7a'/>
<id>acc00cfb38c468295fc0bc70fb96ce55ed29be7a</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>matching: decide whether to split early or to raise rows</title>
<updated>2019-08-05T15:44:06+00:00</updated>
<author>
<name>Thomas Refis</name>
<email>thomas.refis@gmail.com</email>
</author>
<published>2019-08-05T15:44:06+00:00</published>
<link rel='alternate' type='text/html' href='http://91.123.203.49/cgit/delta/ocaml.git/commit/?id=a9aa7fda89053bc06cee53a7a809b272c4b6191d'/>
<id>a9aa7fda89053bc06cee53a7a809b272c4b6191d</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>matching: merge collect_group and collect_var</title>
<updated>2019-08-05T11:14:09+00:00</updated>
<author>
<name>Thomas Refis</name>
<email>thomas.refis@gmail.com</email>
</author>
<published>2019-08-05T11:14:09+00:00</published>
<link rel='alternate' type='text/html' href='http://91.123.203.49/cgit/delta/ocaml.git/commit/?id=e8382a55900ef12a05b3836d117d0b66462d812d'/>
<id>e8382a55900ef12a05b3836d117d0b66462d812d</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>matching: get_group =&gt; can_group</title>
<updated>2019-08-02T15:31:06+00:00</updated>
<author>
<name>Thomas Refis</name>
<email>thomas.refis@gmail.com</email>
</author>
<published>2019-08-02T15:31:06+00:00</published>
<link rel='alternate' type='text/html' href='http://91.123.203.49/cgit/delta/ocaml.git/commit/?id=70b34ebc1458d402ea0e0b291aa9a8c0e22d781c'/>
<id>70b34ebc1458d402ea0e0b291aa9a8c0e22d781c</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>matching: share splitting code between both collect functions</title>
<updated>2019-08-02T15:26:40+00:00</updated>
<author>
<name>Thomas Refis</name>
<email>thomas.refis@gmail.com</email>
</author>
<published>2019-08-02T15:26:40+00:00</published>
<link rel='alternate' type='text/html' href='http://91.123.203.49/cgit/delta/ocaml.git/commit/?id=2b089ecd72f5762e5a6f17d74399859dc0f4ca87'/>
<id>2b089ecd72f5762e5a6f17d74399859dc0f4ca87</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
</feed>
