Comments (1)
As far as I can tell, NFCE just has the passes run in a predefined order, but we can probably make things more complicated than that.
For starters, the fact that simplification and conversion passes change the IR implies a kind of sequential grouping. "Phase" is kind of an overloaded term, so let's call the set of all operations to be done on a particular IR an "era". Each era ends with a simplification pass or conversion pass (or outputting to disk).
Now, if we consider a DAG where each era is a node, and each conversion/simplification pass is an edge, we can, given a target and a starting point, automatically determine an appropriate sequence of conversion/simplification passes. The compiler should (at least in debug mode) verify that only one such path is possible. We then filter out any passes which are unused in this path, including verification, analysis, and improvement passes associated with off-path eras.
Now we construct a new DAG, this time including all passes. We assume that any additional inter-pass dependencies have been annotated appropriately. The resulting DAG can then be topologically sorted, and the resulting sequence used to execute the compilation.
This can be extended, incidentally, to handle automatic recursive compilation, and provides us with a convenient method of handling multiple targets too. Such usage will require that, rather than simply constructing a sequence to be executed, we also consider that passes will be run multiple times on different inputs.
from jeff65.
Related Issues (20)
- Builtin types HOT 2
- Compiled unit format should not use pickle
- Linker should include type assertions for relocations
- Feature proposal: VM-based functions (vmfun)
- Annotation/attribute syntax
- naming issue: "ast" should be "ir" HOT 2
- test_archive.test_roundtrip_archive is flaky
- Logging system
- Inline string literals / string constants HOT 1
- Specify rules for known-expressions
- Unparenthesized calls HOT 2
- Hello world program HOT 2
- Error handling HOT 3
- Nulls/Optionals HOT 1
- AST notation/serialization/deserialization
- Run VICE-based tests under Windows HOT 1
- Run VICE-based tests in CI
- Versioning plan?
- Get Sphinx/RTD set up properly HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from jeff65.