LLVM 20.0.0git
Classes | Namespaces | Macros | Functions | Variables
DXILOpBuilder.cpp File Reference
#include "DXILOpBuilder.h"
#include "DXILConstants.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/IR/Module.h"
#include "llvm/Support/DXILABI.h"
#include "llvm/Support/ErrorHandling.h"
#include <optional>
#include "DXILOperation.inc"

Go to the source code of this file.

Classes

struct  OpStage
 
struct  OpAttribute
 
struct  OpCodeProperty
 

Namespaces

namespace  llvm
 This is an optimization pass for GlobalISel generic memory operations.
 
namespace  llvm::dxil
 

Macros

#define DXIL_OP_OPERATION_TABLE
 

Functions

static const chargetOverloadTypeName (OverloadKind Kind)
 
static OverloadKind getOverloadKind (Type *Ty)
 
static std::string getTypeName (OverloadKind Kind, Type *Ty)
 
static std::string constructOverloadName (OverloadKind Kind, Type *Ty, const OpCodeProperty &Prop)
 
static std::string constructOverloadTypeName (OverloadKind Kind, StringRef TypeName)
 
static StructTypegetOrCreateStructType (StringRef Name, ArrayRef< Type * > EltTys, LLVMContext &Ctx)
 
static StructTypegetResRetType (Type *OverloadTy, LLVMContext &Ctx)
 
static StructTypegetHandleType (LLVMContext &Ctx)
 
static TypegetTypeFromParameterKind (ParameterKind Kind, LLVMContext &Ctx, Type *OverloadTy)
 
static ShaderKind getShaderKindEnum (Triple::EnvironmentType EnvType)
 
static FunctionTypegetDXILOpFunctionType (const OpCodeProperty *Prop, LLVMContext &Context, Type *OverloadTy)
 Construct DXIL function type.
 
template<typename T >
static std::optional< size_t > getPropIndex (ArrayRef< T > PropList, const VersionTuple DXILVer)
 Get index of the property from PropList valid for the most recent DXIL version not greater than DXILVer.
 
static Error llvm::dxil::makeOpError (dxil::OpCode OpCode, Twine Msg)
 

Variables

constexpr StringLiteral DXILOpNamePrefix = "dx.op."
 

Macro Definition Documentation

◆ DXIL_OP_OPERATION_TABLE

#define DXIL_OP_OPERATION_TABLE

Definition at line 165 of file DXILOpBuilder.cpp.

Function Documentation

◆ constructOverloadName()

static std::string constructOverloadName ( OverloadKind  Kind,
Type Ty,
const OpCodeProperty Prop 
)
static

Definition at line 169 of file DXILOpBuilder.cpp.

References DXILOpNamePrefix, and llvm::getTypeName().

Referenced by llvm::dxil::DXILOpBuilder::tryCreateOp().

◆ constructOverloadTypeName()

static std::string constructOverloadTypeName ( OverloadKind  Kind,
StringRef  TypeName 
)
static

Definition at line 179 of file DXILOpBuilder.cpp.

References assert(), and getOverloadTypeName().

Referenced by getResRetType().

◆ getDXILOpFunctionType()

static FunctionType * getDXILOpFunctionType ( const OpCodeProperty Prop,
LLVMContext Context,
Type OverloadTy 
)
static

Construct DXIL function type.

This is the type of a function with the following prototype OverloadType dx.op.<opclass>.<return-type>(int opcode, ) <param-types> are constructed from types in Prop.

Definition at line 288 of file DXILOpBuilder.cpp.

References assert(), llvm::SmallVectorImpl< T >::emplace_back(), llvm::Type::getInt32Ty(), getTypeFromParameterKind(), I, and OpCodeProperty::NumOfParameters.

Referenced by llvm::dxil::DXILOpBuilder::tryCreateOp().

◆ getHandleType()

static StructType * getHandleType ( LLVMContext Ctx)
static

Definition at line 206 of file DXILOpBuilder.cpp.

References getOrCreateStructType().

Referenced by getTypeFromParameterKind().

◆ getOrCreateStructType()

static StructType * getOrCreateStructType ( StringRef  Name,
ArrayRef< Type * >  EltTys,
LLVMContext Ctx 
)
static

◆ getOverloadKind()

static OverloadKind getOverloadKind ( Type Ty)
static

◆ getOverloadTypeName()

static const char * getOverloadTypeName ( OverloadKind  Kind)
static

Definition at line 61 of file DXILOpBuilder.cpp.

References llvm_unreachable.

Referenced by constructOverloadTypeName(), and getTypeName().

◆ getPropIndex()

template<typename T >
static std::optional< size_t > getPropIndex ( ArrayRef< T PropList,
const VersionTuple  DXILVer 
)
static

Get index of the property from PropList valid for the most recent DXIL version not greater than DXILVer.

PropList is expected to be sorted in ascending order of DXIL version.

Definition at line 314 of file DXILOpBuilder.cpp.

References llvm::ArrayRef< T >::rbegin(), llvm::ArrayRef< T >::rend(), and llvm::ArrayRef< T >::size().

Referenced by llvm::dxil::DXILOpBuilder::tryCreateOp().

◆ getResRetType()

static StructType * getResRetType ( Type OverloadTy,
LLVMContext Ctx 
)
static

◆ getShaderKindEnum()

static ShaderKind getShaderKindEnum ( Triple::EnvironmentType  EnvType)
static

◆ getTypeFromParameterKind()

static Type * getTypeFromParameterKind ( ParameterKind  Kind,
LLVMContext Ctx,
Type OverloadTy 
)
static

◆ getTypeName()

static std::string getTypeName ( OverloadKind  Kind,
Type Ty 
)
static

Definition at line 129 of file DXILOpBuilder.cpp.

References getOverloadTypeName(), OS, and llvm::Type::print().

Variable Documentation

◆ DXILOpNamePrefix

constexpr StringLiteral DXILOpNamePrefix = "dx.op."
constexpr

Definition at line 23 of file DXILOpBuilder.cpp.

Referenced by constructOverloadName().