Message ID | alpine.LNX.2.00.1012081527120.23074@zhemvz.fhfr.qr |
---|---|
State | New |
Headers | show |
On Wed, 8 Dec 2010, Richard Guenther wrote: > + BITS_PER_UNIT == 8 > + ? 3 : exact_log2 (BITS_PER_UNIT), I know we use this idiom elsewhere, but if we (i.e. 3.4-or-later host compiler) aren't folding exact_log2 (BITS_PER_UNIT) to a constant (given constant BITS_PER_UNIT) there's something wrong with either our constant folding for built-in functions or our inlining heuristics.
On Wed, 8 Dec 2010, Joseph S. Myers wrote: > On Wed, 8 Dec 2010, Richard Guenther wrote: > > > + BITS_PER_UNIT == 8 > > + ? 3 : exact_log2 (BITS_PER_UNIT), > > I know we use this idiom elsewhere, but if we (i.e. 3.4-or-later host > compiler) aren't folding exact_log2 (BITS_PER_UNIT) to a constant (given > constant BITS_PER_UNIT) there's something wrong with either our constant > folding for built-in functions or our inlining heuristics. I think we indeed should fold it to a constant. An even better cleanup would be to introduce double_int_units_to_bits, double_int_bits_to_units. Richard.
Index: gcc/tree-ssa-sccvn.c =================================================================== --- gcc/tree-ssa-sccvn.c (revision 167583) +++ gcc/tree-ssa-sccvn.c (working copy) @@ -644,10 +644,11 @@ copy_reference_ops_from_ref (tree ref, V { double_int off = double_int_add (tree_to_double_int (this_offset), - double_int_sdiv + double_int_rshift (tree_to_double_int (bit_offset), - uhwi_to_double_int (BITS_PER_UNIT), - TRUNC_DIV_EXPR)); + BITS_PER_UNIT == 8 + ? 3 : exact_log2 (BITS_PER_UNIT), + HOST_BITS_PER_DOUBLE_INT, true)); if (double_int_fits_in_shwi_p (off)) temp.off = off.low; }