File: IRBuilder.h

package info (click to toggle)
intel-graphics-compiler 1.0.12504.6-1%2Bdeb12u1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 83,912 kB
  • sloc: cpp: 910,147; lisp: 202,655; ansic: 15,197; python: 4,025; yacc: 2,241; lex: 1,570; pascal: 244; sh: 104; makefile: 25
file content (61 lines) | stat: -rw-r--r-- 2,196 bytes parent folder | download | duplicates (3)
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
/*========================== begin_copyright_notice ============================

Copyright (C) 2022 Intel Corporation

SPDX-License-Identifier: MIT

============================= end_copyright_notice ===========================*/

#ifndef VC_UTILS_GENX_IRBUILDER_H
#define VC_UTILS_GENX_IRBUILDER_H

#include "vc/Utils/GenX/Region.h"

#include "Probe/Assertion.h"

#include <llvm/ADT/Twine.h>
#include <llvm/IR/IRBuilder.h>

namespace llvm {
class Value;
class CallInst;
} // namespace llvm

namespace vc {

// Produces IR that reads group thread ID from r0 register (r0.2[0:7]).
// The produced IR is valid only for target that have payload in memory (PIM).
llvm::Value *getGroupThreadIDForPIM(llvm::IRBuilder<> &IRB);

// Produces IR that reads a region \p R from a vISA variable \p Variable.
llvm::CallInst *
createReadVariableRegion(llvm::GlobalVariable &Variable, const vc::CMRegion &R,
                         llvm::IRBuilder<> &IRB,
                         const llvm::Twine &Name = "rd.var.rgn");

// Produces IR that reads a whole vISA variable \p Variable.
inline llvm::CallInst *
createReadVariableRegion(llvm::GlobalVariable &Variable, llvm::IRBuilder<> &IRB,
                         const llvm::Twine &Name = "rd.var.rgn") {
  return createReadVariableRegion(Variable, {Variable.getValueType()}, IRB,
                                  Name);
}

// Produces IR that writes \p Input to a region \p R of a vISA variable
// \p Variable.
llvm::CallInst *createWriteVariableRegion(llvm::GlobalVariable &Variable,
                                          llvm::Value &Input,
                                          const vc::CMRegion &R,
                                          llvm::IRBuilder<> &IRB);

// Produces IR that writes \p Input to a whole vISA variable \p Variable.
inline llvm::CallInst *createWriteVariableRegion(llvm::GlobalVariable &Variable,
                                                 llvm::Value &Input,
                                                 llvm::IRBuilder<> &IRB) {
  return createWriteVariableRegion(Variable, Input, {Variable.getValueType()},
                                   IRB);
}

} // namespace vc

#endif // VC_UTILS_GENX_IRBUILDER_H