LLVM 20.0.0git
Classes | Namespaces | Macros | Functions | Variables
DXILOpBuilder.cpp File Reference
#include "DXILOpBuilder.h"
#include "DXILConstants.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
 
#define DXIL_OP_FUNCTION_TYPE(OpCode, RetType, ...)
 

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 TypegetTypeFromOpParamType (OpParamType Kind, LLVMContext &Ctx, Type *OverloadTy)
 
static ShaderKind getShaderKindEnum (Triple::EnvironmentType EnvType)
 
static SmallVector< Type * > getArgTypesFromOpParamTypes (ArrayRef< dxil::OpParamType > Types, LLVMContext &Context, Type *OverloadTy)
 
static FunctionTypegetDXILOpFunctionType (dxil::OpCode OpCode, 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_FUNCTION_TYPE

#define DXIL_OP_FUNCTION_TYPE (   OpCode,
  RetType,
  ... 
)
Value:
case OpCode: \
return FunctionType::get( \
getTypeFromOpParamType(RetType, Context, OverloadTy), \
getArgTypesFromOpParamTypes({__VA_ARGS__}, Context, OverloadTy), \
/*isVarArg=*/false);
static Type * getTypeFromOpParamType(OpParamType Kind, LLVMContext &Ctx, Type *OverloadTy)
static SmallVector< Type * > getArgTypesFromOpParamTypes(ArrayRef< dxil::OpParamType > Types, LLVMContext &Context, Type *OverloadTy)

◆ 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().

◆ getArgTypesFromOpParamTypes()

static SmallVector< Type * > getArgTypesFromOpParamTypes ( ArrayRef< dxil::OpParamType Types,
LLVMContext Context,
Type OverloadTy 
)
static

◆ getDXILOpFunctionType()

static FunctionType * getDXILOpFunctionType ( dxil::OpCode  OpCode,
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 296 of file DXILOpBuilder.cpp.

References llvm_unreachable.

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 getTypeFromOpParamType().

◆ 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 60 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 316 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

◆ getTypeFromOpParamType()

static Type * getTypeFromOpParamType ( OpParamType  Kind,
LLVMContext Ctx,
Type OverloadTy 
)
static

◆ getTypeName()

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

Definition at line 131 of file DXILOpBuilder.cpp.

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

Variable Documentation

◆ DXILOpNamePrefix

constexpr StringLiteral DXILOpNamePrefix = "dx.op."
constexpr

Definition at line 22 of file DXILOpBuilder.cpp.

Referenced by constructOverloadName().