[PATCH] D127699: [InstCombine] Don't slice up PHIs when pred BB has catchswitch

Heejin Ahn via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Jun 13 14:39:25 PDT 2022


aheejin created this revision.
aheejin added a reviewer: dschuff.
Herald added subscribers: wingo, hiraditya.
Herald added a project: All.
aheejin requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.

If an integer PHI has an illegal type (according to the data layout) and
it is only used by `trunc` or `trunc(lshr)` operations, we split the PHI
into various instructions in its predecessors:
https://github.com/llvm/llvm-project/blob/6d1543a16797fa07eecea7e542df5b42422fc721/llvm/lib/Transforms/InstCombine/InstCombinePHI.cpp#L1536-L1543

So this can produce code like the following:
Before:

  pred:
    ...
  
  bb:
    %p = phi i8 [ %somevalue, %pred ], ...
    ...
    %tobool = trunc i8 %p to i1
    use %tobool
    ...

In this code, `%p` has an illegal integer type, `i8`, and its only used
in a `trunc` instruction later. In this case this pass puts extraction
code in its predecessors:

After:

  pred:
    ...
    %t = and i8 %somevalue, 1
    %extract = icmp ne i8 %t, 0
  
  bb:
    %p.new = phi i1 [ %extract, %pred ], ...
    use %p.new instead of %tobool

But this doesn't work if `pred` is a `catchswitch` BB because it cannot
have any non-PHI instructions. This CL ensures we bail out in that case.

Fixes https://github.com/llvm/llvm-project/issues/55803.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D127699

Files:
  llvm/lib/Transforms/InstCombine/InstCombinePHI.cpp
  llvm/test/Transforms/InstCombine/catchswitch-phi.ll

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D127699.436572.patch
Type: text/x-patch
Size: 5014 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220613/865fdb2c/attachment.bin>


More information about the llvm-commits mailing list