================
@@ -847,6 +848,14 @@ of different sizes and signs is forbidden in binary and
ternary builtins.
semantics, see `LangRef
<http://llvm.org/docs/LangRef.html#llvm-min-intrinsics-comparation>`_
for the comparison.
+ T __builtin_elementwise_clz(T x[, T y]) return the number of leading 0
bits in the first argument. If integer types
+ the first argument is 0 and an
optional second argument is provided,
+ the second argument is
returned. If the first argument is 0 but only
+ one argument is provided, the
result is undefined.
----------------
efriedma-quic wrote:
Technically speaking, there's some LLVM IR operations which won't trigger UB on
a poison value... but it's much narrower than an uninitialized variable. In
particular, poison propagates much more strongly, and it can end up poisoning
adjacent fields in memory. And it's not consistent with any form of
"undefined" in any standard. Because of that, I don't want to document any
clang intrinsics as "returns poison".
"the result is undefined" is just that but worse: it's equally messy, and
ambiguous.
So I think the only viable alternative to "the behavior is undefined" is "the
result is unspecified"... which would mean we have to actually pick a value to
return.
https://github.com/llvm/llvm-project/pull/131995
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits