LLVM: lib/Target/DirectX/DXILIntrinsicExpansion.cpp File Reference (original) (raw)

Go to the source code of this file.

Macros
#define DEBUG_TYPE "dxil-intrinsic-expansion"
Functions
static bool isIntrinsicExpansion (Function &F)
static Value * expandVecReduceAdd (CallInst *Orig, Intrinsic::ID IntrinsicId)
static Value * expandAbs (CallInst *Orig)
static Value * expandCrossIntrinsic (CallInst *Orig)
static Value * expandFloatDotIntrinsic (CallInst *Orig, Value *A, Value *B)
static Value * expandFloatDotIntrinsic (CallInst *Orig)
static Value * expandIntegerDotIntrinsic (CallInst *Orig, Intrinsic::ID DotIntrinsic)
static Value * expandExpIntrinsic (CallInst *Orig)
static Value * expandAnyOrAllIntrinsic (CallInst *Orig, Intrinsic::ID intrinsicId)
static Value * expandLerpIntrinsic (CallInst *Orig)
static Value * expandLogIntrinsic (CallInst *Orig, float LogConstVal=numbers::ln2f)
static Value * expandLog10Intrinsic (CallInst *Orig)
static Value * expandNormalizeIntrinsic (CallInst *Orig)
static Value * expandAtan2Intrinsic (CallInst *Orig)
static Value * expandPowIntrinsic (CallInst *Orig)
static Value * expandStepIntrinsic (CallInst *Orig)
static Value * expandRadiansIntrinsic (CallInst *Orig)
static Intrinsic::ID getMaxForClamp (Intrinsic::ID ClampIntrinsic)
static Intrinsic::ID getMinForClamp (Intrinsic::ID ClampIntrinsic)
static Value * expandClampIntrinsic (CallInst *Orig, Intrinsic::ID ClampIntrinsic)
static Value * expandDegreesIntrinsic (CallInst *Orig)
static Value * expandSignIntrinsic (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

DEBUG_TYPE

#define DEBUG_TYPE "dxil-intrinsic-expansion"

expandAbs()

expandAnyOrAllIntrinsic()

Definition at line 253 of file DXILIntrinsicExpansion.cpp.

References assert(), Cond, llvm::IRBuilderBase::CreateAnd(), llvm::IRBuilderBase::CreateExtractElement(), llvm::IRBuilderBase::CreateFCmpUNE(), llvm::IRBuilderBase::CreateICmpNE(), llvm::IRBuilderBase::CreateOr(), llvm::ElementCount::getFixed(), llvm::User::getOperand(), llvm::Type::getScalarType(), llvm::ConstantVector::getSplat(), I, llvm::Type::isFloatingPointTy(), llvm::Type::isVectorTy(), and X.

Referenced by expandIntrinsic().

expandAtan2Intrinsic()

Definition at line 365 of file DXILIntrinsicExpansion.cpp.

References llvm::IRBuilderBase::CreateAnd(), llvm::IRBuilderBase::CreateFAdd(), llvm::IRBuilderBase::CreateFCmpOEQ(), llvm::IRBuilderBase::CreateFCmpOGE(), llvm::IRBuilderBase::CreateFCmpOLT(), llvm::IRBuilderBase::CreateFDiv(), llvm::IRBuilderBase::CreateFSub(), llvm::IRBuilderBase::CreateIntrinsic(), llvm::IRBuilderBase::CreateSelect(), llvm::CallBase::getAttributes(), llvm::Instruction::getFastMathFlags(), llvm::User::getOperand(), llvm::CallInst::isTailCall(), llvm:🔢:pi, llvm::CallBase::setAttributes(), llvm::IRBuilderBase::setFastMathFlags(), llvm::CallInst::setTailCall(), X, and Y.

Referenced by expandIntrinsic().

expandClampIntrinsic()

expandCrossIntrinsic()

expandDegreesIntrinsic()

expandExpIntrinsic()

Definition at line 234 of file DXILIntrinsicExpansion.cpp.

References llvm::IRBuilderBase::CreateFMul(), llvm::IRBuilderBase::CreateIntrinsic(), llvm::CallBase::getAttributes(), llvm::ElementCount::getFixed(), getNumElements(), llvm::User::getOperand(), llvm::Type::getScalarType(), llvm::ConstantVector::getSplat(), llvm::CallInst::isTailCall(), llvm::Type::isVectorTy(), llvm:🔢:log2ef, llvm::CallInst::setTailCall(), and X.

Referenced by expandIntrinsic().

expandFloatDotIntrinsic() [1/2]

expandFloatDotIntrinsic() [2/2]

expandIntegerDotIntrinsic()

Definition at line 201 of file DXILIntrinsicExpansion.cpp.

References A, assert(), B, llvm::IRBuilderBase::CreateExtractElement(), llvm::IRBuilderBase::CreateIntrinsic(), llvm::IRBuilderBase::CreateMul(), llvm::User::getOperand(), llvm::Type::getScalarType(), I, llvm::Type::isIntegerTy(), and llvm::Type::isVectorTy().

Referenced by expandIntrinsic().

expandIntrinsic()

Definition at line 525 of file DXILIntrinsicExpansion.cpp.

References llvm::Instruction::eraseFromParent(), expandAbs(), expandAnyOrAllIntrinsic(), expandAtan2Intrinsic(), expandClampIntrinsic(), expandCrossIntrinsic(), expandDegreesIntrinsic(), expandExpIntrinsic(), expandFloatDotIntrinsic(), expandIntegerDotIntrinsic(), expandLerpIntrinsic(), expandLog10Intrinsic(), expandLogIntrinsic(), expandNormalizeIntrinsic(), expandPowIntrinsic(), expandRadiansIntrinsic(), expandSignIntrinsic(), expandStepIntrinsic(), expandVecReduceAdd(), F, and llvm::Value::replaceAllUsesWith().

Referenced by expansionIntrinsics().

expandLerpIntrinsic()

expandLog10Intrinsic()

expandLogIntrinsic()

static Value * expandLogIntrinsic ( CallInst * Orig, float LogConstVal = numbers::ln2f ) static

Definition at line 304 of file DXILIntrinsicExpansion.cpp.

References llvm::IRBuilderBase::CreateFMul(), llvm::IRBuilderBase::CreateIntrinsic(), llvm::CallBase::getAttributes(), llvm::ElementCount::getFixed(), getNumElements(), llvm::User::getOperand(), llvm::Type::getScalarType(), llvm::ConstantVector::getSplat(), llvm::CallInst::isTailCall(), llvm::Type::isVectorTy(), llvm::CallInst::setTailCall(), and X.

Referenced by expandIntrinsic(), and expandLog10Intrinsic().

expandNormalizeIntrinsic()

static Value * expandNormalizeIntrinsic ( CallInst * Orig) static

Definition at line 328 of file DXILIntrinsicExpansion.cpp.

References llvm::IRBuilderBase::CreateFDiv(), llvm::IRBuilderBase::CreateFMul(), llvm::IRBuilderBase::CreateIntrinsic(), llvm::IRBuilderBase::CreateVectorSplat(), expandFloatDotIntrinsic(), llvm::User::getOperand(), llvm::Type::getScalarType(), llvm::Value::getType(), llvm::APFloat::isZero(), llvm::report_fatal_error(), and X.

Referenced by expandIntrinsic().

expandPowIntrinsic()

expandRadiansIntrinsic()

expandSignIntrinsic()

Definition at line 499 of file DXILIntrinsicExpansion.cpp.

References assert(), llvm::IRBuilderBase::CreateFCmpOLT(), llvm::IRBuilderBase::CreateICmpSLT(), llvm::IRBuilderBase::CreateSub(), llvm::IRBuilderBase::CreateZExt(), llvm::Constant::getNullValue(), llvm::User::getOperand(), llvm::Type::getScalarType(), llvm::Value::getType(), llvm::Type::isFloatingPointTy(), llvm::Type::isIntegerTy(), RetTy, and X.

Referenced by expandIntrinsic().

expandStepIntrinsic()

expandVecReduceAdd()

expansionIntrinsics()

static bool expansionIntrinsics ( Module & M) static

getMaxForClamp()

getMinForClamp()

INITIALIZE_PASS_BEGIN()

isIntrinsicExpansion()

DEBUG_TYPE

Expansion

false