Date & Time
Thursday, November 18, 2021, 9:30 AM - 10:30 AM
Name
Quick Talks
Description

1) IIntroduction to LLVM-IFS and its usages in Fuchsia build system
2) Integrated Distributed ThinLTO with Icecream
3) Introducing function specialisation, and can we enable it by default?
4) Late Divergence Analysis
5) Flang Update
6) Retrospective on Debugger Support for Bare Metal

Session Type
Quick Talks
Abstract/s
1) Introduction to LLVM-IFS and its usages in Fuchsia build system - LLVM-IFS (LLVM-InterFaceStub) is a tool that jointly produces human-readable text stubs for shared objects and later additionally constructs linkable ELF shared object stubs from the text stubs. In this talk, we aim to provide an introduction of llvm-ifs and how it benefits Fuchsia build. In short, the usages of llvm-ifs in Fuchsia provided several benefits: 1) It makes ABI breaking changes easier to spot and managed as they will change the text stub generated from llvm-ifs. 2) It reduces the incremental builds time as it avoided relinking if ABI didn't change. 3) It accelerates the linking by generating stub shared objects in the early build stage to achieve better parallelism. We hope this tool can benefit other LLVM users. 2) Integrated Distributed ThinLTO with Icecream - Distributed ThinLTO has been supported in LLVM for a few years. However, enabling it for existing software projects is not easy, since the build rule dependencies for the CodeGen phase of ThinLTO are not known at the beginning of the build process. We have implemented integrated Distributed ThinLTO support within the LLD linker. To enable it, the user needs to add one command-line option to the linker command line — and that’s it! Our implementation works with PlayStation's proprietary distributed build system. We have also prototyped support for the Icecream distributed build system. We will talk about the main ideas behind our approach, describing its advantages and challenges. 3) Introducing function specialisation, and can we enable it by default? - Function specialisation is a new interprocedural optimisation (IPO) that has recently been added to LLVM. In this talk, we will first introduce this optimisation. Next, while the transformation itself is relatively straightforward (to implement), the real challenge is not to significantly regress compile-times. We will share our ideas on how we could reach parity with GCC, which has this enabled by default; it's off by default in LLVM for now. There are different ideas as follow up work besides trying to get it enabled by default, such as how the optimisation pipeline would need to look different for PGO, to get it working with ThinLTO, and explicit specialisation. 4) Late Divergence Analysis - For SIMD and SIMT machines, control flow divergence analysis is invaluable for a wide range of optimizations. In this talk, I will discuss several extensions to the IR divergence analysis that support improved backend instruction predication and optimization. These extensions include (1) conserving value divergent information through code lowering, (2) combining value divergent information and control dependent region analysis to identify regions of code where thread control flow diverges, and (3) adding an additional type control flow analysis, thread uniqueness, to identify regions of code where only one thread may be enabled. 5) Flang Update - There is a number of projects targeting SPIR-V format to perform computations on GPU like OpenCL, OpenMP offload, SYCL and HIP. 6) Retrospective on Debugger Support for Bare Metal - We present a few lessons learned from adapting LLDB to massively parallel, SIMT architectures without operating systems. In particular, we present the following challenges: (1) heterogeneous memory, (2) limited stepping ability, and (3) different threading models. In this talk, we will discuss these challenges, what caused them, and how we addressed them.