Instructions to be redone only if from the same BB

While adding instructions(possible roots) to be redone, make sure they
are from the same basic block.

llvm-svn: 257112
This commit is contained in:
Aditya Nandakumar 2016-01-07 23:22:55 +00:00
parent b9ec4c6cea
commit f94c149f7f
2 changed files with 22 additions and 1 deletions

View File

@ -2155,7 +2155,8 @@ void Reassociate::OptimizeInst(Instruction *I) {
// During the initial run we will get to the root of the tree.
// But if we get here while we are redoing instructions, there is no
// guarantee that the root will be visited. So Redo later
if (BO->user_back() != BO)
if (BO->user_back() != BO &&
BO->getParent() == BO->user_back()->getParent())
RedoInsts.insert(BO->user_back());
return;
}

View File

@ -0,0 +1,20 @@
; RUN: opt < %s -reassociate -S | FileCheck %s
; CHECK-LABEL: main
; This test is to make sure while processing a block, uses of instructions
; from a different basic block don't get added to be re-optimized
define void @main() {
entry:
%0 = fadd fast float undef, undef
br i1 undef, label %bb1, label %bb2
bb1:
%1 = fmul fast float undef, -2.000000e+00
%2 = fmul fast float %1, 2.000000e+00
%3 = fadd fast float %2, 2.000000e+00
%4 = fadd fast float %3, %0
%mul351 = fmul fast float %4, 5.000000e-01
ret void
bb2:
ret void
}