Speculatively execute a block when the the block is the then part of a triangle shape...
authorEvan Cheng <evan.cheng@apple.com>
Sat, 7 Jun 2008 08:52:29 +0000 (08:52 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Sat, 7 Jun 2008 08:52:29 +0000 (08:52 +0000)
commit4d09efd7b8fdf9e8a8c89bdb821f4992091a764b
tree80d8bef6f97f0aca27dbd0b30d6c75875e3f69f6
parentcce302fded6c4c7b84630094fb60bc16fb4b1749
Speculatively execute a block when the the block is the then part of a triangle shape and it contains a single, side effect free, cheap instruction. The branch is eliminated by adding a select instruction. i.e.

Turn
BB:
    %t1 = icmp
    br i1 %t1, label %BB1, label %BB2
BB1:
    %t3 = add %t2, c
    br label BB2
BB2:
=>
BB:
    %t1 = icmp
    %t4 = add %t2, c
    %t3 = select i1 %t1, %t2, %t3

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@52073 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Transforms/Utils/SimplifyCFG.cpp
test/Transforms/SimplifyCFG/SpeculativeExec.ll [new file with mode: 0644]