File: Argument.h

package info (click to toggle)
intel-graphics-compiler2 2.16.0-2
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 106,644 kB
  • sloc: cpp: 805,640; lisp: 287,672; ansic: 16,414; python: 3,952; yacc: 2,588; lex: 1,666; pascal: 313; sh: 186; makefile: 35
file content (57 lines) | stat: -rw-r--r-- 1,591 bytes parent folder | download
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
/*========================== begin_copyright_notice ============================

Copyright (C) 2024 Intel Corporation

SPDX-License-Identifier: MIT

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

#ifndef IGCLLVM_IR_ARGUMENT_H
#define IGCLLVM_IR_ARGUMENT_H

#include "llvm/IR/Type.h"
#include "llvm/IR/Argument.h"

#include "Probe/Assertion.h"

namespace IGCLLVM {

inline bool hasByRefAttr(const llvm::Argument *arg) {
#if LLVM_VERSION_MAJOR > 11
  return arg->hasByRefAttr();
#else
  return false;
#endif
}

inline llvm::Type *getParamByRefType(const llvm::Argument *arg) {
#if LLVM_VERSION_MAJOR > 11
  return arg->getParamByRefType();
#else
  return nullptr;
#endif
}
inline void setParamByRefType([[maybe_unused]] llvm::Argument *arg, [[maybe_unused]] llvm::Type *param) {
#if LLVM_VERSION_MAJOR > 11
  arg->addAttr(llvm::Attribute::get(arg->getParent()->getContext(), llvm::Attribute::ByRef, param));
#endif
}

inline llvm::Type *getArgAttrEltTy(const llvm::Argument *Arg) {
  llvm::AttributeSet ParamAttrs = Arg->getParent()->getAttributes().getParamAttrs(Arg->getArgNo());
  if (llvm::Type *ByValTy = ParamAttrs.getByValType())
    return ByValTy;
  if (llvm::Type *ByRefTy = ParamAttrs.getByRefType())
    return ByRefTy;
  if (llvm::Type *PreAllocTy = ParamAttrs.getPreallocatedType())
    return PreAllocTy;
  if (llvm::Type *InAllocaTy = ParamAttrs.getInAllocaType())
    return InAllocaTy;
  if (llvm::Type *SRetTy = ParamAttrs.getStructRetType())
    return SRetTy;
  return nullptr;
}

} // namespace IGCLLVM

#endif // IGCLLVM_IR_ARGUMENT_H