1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-23 03:02:36 +01:00

[InstCombine] Don't RAUW tokens with undef

Let SimplifyCFG remove unreachable BBs which define token instructions.

llvm-svn: 252343
This commit is contained in:
David Majnemer 2015-11-06 21:26:32 +00:00
parent 0addd685df
commit 9ffc9c11c7
2 changed files with 24 additions and 2 deletions

View File

@ -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();
}
}

View File

@ -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*)