[Bug tree-optimization/111280] CLZ(0) generated when CLZ_DEFINED_VALUE_AT_ZERO is false
pinskia at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Mon Sep 4 01:10:15 GMT 2023
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111280
Andrew Pinski <pinskia at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Ever confirmed|0 |1
Status|UNCONFIRMED |NEW
Last reconfirmed| |2023-09-04
--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
number_of_iterations_cltz_complement builds the COND_EXPR correctly.
In that it does:
(cast)(cast)(64 - (t !=0 ? .CLZ(t) : 64)) + 1
But calls fold_build2 to do the building
and that gets folded into:
t != 0 ? ((cast)(cast)(64 - .CLZ(t))) + 1 : 1
Which is fine.
and stores that into niter
But then we use force_gimple_operand/force_gimple_operand_gsi which does
creates the GIMPLE_COND ect.
And the check for rewriting from undefined to defined for addition is done via
the following check:
/* If def's type has undefined overflow and there were folded
casts, rewrite all stmts added for def into arithmetics
with defined overflow behavior. */
if (folded_casts && ANY_INTEGRAL_TYPE_P (TREE_TYPE (def))
&& TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (def)))
I don't know understand how folded_casts comes into play really.
More information about the Gcc-bugs
mailing list