LLVM 22.0.0git
DXILIntrinsicExpansion.cpp File Reference
#include "DXILIntrinsicExpansion.h"
#include "DirectX.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/CodeGen/Passes.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/IR/InstrTypes.h"
#include "llvm/IR/Instruction.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/Intrinsics.h"
#include "llvm/IR/IntrinsicsDirectX.h"
#include "llvm/IR/Module.h"
#include "llvm/IR/PassManager.h"
#include "llvm/IR/Type.h"
#include "llvm/Pass.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/MathExtras.h"

Go to the source code of this file.

Classes

class  DXILIntrinsicExpansionLegacy

Macros

#define DEBUG_TYPE   "dxil-intrinsic-expansion"

Functions

static bool resourceAccessNeeds64BitExpansion (Module *M, Type *OverloadTy, bool IsRaw)
static Valueexpand16BitIsInf (CallInst *Orig)
static Valueexpand16BitIsNaN (CallInst *Orig)
static Valueexpand16BitIsFinite (CallInst *Orig)
static Valueexpand16BitIsNormal (CallInst *Orig)
static bool isIntrinsicExpansion (Function &F)
static ValueexpandUsubSat (CallInst *Orig)
static ValueexpandVecReduceAdd (CallInst *Orig, Intrinsic::ID IntrinsicId)
static ValueexpandAbs (CallInst *Orig)
static ValueexpandCrossIntrinsic (CallInst *Orig)
static ValueexpandFloatDotIntrinsic (CallInst *Orig, Value *A, Value *B)
static ValueexpandFloatDotIntrinsic (CallInst *Orig)
static ValueexpandIntegerDotIntrinsic (CallInst *Orig, Intrinsic::ID DotIntrinsic)
static ValueexpandExpIntrinsic (CallInst *Orig)
static ValueexpandIsFPClass (CallInst *Orig)
static ValueexpandAnyOrAllIntrinsic (CallInst *Orig, Intrinsic::ID IntrinsicId)
static ValueexpandLerpIntrinsic (CallInst *Orig)
static ValueexpandLogIntrinsic (CallInst *Orig, float LogConstVal=numbers::ln2f)
static ValueexpandLog10Intrinsic (CallInst *Orig)
static ValueexpandNormalizeIntrinsic (CallInst *Orig)
static ValueexpandAtan2Intrinsic (CallInst *Orig)
static ValueexpandPowIntrinsic (CallInst *Orig, Intrinsic::ID IntrinsicId)
static ValueexpandStepIntrinsic (CallInst *Orig)
static ValueexpandRadiansIntrinsic (CallInst *Orig)
static bool expandBufferLoadIntrinsic (CallInst *Orig, bool IsRaw)
static bool expandBufferStoreIntrinsic (CallInst *Orig, bool IsRaw)
static Intrinsic::ID getMaxForClamp (Intrinsic::ID ClampIntrinsic)
static Intrinsic::ID getMinForClamp (Intrinsic::ID ClampIntrinsic)
static ValueexpandClampIntrinsic (CallInst *Orig, Intrinsic::ID ClampIntrinsic)
static ValueexpandDegreesIntrinsic (CallInst *Orig)
static ValueexpandSignIntrinsic (CallInst *Orig)
static bool expandIntrinsic (Function &F, CallInst *Orig)
static bool expansionIntrinsics (Module &M)
 INITIALIZE_PASS_BEGIN (DXILIntrinsicExpansionLegacy, DEBUG_TYPE, "DXIL Intrinsic Expansion", false, false) INITIALIZE_PASS_END(DXILIntrinsicExpansionLegacy

Variables

 DEBUG_TYPE
DXIL Intrinsic Expansion
DXIL Intrinsic false

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "dxil-intrinsic-expansion"

Definition at line 32 of file DXILIntrinsicExpansion.cpp.

Function Documentation

◆ expand16BitIsFinite()

◆ expand16BitIsInf()

◆ expand16BitIsNaN()

◆ expand16BitIsNormal()

◆ expandAbs()

◆ expandAnyOrAllIntrinsic()

◆ expandAtan2Intrinsic()

◆ expandBufferLoadIntrinsic()

◆ expandBufferStoreIntrinsic()

◆ expandClampIntrinsic()

Value * expandClampIntrinsic ( CallInst * Orig,
Intrinsic::ID ClampIntrinsic )
static

Definition at line 936 of file DXILIntrinsicExpansion.cpp.

References getMaxForClamp(), getMinForClamp(), llvm::User::getOperand(), and X.

Referenced by expandIntrinsic().

◆ expandCrossIntrinsic()

◆ expandDegreesIntrinsic()

Value * expandDegreesIntrinsic ( CallInst * Orig)
static

Definition at line 949 of file DXILIntrinsicExpansion.cpp.

References llvm::User::getOperand(), llvm::numbers::inv_pi, and X.

Referenced by expandIntrinsic().

◆ expandExpIntrinsic()

◆ expandFloatDotIntrinsic() [1/2]

Value * expandFloatDotIntrinsic ( CallInst * Orig)
static

◆ expandFloatDotIntrinsic() [2/2]

◆ expandIntegerDotIntrinsic()

Value * expandIntegerDotIntrinsic ( CallInst * Orig,
Intrinsic::ID DotIntrinsic )
static

◆ expandIntrinsic()

◆ expandIsFPClass()

◆ expandLerpIntrinsic()

Value * expandLerpIntrinsic ( CallInst * Orig)
static

Definition at line 540 of file DXILIntrinsicExpansion.cpp.

References llvm::User::getOperand(), X, and Y.

Referenced by expandIntrinsic().

◆ expandLog10Intrinsic()

Value * expandLog10Intrinsic ( CallInst * Orig)
static

◆ expandLogIntrinsic()

◆ expandNormalizeIntrinsic()

◆ expandPowIntrinsic()

Value * expandPowIntrinsic ( CallInst * Orig,
Intrinsic::ID IntrinsicId )
static

◆ expandRadiansIntrinsic()

Value * expandRadiansIntrinsic ( CallInst * Orig)
static

Definition at line 699 of file DXILIntrinsicExpansion.cpp.

References llvm::User::getOperand(), llvm::numbers::pi, and X.

Referenced by expandIntrinsic().

◆ expandSignIntrinsic()

◆ expandStepIntrinsic()

Value * expandStepIntrinsic ( CallInst * Orig)
static

◆ expandUsubSat()

Value * expandUsubSat ( CallInst * Orig)
static

Definition at line 246 of file DXILIntrinsicExpansion.cpp.

References A(), B(), llvm::CallBase::getArgOperand(), and llvm::Sub.

Referenced by expandIntrinsic().

◆ expandVecReduceAdd()

Value * expandVecReduceAdd ( CallInst * Orig,
Intrinsic::ID IntrinsicId )
static

◆ expansionIntrinsics()

◆ getMaxForClamp()

Intrinsic::ID getMaxForClamp ( Intrinsic::ID ClampIntrinsic)
static

Definition at line 918 of file DXILIntrinsicExpansion.cpp.

References assert().

Referenced by expandClampIntrinsic().

◆ getMinForClamp()

Intrinsic::ID getMinForClamp ( Intrinsic::ID ClampIntrinsic)
static

Definition at line 927 of file DXILIntrinsicExpansion.cpp.

References assert().

Referenced by expandClampIntrinsic().

◆ INITIALIZE_PASS_BEGIN()

INITIALIZE_PASS_BEGIN ( DXILIntrinsicExpansionLegacy ,
DEBUG_TYPE ,
"DXIL Intrinsic Expansion" ,
false ,
false  )

References DEBUG_TYPE.

◆ isIntrinsicExpansion()

bool isIntrinsicExpansion ( Function & F)
static

Definition at line 198 of file DXILIntrinsicExpansion.cpp.

References F, and resourceAccessNeeds64BitExpansion().

Referenced by expansionIntrinsics().

◆ resourceAccessNeeds64BitExpansion()

bool resourceAccessNeeds64BitExpansion ( Module * M,
Type * OverloadTy,
bool IsRaw )
static

Variable Documentation

◆ DEBUG_TYPE

DEBUG_TYPE

Definition at line 1113 of file DXILIntrinsicExpansion.cpp.

◆ Expansion

DXIL Intrinsic Expansion

◆ false

DXIL Intrinsic false

Definition at line 1114 of file DXILIntrinsicExpansion.cpp.