[CodeMoverUtils] Enhance isSafeToMoveBefore() when control flow equivalence is satisfied
authorCongzhe Cao <congzhe.cao@huawei.com>
Mon, 27 Sep 2021 22:30:20 +0000 (18:30 -0400)
committerCongzheUalberta <congzhecao@gmail.com>
Mon, 27 Sep 2021 22:37:36 +0000 (18:37 -0400)
commitc42772752a51849d311d5a379a042528c75795a8
tree56875e7175d328d8bca5e2ad037c6b81753be6f7
parentb345952ad42655a437780e796cd0d7b6c4ccb559
[CodeMoverUtils] Enhance isSafeToMoveBefore() when control flow equivalence is satisfied

With improved analysis in determining CFG equivalence that does
not require strict dominance and post-dominance conditions, we
now relax  isSafeToMoveBefore() such that an instruction I can
be moved before InsertPoint even if they do not strictly dominate
each other, as long as they follow the same control flow path.

For example,  we can move Instruction 0 before Instruction 1,
and vice versa.

```
if (cond1)
   // Instruction 0: %add = add i32 1, 2
if (cond1)
   // Instruction 1: %add2 = add i32 2, 1
```

Reviewed By: Whitney

Differential Revision: https://reviews.llvm.org/D110456
llvm/include/llvm/Transforms/Utils/CodeMoverUtils.h
llvm/lib/Transforms/Utils/CodeMoverUtils.cpp
llvm/unittests/Transforms/Utils/CodeMoverUtilsTest.cpp