https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113614
--- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> --- I guess the thing is that while using for a signed operand a positive precision (if smaller than the precision of the signed operand) is always fine, indicating zero extension from something narrower, for unsigned operand a negative precision (if smaller in absolute value than the precision of the unsigned operand) might be fine for __mulbitint3 (but even then perhaps only if the result precision isn't higher than the precision of the operands), for other libgcc _BitInt operations, including __divmodbitint4 but also the conversions from _BitInt to binary/decimal floating point really consider an operand with negative precision as signed with precision equal to the absolute value of the argument, so there is no way to represent something that has been sign extended from narrower precision and then cast to unsigned (we'd need to tell libgcc two numbers somehow, from which smaller precision it is sign extended and to which wider precision where it becomes unsigned). But, guess this means we need to make sure such widening casts are not merged with the libgcc operations.