[PATCH] D21725: [LoopUnswitch] Unswitch on conditions feeding into guards

Sanjoy Das via llvm-commits llvm-commits at lists.llvm.org
Sat Jun 25 00:52:19 PDT 2016


sanjoy created this revision.
sanjoy added a reviewer: majnemer.
sanjoy added a subscriber: llvm-commits.
Herald added subscribers: mzolotukhin, mcrosier.

This is a straightforward extension of what LoopUnswitch does to
branches to guards.  That is, we unswitch

```
for (;;) {
  ...
  guard(loop_invariant_cond);
  ...
}
```

into

```
if (loop_invariant_cond) {
  for (;;) {
    ...
    // There is no need to emit guard(true)
    ...
  }
} else {
  for (;;) {
    ...
    guard(false);
    // SimplifyCFG will clean this up by adding an
    // unreachable after the guard(false)
    ...
  }
}
```

http://reviews.llvm.org/D21725

Files:
  lib/Transforms/Scalar/LoopUnswitch.cpp
  test/Transforms/LoopUnswitch/guards.ll

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D21725.61887.patch
Type: text/x-patch
Size: 5039 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160625/dec50f35/attachment.bin>


More information about the llvm-commits mailing list