Fix a bug in LoopStrengthReduce that caused it to emit IR with
authorDan Gohman <gohman@apple.com>
Thu, 15 May 2008 23:26:57 +0000 (23:26 +0000)
committerDan Gohman <gohman@apple.com>
Thu, 15 May 2008 23:26:57 +0000 (23:26 +0000)
commitf20d70d57e1723d70b48b3f19868e17b9282bbfc
tree6b5eb783505c5c1116224c0c1ba6f2744cb01998
parent7d75b3a2819b10c3693de68d2fd62a6d079c88e5
Fix a bug in LoopStrengthReduce that caused it to emit IR with
use-before-def. The problem comes up in code with multiple PHIs where
one PHI is being rewritten in terms of the other, but the other needs
to be casted first. LLVM rules requre the cast instruction to be
inserted after any PHI instructions, but when instructions were
inserted to replace the second PHI value with a function of the first,
they were ended up going before the cast instruction. Avoid this
problem by remembering the location of the cast instruction, when one
is needed, and inserting the expansion of the new value after it.

This fixes a bug that surfaced in 255.vortex on x86-64 when
instcombine was removed from the middle of the loop optimization
passes.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@51169 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Transforms/Scalar/LoopStrengthReduce.cpp
test/CodeGen/X86/vortex-bug.ll [new file with mode: 0644]