[clang] [llvm] [HLSL] Adding HLSL `clip` function. (PR #114588)
Farzon Lotfi via cfe-commits
cfe-commits at lists.llvm.org
Mon Nov 4 12:45:26 PST 2024
================
@@ -99,6 +99,42 @@ static void initializeAlloca(CodeGenFunction &CGF, AllocaInst *AI, Value *Size,
I->addAnnotationMetadata("auto-init");
}
+static Value *handleHlslClip(const CallExpr *E, CodeGenFunction *CGF) {
+ Value *Op0 = CGF->EmitScalarExpr(E->getArg(0));
+
+ Constant *FZeroConst = ConstantFP::getZero(CGF->FloatTy);
+ Value *CMP;
+
+ if (const auto *VecTy = E->getArg(0)->getType()->getAs<clang::VectorType>()) {
+ FZeroConst = ConstantVector::getSplat(
+ ElementCount::getFixed(VecTy->getNumElements()), FZeroConst);
+ auto *FCompInst = CGF->Builder.CreateFCmpOLT(Op0, FZeroConst);
+ CMP = CGF->Builder.CreateIntrinsic(
+ CGF->Builder.getInt1Ty(), CGF->CGM.getHLSLRuntime().getAnyIntrinsic(),
+ {FCompInst}, nullptr);
+ } else
+ CMP = CGF->Builder.CreateFCmpOLT(Op0, FZeroConst);
+
+ if (CGF->CGM.getTarget().getTriple().isDXIL())
+ return CGF->Builder.CreateIntrinsic(CGF->VoidTy, llvm::Intrinsic::dx_clip,
+ {CMP}, nullptr);
+
+ BasicBlock *LT0 = CGF->createBasicBlock("lt0", CGF->CurFn);
----------------
farzonl wrote:
I would check the target is SPIRV `CGF->CGM.getTarget().getTriple().isSPIRV())`. to future proof this.
https://github.com/llvm/llvm-project/pull/114588
More information about the cfe-commits
mailing list