[clang] [llvm] Add normalize builtins and normalize HLSL function to DirectX and SPIR-V backend (PR #102683)
Joshua Batista via cfe-commits
cfe-commits at lists.llvm.org
Mon Aug 12 12:24:15 PDT 2024
================
@@ -18584,6 +18584,29 @@ Value *CodeGenFunction::EmitHLSLBuiltinExpr(unsigned BuiltinID,
CGM.getHLSLRuntime().getLengthIntrinsic(), ArrayRef<Value *>{X},
nullptr, "hlsl.length");
}
+ case Builtin::BI__builtin_hlsl_normalize: {
+ Value *X = EmitScalarExpr(E->getArg(0));
+
+ assert(E->getArg(0)->getType()->hasFloatingRepresentation() &&
+ "normalize operand must have a float representation");
+
+ // scalar inputs should expect a scalar return type
+ if (!E->getArg(0)->getType()->isVectorType())
+ return Builder.CreateIntrinsic(
+ /*ReturnType=*/X->getType()->getScalarType(),
+ CGM.getHLSLRuntime().getNormalizeIntrinsic(), ArrayRef<Value *>{X},
+ nullptr, "hlsl.normalize");
+
+ // construct a vector return type for vector inputs
----------------
bob80905 wrote:
I can't just use XVecTy directly because getAs returns a const pointer. I need to supply a non-const return type to the createIntrinsic function, but can't use anything directly from E as far as I can tell.
https://github.com/llvm/llvm-project/pull/102683
More information about the cfe-commits
mailing list