================ @@ -19105,6 +19105,51 @@ Value *CodeGenFunction::EmitHLSLBuiltinExpr(unsigned BuiltinID, return nullptr; switch (BuiltinID) { + case Builtin::BI__builtin_hlsl_adduint64: { ---------------- Icohedron wrote:
`__builtin_addc` was not able to be used to implement `AddUint64` in `hlsl_intrinsics.h` and (by extension) `hlsl_detail.h` because its `carryout` argument is a pointer (as documented [here](https://github.com/llvm/llvm-project/blob/main/clang/lib/CodeGen/CGBuiltin.cpp#L5508)). Since pointers are not supported in HLSL, an error is emitted when running HLSL codegen tests with an example implementation like the following in `hlsl_intrinsics.h`. ```cpp _HLSL_AVAILABILITY(shadermodel, 6.0) const inline uint32_t2 AddUint64(uint32_t2 a, uint32_t2 b) { uint32_t carry; uint32_t low_sum = __builtin_addc(a.x, b.x, 0, &carry); uint32_t high_sum = __builtin_addc(a.y, b.y, carry, nullptr); return uint32_t2(low_sum, high_sum); } ``` ``` build/lib/clang/20/include/hlsl/hlsl_intrinsics.h:158:50: error: the '&' operator is unsupported in HLSL 158 | uint32_t low_sum = __builtin_addc(a.x, b.x, 0, &carry); ``` https://github.com/llvm/llvm-project/pull/125319 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits