https://gcc.gnu.org/bugzilla/show_bug.cgi?id=123381
--- Comment #5 from Jeffrey A. Law <law at gcc dot gnu.org> --- I've always seen '?' and its cousin '^' as cost guidance and not really appropriate to fix a correctness bug. '!' and '$' on the other hand could in rare cases be used to fix bugs. We used '!', IIRC, to handle really oddball cases that could occur and which we had to handle, but didn't want to really expose. For example, consider a decrement-and-branch insn on the m68k in the reload era. We would use '!' to expose a potential reload path if the decremented object happened to be held in an FP register. But I'd tend to think that constraint twiddling isn't a great way to go here. I think your idea of identifying a move with clobber as a move had promise.
