Go to file
Dehao Chen f8ac3d26d5 Using branch probability to guide critical edge splitting.
Summary:
The original heuristic to break critical edge during machine sink is relatively conservertive: when there is only one instruction sinkable to the critical edge, it is likely that the machine sink pass will not break the critical edge. This leads to many speculative instructions executed at runtime. However, with profile info, we could model the splitting benefits: if the critical edge has 50% taken rate, it would always be beneficial to split the critical edge to avoid the speculated runtime instructions. This patch uses profile to guide critical edge splitting in machine sink pass.

The performance impact on speccpu2006 on Intel sandybridge machines:

spec/2006/fp/C++/444.namd                  25.3  +0.26%
spec/2006/fp/C++/447.dealII               45.96  -0.10%
spec/2006/fp/C++/450.soplex               41.97  +1.49%
spec/2006/fp/C++/453.povray               36.83  -0.96%
spec/2006/fp/C/433.milc                   23.81  +0.32%
spec/2006/fp/C/470.lbm                    41.17  +0.34%
spec/2006/fp/C/482.sphinx3                48.13  +0.69%
spec/2006/int/C++/471.omnetpp             22.45  +3.25%
spec/2006/int/C++/473.astar               21.35  -2.06%
spec/2006/int/C++/483.xalancbmk           36.02  -2.39%
spec/2006/int/C/400.perlbench              33.7  -0.17%
spec/2006/int/C/401.bzip2                  22.9  +0.52%
spec/2006/int/C/403.gcc                   32.42  -0.54%
spec/2006/int/C/429.mcf                   39.59  +0.19%
spec/2006/int/C/445.gobmk                 26.98  -0.00%
spec/2006/int/C/456.hmmer                 24.52  -0.18%
spec/2006/int/C/458.sjeng                 28.26  +0.02%
spec/2006/int/C/462.libquantum            55.44  +3.74%
spec/2006/int/C/464.h264ref               46.67  -0.39%

geometric mean                                   +0.20%

Manually checked 473 and 471 to verify the diff is in the noise range.

Reviewers: rengolin, davidxl

Subscribers: llvm-commits

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

llvm-svn: 284545
2016-10-18 23:24:02 +00:00
clang Add missing warning for use of C++1z init-statements in C++14 and before. 2016-10-18 20:27:16 +00:00
clang-tools-extra Fix signed/unsigned comparison warnings 2016-10-18 13:15:31 +00:00
compiler-rt [tsan] Always use -std=c++11 in TSan tests 2016-10-18 18:33:42 +00:00
debuginfo-tests New round of fixes for "Always compile debuginfo-tests for the host triple" 2014-10-18 23:47:59 +00:00
libclc Provide vstore_half helper to workaround clc restrictions 2016-09-21 20:15:55 +00:00
libcxx [solaris] Convert the support library to C++ to fix -std=c++11 build 2016-10-18 16:54:59 +00:00
libcxxabi Fix typo in comment 2016-10-15 00:02:20 +00:00
libunwind [libunwind] Add missing <stdint.h> include. NFC. 2016-10-13 14:32:24 +00:00
lld Use CachedHashStringRef instead of CachedHash<StringRef>. 2016-10-18 17:50:36 +00:00
lldb xfail TestMiSyntax.py's test_lldbmi_output_grammar on macOS 2016-10-18 15:15:24 +00:00
llgo [llgo] add llgo source path to LLVM_GO_PACKAGES 2016-07-27 03:01:00 +00:00
llvm Using branch probability to guide critical edge splitting. 2016-10-18 23:24:02 +00:00
openmp Fix OpenMP 4.0 library build 2016-10-18 17:39:06 +00:00
parallel-libs [SE] Change CoreTests target name 2016-09-27 15:32:52 +00:00
polly [test] Fix buildbot after SCEV change. 2016-10-18 22:58:09 +00:00