On Fri, Nov 01, 2024 at 11:12:29AM +0000, Richard Earnshaw (lists) wrote: > As Jakub said in the PR, this is really just papering over a general problem > in the compiler. As such, it's OK for the gcc-14 branch, if we really need > it, but not really suitable for trunk. > > I think the problem is related to failing to correclty canonicalize > non-standard bool types in trunk_int_for_mode. The code there has: > > /* Canonicalize BImode to 0 and STORE_FLAG_VALUE. */ > if (smode == BImode) > return c & 1 ? STORE_FLAG_VALUE : 0; > > and that means we fail to generate canonical boolean values, so later on the > compiler asserts when trying to pick non-standard values out. > > Perhaps instead we need something like: > > /* Canonicalize scalar boolean modes to 0 and STORE_FLAG_VALUE. */ > if (smode >= MIN_MODE_BOOL && smode <= MAX_MODE_BOOL) > return c & 1 ? STORE_FLAG_VALUE : 0; > > Jakub?
A mode which has 4 or 16 possible valid values, not just 2, shouldn't be considered a boolean mode, it is a partial int. Jakub