https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79244
--- Comment #6 from Jakub Jelinek <jakub at gcc dot gnu.org> --- So here we have (ab) SSA_NAME as lhs and we try to replace it with non-(ab) SSA_NAME, which isn't supported except for virtual operands. So, one possibility I see is if lhs is (ab) and var is SSA_NAME that isn't (ab), if both have the same underlying variable, we turn var into (ab), but not sure if it can be always safely done. Or just don't run replace_uses_by and just replace the ASSERT_EXPR with SSA_NAME assignment and let other passes optimize it.