[Bug tree-optimization/115073] RISC-V: Gimple fold not honor C[LT]Z_DEFINED_VALUE_AT_ZERO
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115073 --- Comment #4 from Andrew Pinski --- Note -fsanitize=undefined does detect this undefinedness at runtime already too.
[Bug tree-optimization/115073] RISC-V: Gimple fold not honor C[LT]Z_DEFINED_VALUE_AT_ZERO
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115073 --- Comment #3 from Jakub Jelinek --- Or another option is to use C23 , that is well defined for all values. But you need recent glibc (2.39 snapshots or 2.40) & gcc (14) for that.
[Bug tree-optimization/115073] RISC-V: Gimple fold not honor C[LT]Z_DEFINED_VALUE_AT_ZERO
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115073 Andrew Pinski changed: What|Removed |Added Resolution|--- |INVALID Status|UNCONFIRMED |RESOLVED --- Comment #2 from Andrew Pinski --- Invalid as explained. The builtin has undefined behavior no matter what the backend says is the value at 0.
[Bug tree-optimization/115073] RISC-V: Gimple fold not honor C[LT]Z_DEFINED_VALUE_AT_ZERO
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115073 Jakub Jelinek changed: What|Removed |Added CC||jakub at gcc dot gnu.org --- Comment #1 from Jakub Jelinek --- That is misunderstanding of what C[LT]Z_DEFINED_VALUE_AT_ZERO is. The builtin has always UB on zero. If you want to define it for zero, use x ? __builtin_clz (x) : 32 (and the like) or __builtin_clzg (x, 32) in the source. C[LT]Z_DEFINED_VALUE_AT_ZERO returning 2 then makes sure the compiler can fold those conditionals or builtins into .CLZ internal calls with 2 arguments which makes it well defined for all inputs.