On Nov 4, 2015, at 4:15 AM, Richard Biener <richard.guent...@gmail.com> wrote: > I wonder if we'll manage to to get mode_for_size return BLKmode > in case of an original mode that was not of a size multiple of > HOST_BITS_PER_WIDE_INT (and that's host dependent even…).
> We probably should use smallest_mode_for_size on a precision > derived from the value Once we want to go stomping around the value, we might as well just do everything. I prefer this version over one that has a call to assert. I thought about creating a helper function, but since there is only 1 client for it, and since it was only 4 lines, I didn’t create one. I’d propose deferring creation until we have more clients. The generated dwarf remains fixed, as expected. > Please use gcc_checking_assert here. Done. My test suite run with the assert did finish, and on x86_64 linux, it was never hit. Any other issues you can spot? Index: dwarf2out.c =================================================================== --- dwarf2out.c (revision 229720) +++ dwarf2out.c (working copy) @@ -15593,8 +15593,13 @@ return true; case CONST_WIDE_INT: - add_AT_wide (die, DW_AT_const_value, - std::make_pair (rtl, GET_MODE (rtl))); + { + wide_int w1 = std::make_pair (rtl, MAX_MODE_INT); + int prec = MIN (wi::min_precision (w1, UNSIGNED), + (unsigned int)CONST_WIDE_INT_NUNITS (rtl) * HOST_BITS_PER_WIDE_INT); + wide_int w = wide_int::from (w1, prec, UNSIGNED); + add_AT_wide (die, DW_AT_const_value, w); + } return true; case CONST_DOUBLE: Index: rtl.h =================================================================== --- rtl.h (revision 229720) +++ rtl.h (working copy) @@ -2086,6 +2086,7 @@ inline unsigned int wi::int_traits <rtx_mode_t>::get_precision (const rtx_mode_t &x) { + gcc_checking_assert (x.second != BLKmode && x.second != VOIDmode); return GET_MODE_PRECISION (x.second); }