https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63783
--- Comment #18 from Michael Karcher <gcc-bugzilla at mkarcher dot dialup.fu-berlin.de> --- As I said, I did not try your patch, but just read the source. The assembly you quoted convinces me that there is no problem in the code actually produced by your patch, which is great. This is caused by the pattern or-then-SImode-compare, as you explained. The or-then-SImode-compare optimization has an adverse effect on the test coverage, it seems. In both cases, GET_MODE(src_reg) and GET_MODE(dst_reg) are SImode, so the DImode output branch is not tested by any of your two example source files. Furthermore, it looks like make_not_reg_insn will actually produce bad code if it were ever called with GET_MODE(src_reg) == DImode. So I would strongly suggest to narrow it to only accept SImode input operands, so it fails to apply instead of generate bad code if something manages to call it with DImode input.