Skip to content

Internals

These pages describe how the compiler is put together. You don't need any of it to write a program. Read it to change the compiler, to write a plugin, or to follow a decision about how something compiled all the way down.

page what it covers
Architecture The pipeline, the package map, the three-path invariant, the cache and incremental builds, the boundary, threads.
The IR The typed SSA IR between analysis and every backend: dialects, passes, .ppyir, the linker, sanitizers, profiles.
Backends The backend boundary, the interface a backend implements, discovery through ppy.backends, passes, validation, the cache key, a whole example.
Conversion and inference What ppy convert and ppy migrate infer and how: where types come from, protocol widening, Final, the strict gate.
Migrating a real project What to hand ppy migrate on a real codebase: profile, carve the kernels, leave the rest.
Plugins How each library integration works, and how to write one against the interface.
Where a solver fits The two places an SMT solver earns its keep: proving overflow guards away and validating the optimizer.
Hardware validation How the accelerator stack is checked on rented GPUs, and what the last run found.