aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/CodeGen/MachineModuleInfo.cpp
diff options
context:
space:
mode:
authorPhilip Reames <listmail@philipreames.com>2015-08-31 18:31:48 +0000
committerPhilip Reames <listmail@philipreames.com>2015-08-31 18:31:48 +0000
commitbb11d62a5a84877145c0e44cdd936e97d5b600e1 (patch)
tree5ea3282054f156399d202afbde3acbf025e59399 /llvm/lib/CodeGen/MachineModuleInfo.cpp
parentd3cc1678e806c4a6719bcfa4e92f372506af9b92 (diff)
downloadllvm-bb11d62a5a84877145c0e44cdd936e97d5b600e1.zip
llvm-bb11d62a5a84877145c0e44cdd936e97d5b600e1.tar.gz
llvm-bb11d62a5a84877145c0e44cdd936e97d5b600e1.tar.bz2
[LazyValueInfo] Look through Phi nodes when trying to prove a predicate
If asked to prove a predicate about a value produced by a PHI node, LazyValueInfo was unable to do so even if the predicate was known to be true for each input to the PHI. This prevented JumpThreading from eliminating a provably redundant branch. The problematic test case looks something like this: ListNode *p = ...; while (p != null) { if (!p) return; x = g->x; // unrelated p = p->next } The null check at the top of the loop is redundant since the value of 'p' is null checked on entry to the loop and before executing the backedge. This resulted in us a) executing an extra null check per iteration and b) not being able to LICM unrelated loads after the check since we couldn't prove they would execute or that their dereferenceability wasn't effected by the null check on the first iteration. Differential Revision: http://reviews.llvm.org/D12383 llvm-svn: 246465
Diffstat (limited to 'llvm/lib/CodeGen/MachineModuleInfo.cpp')
0 files changed, 0 insertions, 0 deletions