[llvm-dev] [RFC] Heterogeneous LLVM-IR Modules (original) (raw)

David Chisnall via llvm-dev llvm-dev at lists.llvm.org
Thu Jul 30 04:01:01 PDT 2020


On 28/07/2020 07:00, Johannes Doerfert via llvm-dev wrote:

TL;DR -----

Let's allow to merge to LLVM-IR modules for different targets (with compatible data layouts) into a single LLVM-IR module to facilitate host-device code optimizations.

I think it's worth taking a step back here and thinking through the problem. The proposed solution makes me nervous because it is quite a significant change to the compiler flow that comes from thinking of heterogeneous optimisation as an fat LTO problem, when to me it feels more like a thin LTO problem.

At the moment, there's an implicit assumption that everything in a Module will flow to the same CodeGen back end. It can make global assumptions about cost models, can inline everything, and so on.

It sounds as if we have a couple of use cases:

The first case is where the motivating example of constant propagation. This feels like the right approach is something like ThinLTO, where you can collect in one module the fact that a kernel is invoked only with specific constant arguments in the host module and consume that result in the target module.

The second example is what you'd need for things like kernel fusion, where you need to both combine two kernels in the target module and also modify the callers to invoke the single kernel and skip some data flow. For this, you need a kind of pass that can work over things that begin in two modules.

It seems that a less invasive change would be:

This avoids any modifications for the common (single-target) case, but should give you the required functionality. Am I missing something?

David



More information about the llvm-dev mailing list