https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88635
--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Of course it is latent before/after. In const_ok_for_output_1 we have /* FIXME: Refer to PR60655. It is possible for simplification of rtl expressions in var tracking to produce such expressions. We should really identify / validate expressions enclosed in CONST that can be handled by assemblers on various targets and only handle legitimate cases here. */ switch (GET_CODE (rtl)) { case SYMBOL_REF: break; case NOT: case NEG: return false; default: return true; } that catches some problematic cases, but in this case the simplification created (const (minus (const_int -2) (unspec ...))) and that makes the unspec negated too. So, we could e.g. add a case to the above switch that case MINUS: if there are any UNSPECs in subexpressions of the second operand, punt. Of course, if we want to try harder, we could try to negate the expression and see if it is valid that way etc.