Fix a bug in IfConverter with nested predicates.
authorQuentin Colombet <qcolombet@apple.com>
Wed, 24 Jul 2013 20:20:37 +0000 (20:20 +0000)
committerQuentin Colombet <qcolombet@apple.com>
Wed, 24 Jul 2013 20:20:37 +0000 (20:20 +0000)
commite644b7743bafaf5fc7091f8bf0accee720ade3ab
treee93557fd01492cabfc04d3731f054263b0c638c3
parent6482427926df8e9a74d8f36aff50c7bf14a8e0df
Fix a bug in IfConverter with nested predicates.

Prior to this patch, IfConverter may widen the cases where a sequence of
instructions were executed because of the way it uses nested predicates. This
result in incorrect execution.

For instance, Let A be a basic block that flows conditionally into B and B be a
predicated block.
B can be predicated with A.BrToBPredicate into A iff B.Predicate is less
"permissive" than A.BrToBPredicate, i.e., iff A.BrToBPredicate subsumes
B.Predicate.

The IfConverter was checking the opposite: B.Predicate subsumes
A.BrToBPredicate.

<rdar://problem/14379453>

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187071 91177308-0d34-0410-b5e6-96231b3b80d8
lib/CodeGen/IfConversion.cpp
test/CodeGen/ARM/2013-05-05-IfConvertBug.ll