[clang] [llvm] [HLSL] Implement the `smoothstep` intrinsic (PR #132288)
Farzon Lotfi via llvm-commits
llvm-commits at lists.llvm.org
Fri Mar 21 11:30:31 PDT 2025
================
@@ -20955,6 +20955,25 @@ Value *CodeGenFunction::EmitSPIRVBuiltinExpr(unsigned BuiltinID,
/*ReturnType=*/I->getType(), Intrinsic::spv_reflect,
ArrayRef<Value *>{I, N}, nullptr, "spv.reflect");
}
+ case SPIRV::BI__builtin_spirv_smoothstep: {
+ Value *Min = EmitScalarExpr(E->getArg(0));
+ Value *Max = EmitScalarExpr(E->getArg(1));
+ Value *X = EmitScalarExpr(E->getArg(2));
+ assert(E->getArg(0)->getType()->hasFloatingRepresentation() &&
+ E->getArg(1)->getType()->hasFloatingRepresentation() &&
+ E->getArg(2)->getType()->hasFloatingRepresentation() &&
+ "SmoothStep operands must have a float representation");
+ assert((E->getArg(0)->getType()->isScalarType() ||
+ E->getArg(0)->getType()->isVectorType()) &&
+ (E->getArg(1)->getType()->isScalarType() ||
+ E->getArg(1)->getType()->isVectorType()) &&
+ (E->getArg(2)->getType()->isScalarType() ||
+ E->getArg(2)->getType()->isVectorType()) &&
+ "SmoothStep operands must be a scalar or vector");
+ return Builder.CreateIntrinsic(
+ /*ReturnType=*/Min->getType(), Intrinsic::spv_smoothstep,
+ ArrayRef<Value *>{Min, Max, X}, nullptr, "spv.smoothstep");
----------------
farzonl wrote:
could you put an inline comment for the nullptr so I know what exactly we are setting to nullptr?
```cpp
/*blah=*/nullptr
```
https://github.com/llvm/llvm-project/pull/132288
More information about the llvm-commits
mailing list