IndVarSimplify: check if loop invariant expansion can trap
authorDavid Majnemer <david.majnemer@gmail.com>
Tue, 4 Jun 2013 17:51:58 +0000 (17:51 +0000)
committerDavid Majnemer <david.majnemer@gmail.com>
Tue, 4 Jun 2013 17:51:58 +0000 (17:51 +0000)
commit5a57dbef33ec2d336de2a2e9da4e477a4969fe57
tree2acc702f179de66ff5f061b01148bff1a8ad6087
parent35e7751af455f2cc559cdc2d3424b53706e09bb3
IndVarSimplify: check if loop invariant expansion can trap

IndVarSimplify is willing to move divide instructions outside of their
loop bodies if they are invariant of the loop.  However, it may not be
safe to expand them if we do not know if they can trap.

Instead, check to see if it is not safe to expand the instruction and
skip the expansion.

This fixes PR16041.

Testcase by Rafael Ávila de Espíndola.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@183239 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Transforms/Scalar/IndVarSimplify.cpp
test/Transforms/IndVarSimplify/udiv-invariant-but-traps.ll [new file with mode: 0644]