From eafa28a0d9274d9cdd9f02ac4a42ea9ee76d3313 Mon Sep 17 00:00:00 2001 From: David Majnemer Date: Sat, 7 Nov 2015 00:52:53 +0000 Subject: [InstCombine] Teach FoldPHIArgZextsIntoPHI about EHPads FoldPHIArgZextsIntoPHI cannot insert an instruction after the PHI if there is an EHPad in the BB. Doing so would result in an instruction inserted after a terminator. llvm-svn: 252377 --- llvm/lib/Transforms/InstCombine/InstCombinePHI.cpp | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'llvm/lib/Transforms') diff --git a/llvm/lib/Transforms/InstCombine/InstCombinePHI.cpp b/llvm/lib/Transforms/InstCombine/InstCombinePHI.cpp index a9f8f49d2f1..f1aa98b5e35 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombinePHI.cpp +++ b/llvm/lib/Transforms/InstCombine/InstCombinePHI.cpp @@ -401,6 +401,12 @@ Instruction *InstCombiner::FoldPHIArgLoadIntoPHI(PHINode &PN) { /// require special-casing a cast from the 'i1' type. See the comment in /// FoldPHIArgOpIntoPHI() about pessimizing illegal integer types. Instruction *InstCombiner::FoldPHIArgZextsIntoPHI(PHINode &Phi) { + // We cannot create a new instruction after the PHI if the terminator is an + // EHPad because there is no valid insertion point. + if (TerminatorInst *TI = Phi.getParent()->getTerminator()) + if (TI->isEHPad()) + return nullptr; + // Early exit for the common case of a phi with two operands. These are // handled elsewhere. See the comment below where we check the count of zexts // and constants for more details. -- cgit v1.2.3