diff options
author | Sanjoy Das <sanjoy@playingwithpointers.com> | 2017-02-09 19:40:22 +0000 |
---|---|---|
committer | Sanjoy Das <sanjoy@playingwithpointers.com> | 2017-02-09 19:40:22 +0000 |
commit | 74bda4d591022e52f095755b41687c155f716bcc (patch) | |
tree | a543c1ee7718bab94b9f14268db1f152c765b206 /llvm/test/Bitcode | |
parent | 16776315460ed675e7ed403913be6bd4b1aba3f2 (diff) | |
download | bcm5719-llvm-74bda4d591022e52f095755b41687c155f716bcc.tar.gz bcm5719-llvm-74bda4d591022e52f095755b41687c155f716bcc.zip |
[JumpThreading] Thread through guards
Summary:
This patch allows JumpThreading also thread through guards.
Virtually, guard(cond) is equivalent to the following construction:
if (cond) { do something } else {deoptimize}
Yet it is not explicitly converted into IFs before lowering.
This patch enables early threading through guards in simple cases.
Currently it covers the following situation:
if (cond1) {
// code A
} else {
// code B
}
// code C
guard(cond2)
// code D
If there is implication cond1 => cond2 or !cond1 => cond2, we can transform
this construction into the following:
if (cond1) {
// code A
// code C
} else {
// code B
// code C
guard(cond2)
}
// code D
Thus, removing the guard from one of execution branches.
Patch by Max Kazantsev!
Reviewers: reames, apilipenko, igor-laevsky, anna, sanjoy
Reviewed By: sanjoy
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D29620
llvm-svn: 294617
Diffstat (limited to 'llvm/test/Bitcode')
0 files changed, 0 insertions, 0 deletions