[MachineVerifier] add checks for INLINEASM_BR
authorNick Desaulniers <ndesaulniers@google.com>
Fri, 19 Aug 2022 19:40:24 +0000 (12:40 -0700)
committerNick Desaulniers <ndesaulniers@google.com>
Fri, 19 Aug 2022 19:52:26 +0000 (12:52 -0700)
commite412bac9125a806d147f4f545dd057fac0b4a8f0
tree78f52989e69003aedb3eaf58a80c8cffb3efa5c5
parent95d94a67755620c0a2871ac6f056ca8e9731d5e9
[MachineVerifier] add checks for INLINEASM_BR

Test for a case we observed after the initial implementation of D129997
landed, in which case we observed a crash while building the ppc64le
Linux kernel. In that case, we had one block with two exits, both to the
same successor. Removing one of the exits corrupted the
successor/predecessor lists.

So when we have an INLINEASM_BR, check a few things for each indirect
target:
1. that it exists.
2. that it is listed in our successors.
3. that its predecessor list contains the parent MBB of INLINEASM_BR.

This would have caught the regression discovered after D129997 landed,
after the pass that was problematic (early-tailduplication) rather than
getting a stack trace in a later pass (regalloc) that doesn't understand
the anomaly and crashes.

Reviewed By: efriedma

Differential Revision: https://reviews.llvm.org/D130290
llvm/lib/CodeGen/MachineVerifier.cpp
llvm/test/MachineVerifier/verify-inlineasmbr.mir [new file with mode: 0644]