summaryrefslogtreecommitdiff
path: root/source/slang/slang-ir-link.h
blob: 92a301c5a6f8416c60f10b520c3dea85ab84bebd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
// slang-ir-link.h
#pragma once

#include "slang-compiler.h"

namespace Slang
{
    struct IRVarLayout;

    struct LinkedIR
    {
        RefPtr<IRModule>    module;
        IRVarLayout*        globalScopeVarLayout;
        List<IRFunc*>       entryPoints;
    };


    // Clone the IR values reachable from the given entry point
    // into the IR module associated with the specialization state.
    // When multiple definitions of a symbol are found, the one
    // that is best specialized for the appropriate compilation
    // target will be used.
    //
    LinkedIR linkIR(
        BackEndCompileRequest*  compileRequest,
        const List<Int>&        entryPointIndices,
        CodeGenTarget           target,
        TargetProgram*          targetProgram);

    // Replace any global constants in the IR module with their
    // definitions, if possible.
    //
    // This pass should always be run shortly after linking the
    // IR, to ensure that constants with identical values are
    // treated as identical for the purposes of specialization.
    //
    void replaceGlobalConstants(IRModule* module);
}