diff options
author | Chen Li <meloli87@gmail.com> | 2016-01-04 23:28:57 +0000 |
---|---|---|
committer | Chen Li <meloli87@gmail.com> | 2016-01-04 23:28:57 +0000 |
commit | c6021038f65a577ed255b624ada4c255726b8d0c (patch) | |
tree | aa18f0b2a659fdf2d3f583c5b0f93cc6c5716af7 /llvm/lib/Transforms/InstCombine | |
parent | 2aa83ff8071be375ee175c8b36004126fc8a29f9 (diff) | |
download | bcm5719-llvm-c6021038f65a577ed255b624ada4c255726b8d0c.tar.gz bcm5719-llvm-c6021038f65a577ed255b624ada4c255726b8d0c.zip |
[InstructionCombining] prepareICWorklistFromFunction halts in infinite loop with instructions of token type
Summary: This patch fixes a bug in prepareICWorklistFromFunction, where the loop becomes infinite with instructions of token type. The patch checks if the instruction is token type, and if so it updates EndInst with the current instruction.
Reviewers: reames, majnemer
Subscribers: llvm-commits, sanjoy
Differential Revision: http://reviews.llvm.org/D15859
llvm-svn: 256792
Diffstat (limited to 'llvm/lib/Transforms/InstCombine')
-rw-r--r-- | llvm/lib/Transforms/InstCombine/InstructionCombining.cpp | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp b/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp index 7c46cfd28fc..903a0b5f540 100644 --- a/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp +++ b/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp @@ -3021,7 +3021,7 @@ static bool prepareICWorklistFromFunction(Function &F, const DataLayout &DL, Instruction *Inst = &*--EndInst->getIterator(); if (!Inst->use_empty() && !Inst->getType()->isTokenTy()) Inst->replaceAllUsesWith(UndefValue::get(Inst->getType())); - if (Inst->isEHPad()) { + if (Inst->isEHPad() || Inst->getType()->isTokenTy()) { EndInst = Inst; continue; } @@ -3029,8 +3029,7 @@ static bool prepareICWorklistFromFunction(Function &F, const DataLayout &DL, ++NumDeadInst; MadeIRChange = true; } - if (!Inst->getType()->isTokenTy()) - Inst->eraseFromParent(); + Inst->eraseFromParent(); } } |