File: igc_resourceDimTypes.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 (63 lines) | stat: -rw-r--r-- 2,566 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
58
59
60
61
62
63
/*========================== begin_copyright_notice ============================

Copyright (C) 2018-2021 Intel Corporation

SPDX-License-Identifier: MIT

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

#pragma once

#include "common/LLVMWarningsPush.hpp"
#include <llvm/IR/Module.h>
#include <llvm/IR/IRBuilder.h>
#include "common/LLVMWarningsPop.hpp"
#include "Probe/Assertion.h"

namespace IGC {
enum RESOURCE_DIMENSION_TYPE {
  DIM_TYPED_BUFFER_TYPE = 0,
  DIM_1D_TYPE,
  DIM_1D_ARRAY_TYPE,
  DIM_2D_TYPE,
  DIM_2D_ARRAY_TYPE,
  DIM_3D_TYPE,
  DIM_CUBE_TYPE,
  DIM_CUBE_ARRAY_TYPE,
  NUM_RESOURCE_DIMENSION_TYPES
};

const char *const ResourceDimensionTypeName[RESOURCE_DIMENSION_TYPE::NUM_RESOURCE_DIMENSION_TYPES] = {
    "__Buffer_Typed_DIM_Resource", "__1D_DIM_Resource", "__1D_ARRAY_DIM_Resource", "__2D_DIM_Resource",
    "__2D_ARRAY_DIM_Resource",     "__3D_DIM_Resource", "__Cube_DIM_Resource",     "__Cube_ARRAY_DIM_Resource"};

inline llvm::Type *CreateResourceDimensionType(llvm::LLVMContext &llvmCtx, RESOURCE_DIMENSION_TYPE resourceDimType) {
  return llvm::StructType::create(llvmCtx, ResourceDimensionTypeName[resourceDimType]);
}

inline void CreateResourceDimensionTypes(llvm::LLVMContext &llvmCtx) {
  for (unsigned int resourceDimTypeId = 0;
       resourceDimTypeId < (unsigned int)RESOURCE_DIMENSION_TYPE::NUM_RESOURCE_DIMENSION_TYPES; resourceDimTypeId++) {
    CreateResourceDimensionType(llvmCtx, static_cast<RESOURCE_DIMENSION_TYPE>(resourceDimTypeId));
  }
}

inline llvm::Type *GetResourceDimensionType(const llvm::Module &module, RESOURCE_DIMENSION_TYPE resourceDimTypeId) {
  IGC_ASSERT((resourceDimTypeId == DIM_TYPED_BUFFER_TYPE || resourceDimTypeId == DIM_1D_TYPE ||
              resourceDimTypeId == DIM_1D_ARRAY_TYPE || resourceDimTypeId == DIM_2D_TYPE ||
              resourceDimTypeId == DIM_2D_ARRAY_TYPE || resourceDimTypeId == DIM_3D_TYPE ||
              resourceDimTypeId == DIM_CUBE_TYPE || resourceDimTypeId == DIM_CUBE_ARRAY_TYPE));

  llvm::LLVMContext &llvmCtx = module.getContext();
  return llvm::StructType::getTypeByName(llvmCtx, ResourceDimensionTypeName[resourceDimTypeId]);
}

inline llvm::Type *GetOrCreateResourceDimensionType(const llvm::Module &module,
                                                    RESOURCE_DIMENSION_TYPE resourceDimTypeId) {
  llvm::Type *pRet = GetResourceDimensionType(module, resourceDimTypeId);
  if (pRet == nullptr) {
    pRet = CreateResourceDimensionType(module.getContext(), resourceDimTypeId);
  }
  return pRet;
}
} // namespace IGC