https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78660
--- Comment #7 from YunQiang Su <syq at debian dot org> --- (In reply to YunQiang Su from comment #6) > With revert some change, with patch: > > Index: gcc-7-7-20161217/src/gcc/combine.c > =================================================================== > --- gcc-7-7-20161217.orig/src/gcc/combine.c > +++ gcc-7-7-20161217/src/gcc/combine.c > @@ -9972,13 +9972,13 @@ reg_nonzero_bits_for_combine (const_rtx > (DF_LR_IN (ENTRY_BLOCK_PTR_FOR_FN (cfun)->next_bb), > REGNO (x))))) > { > - /* Note that, even if the precision of last_set_mode is lower than > that > - of mode, record_value_for_reg invoked nonzero_bits on the register > - with nonzero_bits_mode (because last_set_mode is necessarily > integral > - and HWI_COMPUTABLE_MODE_P in this case) so bits in nonzero_bits_mode > - are all valid, hence in mode too since nonzero_bits_mode is defined > - to the largest HWI_COMPUTABLE_MODE_P mode. */ > - *nonzero &= rsp->last_set_nonzero_bits; > + unsigned HOST_WIDE_INT mask = rsp->last_set_nonzero_bits; > + > + if (GET_MODE_PRECISION (rsp->last_set_mode) < GET_MODE_PRECISION > (mode)) > + /* We don't know anything about the upper bits. */ > + mask |= GET_MODE_MASK (mode) ^ GET_MODE_MASK (rsp->last_set_mode); > + > + *nonzero &= mask; > return NULL; > } This can make it buildable now.