mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 11:13:28 +01:00
[Cloner] Re-map simplfied cloned instructions.
This commit pretty much rolls back the logic added in r306495 as in the testcase provided we simplify an `icmp` looking through a PHI that hasn't been mapped yet. I think instsimplify shouldn't do threading over select/phis or just looking through phis in general, but this is what we have now. Also, add a test to prevent this from happening in case somebody wants to modify this code again. Briefly discussed with Kyle Butt (thanks Kyle!). llvm-svn: 306938
This commit is contained in:
parent
6a144408d6
commit
daa7aa14f8
@ -325,11 +325,10 @@ void PruningFunctionCloner::CloneBlock(const BasicBlock *BB,
|
||||
// the basic block.
|
||||
if (Value *V =
|
||||
SimplifyInstruction(NewInst, BB->getModule()->getDataLayout())) {
|
||||
assert((!isa<Instruction>(V) ||
|
||||
cast<Instruction>(V)->getParent() == nullptr ||
|
||||
cast<Instruction>(V)->getFunction() != OldFunc ||
|
||||
OldFunc == NewFunc) &&
|
||||
"Simplified Instruction should not be in the old function.");
|
||||
// On the off-chance that this simplifies to an instruction in the old
|
||||
// function, map it back into the new function.
|
||||
if (Value *MappedV = VMap.lookup(V))
|
||||
V = MappedV;
|
||||
|
||||
if (!NewInst->mayHaveSideEffects()) {
|
||||
VMap[&*II] = V;
|
||||
|
25
test/Transforms/Inline/pr33637.ll
Normal file
25
test/Transforms/Inline/pr33637.ll
Normal file
@ -0,0 +1,25 @@
|
||||
; RUN: opt -inline < %s
|
||||
|
||||
define void @patatino() {
|
||||
for.cond:
|
||||
br label %for.body
|
||||
|
||||
for.body:
|
||||
%tobool = icmp eq i32 5, 0
|
||||
%sel = select i1 %tobool, i32 0, i32 2
|
||||
br i1 undef, label %cleanup1.thread, label %cleanup1
|
||||
|
||||
cleanup1.thread:
|
||||
ret void
|
||||
|
||||
cleanup1:
|
||||
%cleanup.dest2 = phi i32 [ %sel, %for.body ]
|
||||
%switch = icmp ult i32 %cleanup.dest2, 1
|
||||
ret void
|
||||
}
|
||||
|
||||
define void @main() {
|
||||
entry:
|
||||
call void @patatino()
|
||||
ret void
|
||||
}
|
Loading…
Reference in New Issue
Block a user