LLVM  9.0.0svn
Functions | Variables
R600OpenCLImageTypeLoweringPass.cpp File Reference

This pass resolves calls to OpenCL image attribute, image resource ID and sampler resource ID getter functions. More...

#include "AMDGPU.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/ADT/Twine.h"
#include "llvm/IR/Argument.h"
#include "llvm/IR/DerivedTypes.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/Instruction.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/Metadata.h"
#include "llvm/IR/Module.h"
#include "llvm/IR/Type.h"
#include "llvm/IR/Use.h"
#include "llvm/IR/User.h"
#include "llvm/Pass.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Transforms/Utils/Cloning.h"
#include "llvm/Transforms/Utils/ValueMapper.h"
#include <cassert>
#include <cstddef>
#include <cstdint>
#include <tuple>
Include dependency graph for R600OpenCLImageTypeLoweringPass.cpp:

Go to the source code of this file.

Functions

static bool IsImageType (StringRef TypeString)
 
static bool IsSamplerType (StringRef TypeString)
 
static FunctionGetFunctionFromMDNode (MDNode *Node)
 
static StringRef AccessQualFromMD (MDNode *KernelMDNode, unsigned ArgIdx)
 
static StringRef ArgTypeFromMD (MDNode *KernelMDNode, unsigned ArgIdx)
 
static MDVector GetArgMD (MDNode *KernelMDNode, unsigned OpIdx)
 
static void PushArgMD (KernelArgMD &MD, const MDVector &V)
 

Variables

static StringRef GetImageSizeFunc = "llvm.OpenCL.image.get.size"
 
static StringRef GetImageFormatFunc = "llvm.OpenCL.image.get.format"
 
static StringRef GetImageResourceIDFunc = "llvm.OpenCL.image.get.resource.id"
 
static StringRef GetSamplerResourceIDFunc
 
static StringRef ImageSizeArgMDType = "__llvm_image_size"
 
static StringRef ImageFormatArgMDType = "__llvm_image_format"
 
static StringRef KernelsMDNodeName = "opencl.kernels"
 
static StringRef KernelArgMDNodeNames []
 
static const unsigned NumKernelArgMDNodes = 5
 

Detailed Description

This pass resolves calls to OpenCL image attribute, image resource ID and sampler resource ID getter functions.

Image attributes (size and format) are expected to be passed to the kernel as kernel arguments immediately following the image argument itself, therefore this pass adds image size and format arguments to the kernel functions in the module. The kernel functions with image arguments are re-created using the new signature. The new arguments are added to the kernel metadata with kernel_arg_type set to "image_size" or "image_format". Note: this pass may invalidate pointers to functions.

Resource IDs of read-only images, write-only images and samplers are defined to be their index among the kernel arguments of the same type and access qualifier.

Definition in file R600OpenCLImageTypeLoweringPass.cpp.

Function Documentation

◆ AccessQualFromMD()

static StringRef AccessQualFromMD ( MDNode KernelMDNode,
unsigned  ArgIdx 
)
static

Definition at line 124 of file R600OpenCLImageTypeLoweringPass.cpp.

References llvm::MDNode::getOperand().

Referenced by PushArgMD().

◆ ArgTypeFromMD()

static StringRef ArgTypeFromMD ( MDNode KernelMDNode,
unsigned  ArgIdx 
)
static

Definition at line 130 of file R600OpenCLImageTypeLoweringPass.cpp.

References llvm::MDNode::getOperand().

Referenced by PushArgMD().

◆ GetArgMD()

static MDVector GetArgMD ( MDNode KernelMDNode,
unsigned  OpIdx 
)
static

Definition at line 136 of file R600OpenCLImageTypeLoweringPass.cpp.

References NumKernelArgMDNodes.

Referenced by PushArgMD().

◆ GetFunctionFromMDNode()

static Function* GetFunctionFromMDNode ( MDNode Node)
static

Definition at line 92 of file R600OpenCLImageTypeLoweringPass.cpp.

Referenced by PushArgMD().

◆ IsImageType()

static bool IsImageType ( StringRef  TypeString)
inlinestatic

Definition at line 82 of file R600OpenCLImageTypeLoweringPass.cpp.

Referenced by PushArgMD().

◆ IsSamplerType()

static bool IsSamplerType ( StringRef  TypeString)
inlinestatic

Definition at line 87 of file R600OpenCLImageTypeLoweringPass.cpp.

Referenced by PushArgMD().

◆ PushArgMD()

static void PushArgMD ( KernelArgMD &  MD,
const MDVector &  V 
)
static

Variable Documentation

◆ GetImageFormatFunc

StringRef GetImageFormatFunc = "llvm.OpenCL.image.get.format"
static

Definition at line 55 of file R600OpenCLImageTypeLoweringPass.cpp.

◆ GetImageResourceIDFunc

StringRef GetImageResourceIDFunc = "llvm.OpenCL.image.get.resource.id"
static

Definition at line 56 of file R600OpenCLImageTypeLoweringPass.cpp.

◆ GetImageSizeFunc

StringRef GetImageSizeFunc = "llvm.OpenCL.image.get.size"
static

Definition at line 54 of file R600OpenCLImageTypeLoweringPass.cpp.

◆ GetSamplerResourceIDFunc

StringRef GetSamplerResourceIDFunc
static
Initial value:
=
"llvm.OpenCL.sampler.get.resource.id"

Definition at line 57 of file R600OpenCLImageTypeLoweringPass.cpp.

◆ ImageFormatArgMDType

StringRef ImageFormatArgMDType = "__llvm_image_format"
static

Definition at line 61 of file R600OpenCLImageTypeLoweringPass.cpp.

◆ ImageSizeArgMDType

StringRef ImageSizeArgMDType = "__llvm_image_size"
static

Definition at line 60 of file R600OpenCLImageTypeLoweringPass.cpp.

◆ KernelArgMDNodeNames

StringRef KernelArgMDNodeNames[]
static
Initial value:
= {
"kernel_arg_addr_space",
"kernel_arg_access_qual",
"kernel_arg_type",
"kernel_arg_base_type",
"kernel_arg_type_qual"}

Definition at line 64 of file R600OpenCLImageTypeLoweringPass.cpp.

◆ KernelsMDNodeName

StringRef KernelsMDNodeName = "opencl.kernels"
static

Definition at line 63 of file R600OpenCLImageTypeLoweringPass.cpp.

◆ NumKernelArgMDNodes

const unsigned NumKernelArgMDNodes = 5
static

Definition at line 70 of file R600OpenCLImageTypeLoweringPass.cpp.

Referenced by GetArgMD(), and PushArgMD().