Skip to content
  1. Oct 19, 2016
  2. Oct 18, 2016
    • Dehao Chen's avatar
      Using branch probability to guide critical edge splitting. · ea62ae98
      Dehao Chen authored
      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: 284541
      ea62ae98
  3. Apr 05, 2016
    • Chuang-Yu Cheng's avatar
      Don't delete empty preheaders in CodeGenPrepare if it would create a critical edge · d3fb38ca
      Chuang-Yu Cheng authored
      Presently, CodeGenPrepare deletes all nearly empty (only phi and branch)
      basic blocks. This pass can delete loop preheaders which frequently creates
      critical edges. A preheader can be a convenient place to spill registers to
      the stack. If the entrance to a loop body is a critical edge, then spills
      may occur in the loop body rather than immediately before it. This patch
      protects loop preheaders from deletion in CodeGenPrepare even if they are
      nearly empty.
      
      Since the patch alters the CFG, it affects a large number of test cases.
      In most cases, the changes are merely cosmetic (basic blocks have different
      names or instruction orders change slightly). I am somewhat concerned about
      the test/CodeGen/Mips/brdelayslot.ll test case. If the loop preheader is not
      deleted, then the MIPS backend does not take advantage of a branch delay
      slot. Consequently, I would like some close review by a MIPS expert.
      
      The patch also partially subsumes D16893 from George Burgess IV. George
      correctly notes that CodeGenPrepare does not actually preserve the dominator
      tree. I think the dominator tree was usually not valid when CodeGenPrepare
      ran, but I am using LoopInfo to mark preheaders, so the dominator tree is
      now always valid before CodeGenPrepare.
      
      Author: Tom Jablin (tjablin)
      Reviewers: hfinkel george.burgess.iv vkalintiris dsanders kbarton cycheng
      
      http://reviews.llvm.org/D16984
      
      llvm-svn: 265397
      d3fb38ca
  4. Mar 26, 2015
  5. May 05, 2011
  6. Sep 30, 2010
  7. Sep 27, 2010
  8. Sep 23, 2010
  9. Mar 26, 2010
  10. Mar 25, 2010
    • Chris Lattner's avatar
      Make the NDEBUG assertion stronger and more clear what is · 4690af85
      Chris Lattner authored
      happening.
      
      Enhance scheduling to set the DEAD flag on implicit defs
      more aggressively.  Before, we'd set an implicit def operand
      to dead if it were present in the SDNode corresponding to
      the machineinstr but had no use.  Now we do it in this case
      AND if the implicit def does not exist in the SDNode at all.
      
      This exposes a couple of problems: one is the FIXME, which
      causes a live intervals crash on CodeGen/X86/sibcall.ll.
      The second is that it makes machinecse and licm more 
      aggressive (which is a good thing) but also exposes a case
      where licm hoists a set0 and then it doesn't get resunk.
      
      Talking to codegen folks about both these issues, but I need
      this patch in in the meantime.
      
      llvm-svn: 99485
      4690af85
  11. Sep 09, 2009
  12. Jan 09, 2009
Loading