[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
- Previous message: [llvm-dev] [RFC] Heterogeneous LLVM-IR Modules
- Next message: [llvm-dev] [RFC] Heterogeneous LLVM-IR Modules
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
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:
- Analysis flow between modules
- Transforms that modify two modules
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:
- Use ThinLTO metadata for the first case, extend it as required.
- Add a new kind of ModuleSetPass that takes a set of Modules and is allowed to modify both.
This avoids any modifications for the common (single-target) case, but should give you the required functionality. Am I missing something?
David
- Previous message: [llvm-dev] [RFC] Heterogeneous LLVM-IR Modules
- Next message: [llvm-dev] [RFC] Heterogeneous LLVM-IR Modules
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]