LLVM and Swift

LLVM developers,

Swift has now been released as open-source at swift.org. You can read all about it over there, but for anyone wondering how this impacts LLVM, let me give a quick overview of where things stand right now. For the most part, Swift is much like any other out-of-tree language front-end. The Swift front-end generates LLVM IR and relies on LLVM for back-end optimizations and code-gen. There are currently some Swift-specific changes that we need in LLVM, so we have a clone of the llvm.org repository on GitHub at github.com/apple/swift-llvm. We merge from trunk frequently and try to minimize out-of-tree changes. More details on that are available at swift.org/contributing/#llvm-and-swift.

We would like to get the LLVM changes for Swift into LLVM trunk and will be working on proposing patches for those changes. The vast majority of the out-of-tree LLVM changes for Swift are related to Swift-specific calling conventions. Some of the cases that we want to optimize are quite different from the existing calling conventions in LLVM and require non-trivial back-end support, including target-specific changes. This is still a work in progress, and we will welcome feedback on the best way to implement these new calling conventions.

There are also some out-of-tree changes for Clang to support Swift. See Doug’s message at http://lists.llvm.org/pipermail/cfe-dev/2015-December/046335.html for details on that.