[SCEV] createAddRecFromPHI: Optimize for the most common case.
authorMichael Zolotukhin <mzolotukhin@apple.com>
Wed, 3 May 2017 23:53:38 +0000 (23:53 +0000)
committerMichael Zolotukhin <mzolotukhin@apple.com>
Wed, 3 May 2017 23:53:38 +0000 (23:53 +0000)
commit37162adf3eebd7b29eb73ec26d0d3bc96686be54
tree288c7c5e21beb6e5cef4bfef75e6a21b7cb5890a
parent8e5f0409fb161977bebea83d76ad2d793affa275
[SCEV] createAddRecFromPHI: Optimize for the most common case.

Summary:
The existing implementation creates a symbolic SCEV expression every
time we analyze a phi node and then has to remove it, when the analysis
is finished. This is very expensive, and in most of the cases it's also
unnecessary. According to the data I collected, ~60-70% of analyzed phi
nodes (measured on SPEC) have the following form:
  PN = phi(Start, OP(Self, Constant))
Handling such cases separately significantly speeds this up.

Reviewers: sanjoy, pete

Subscribers: llvm-commits

Differential Revision: https://reviews.llvm.org/D32663

llvm-svn: 302096
llvm/include/llvm/Analysis/ScalarEvolution.h
llvm/lib/Analysis/ScalarEvolution.cpp
llvm/test/Analysis/ScalarEvolution/ZeroStep.ll [new file with mode: 0644]
llvm/test/CodeGen/X86/2014-08-29-CompactUnwind.ll