================
@@ -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,
----------------
farzonl wrote:
Right now, you have  `@llvm.spv.clip()` maps to `OpDemoteToHelperInvocation`  
or `OpKill` depending on some extension availability. What I'm suggesting is 
twofold. First make your intrinsic map to the same number of arguments as your 
clang alias. Second that will mean that means register 1 to `selectClip` is 
what you will be used by `selectAny` Then do your branch invocations only in 
the spirv backend. In summary the instruction selection will be everything you 
need for this intrinsic not just OpDemoteToHelperInvocation`  or `OpKill`.

https://hlsl.godbolt.org/z/ose5EGWEx
```
%21 = OpFOrdLessThan %v4bool %20 %11
 %22 = OpAny %bool %21
             OpSelectionMerge %23 None
             OpBranchConditional %22 %24 %23
%24 = OpLabel
            OpKill | OpDemoteToHelperInvocation
 %23 = OpLabel
```

https://github.com/llvm/llvm-project/pull/114588
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to