From: David Majnemer Date: Fri, 6 Nov 2015 21:26:32 +0000 (+0000) Subject: [InstCombine] Don't RAUW tokens with undef X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=16261dd30c64dac41bfaf6788bac94e6e4877975;p=oota-llvm.git [InstCombine] Don't RAUW tokens with undef Let SimplifyCFG remove unreachable BBs which define token instructions. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@252343 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Transforms/InstCombine/InstructionCombining.cpp b/lib/Transforms/InstCombine/InstructionCombining.cpp index ac535f97bb1..f024ab1795e 100644 --- a/lib/Transforms/InstCombine/InstructionCombining.cpp +++ b/lib/Transforms/InstCombine/InstructionCombining.cpp @@ -3012,7 +3012,7 @@ static bool prepareICWorklistFromFunction(Function &F, const DataLayout &DL, while (EndInst != BB->begin()) { // Delete the next to last instruction. Instruction *Inst = &*--EndInst->getIterator(); - if (!Inst->use_empty()) + if (!Inst->use_empty() && !Inst->getType()->isTokenTy()) Inst->replaceAllUsesWith(UndefValue::get(Inst->getType())); if (Inst->isEHPad()) { EndInst = Inst; @@ -3022,7 +3022,8 @@ static bool prepareICWorklistFromFunction(Function &F, const DataLayout &DL, ++NumDeadInst; MadeIRChange = true; } - Inst->eraseFromParent(); + if (!Inst->getType()->isTokenTy()) + Inst->eraseFromParent(); } } diff --git a/test/Transforms/InstCombine/token.ll b/test/Transforms/InstCombine/token.ll new file mode 100644 index 00000000000..bb35d156064 --- /dev/null +++ b/test/Transforms/InstCombine/token.ll @@ -0,0 +1,21 @@ +; RUN: opt < %s -instcombine -S | FileCheck %s +target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128" +target triple = "x86_64-pc-windows-msvc18.0.0" + +declare i32 @__CxxFrameHandler3(...) + +define i8* @f() personality i32 (...)* @__CxxFrameHandler3 { +bb: + unreachable + +unreachable: + %cl = cleanuppad [] + cleanupret %cl unwind to caller +} + +; CHECK: unreachable: +; CHECK: %cl = cleanuppad [] +; CHECK: cleanupret %cl unwind to caller + + +declare void @g(i8*)