github ponylang/ponyc 0.54.1

latest releases: 0.58.6, 0.58.5, 0.58.4...
19 months ago

Updated to LLVM 15

The Pony compiler now uses LLVM 15, which includes some significant changes:

Removed MergeRealloc optimization pass

This release removes an optimization pass whose goal was to "merge successive reallocations of the same variable in a single allocation", because it turned out that the pass was not safe, and there was no immediately viable path to make it safe.

Unfortunately this pass was too simplistic and lacked the kind of sophisticated analysis that would be required to detect when reallocation was necessary to preserve program semantics, such as in the case of keeping the left and right sides of an Array.chop and String.chop properly isolated. In certain circumstances, this pass would elide the buffer reallocation that needs to happen for the "copy on extend" semantics of extending the left side after such a chop.

If anyone wishes to do the work of attempting to re-architect this pass in a way that accounts for maintaining isolation of related but distinct pointers, they are welcome to pick up the code from the most recent commit that had this pass and port it for compatibility with latest Pony and LLVM, then carry forward the new plan.

Fix bug in HeapToStack optimization pass

Our "HeapToStack" optimization pass that takes Pony heap allocations and converts them to stack allocations where possible contained a bug where it was incorrectly marking some function calls. This could possibly lead to other optimization passes to make incorrect assumptions about the code which in turn, could lead to incorrect programs being generated.

[0.54.1] - 2023-04-12

Fixed

  • Fix bug in HeapToStack optimization pass (PR #4341)

Changed

Don't miss a new ponyc release

NewReleases is sending notifications on new releases.