[all-commits] [llvm/llvm-project] ac4006: [InstCombine] Don't slice up PHIs when pred BB has...
Heejin Ahn via All-commits
all-commits at lists.llvm.org
Mon Jun 13 18:32:28 PDT 2022
Author: Heejin Ahn <aheejin at gmail.com>
Date: 2022-06-13 (Mon, 13 Jun 2022)
[InstCombine] Don't slice up PHIs when pred BB has catchswitch
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:
So this can produce code like the following:
%p = phi i8 [ %somevalue, %pred ], ...
%tobool = trunc i8 %p to i1
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:
%t = and i8 %somevalue, 1
%extract = icmp ne i8 %t, 0
%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.
Reviewed By: dschuff
Differential Revision: https://reviews.llvm.org/D127699
More information about the All-commits