Skip to content
  1. Oct 31, 2013
  2. Oct 27, 2013
  3. Oct 23, 2013
  4. Oct 22, 2013
  5. Oct 21, 2013
  6. Oct 19, 2013
  7. Oct 17, 2013
  8. Oct 09, 2013
    • Shuxin Yang's avatar
      Fix a bug in Dead Argument Elimination. · 1cab418c
      Shuxin Yang authored
        If a function seen at compile time is not necessarily the one linked to
      the binary being built, it is illegal to change the actual arguments
      passing to it. 
      
        e.g. 
         --------------------------
         void foo(int lol) {
           // foo() has linkage satisifying isWeakForLinker()
           // "lol" is not used at all.
         }
      
         void bar(int lo2) {
            // xform to foo(undef) is illegal, as compiler dose not know which
            // instance of foo() will be linked to the the binary being built.
            foo(lol2); 
         }
        -----------------------------
      
        Such functions can be captured by isWeakForLinker(). NOTE that
      mayBeOverridden() is insufficient for this purpose as it dosen't include
      linkage types like AvailableExternallyLinkage and LinkOnceODRLinkage.
      Take link_odr* as an example, it indicates a set of *EQUIVALENT* globals
      that can be merged at link-time. However, the semantic of 
      *EQUIVALENT*-functions includes parameters. Changing parameters breaks
      the assumption.
      
        Thank John McCall for help, especially for the explanation of subtle
      difference between linkage types.
      
        rdar://11546243
      
      llvm-svn: 192302
      1cab418c
  9. Oct 07, 2013
  10. Oct 03, 2013
    • Rafael Espindola's avatar
      Optimize linkonce_odr unnamed_addr functions during LTO. · cda2911c
      Rafael Espindola authored
      Generalize the API so we can distinguish symbols that are needed just for a DSO
      symbol table from those that are used from some native .o.
      
      The symbols that are only wanted for the dso symbol table can be dropped if
      llvm can prove every other dso has a copy (linkonce_odr) and the address is not
      important (unnamed_addr).
      
      llvm-svn: 191922
      cda2911c
  11. Oct 02, 2013
  12. Oct 01, 2013
    • Matt Arsenault's avatar
      Don't merge tiny functions. · 517d84e2
      Matt Arsenault authored
      It's silly to merge functions like these:
      
      define void @foo(i32 %x) {
        ret void
      }
      
      define void @bar(i32 %x) {
        ret void
      }
      
      to get
      
      define void @bar(i32) {
        tail call void @foo(i32 %0)
        ret void
      }
      
      llvm-svn: 191786
      517d84e2
  13. Sep 22, 2013
  14. Sep 17, 2013
    • Stepan Dyatkovskiy's avatar
      Bugfix for PR17099: · dc2c4b44
      Stepan Dyatkovskiy authored
      Wrong cast operation.
      MergeFunctions emits Bitcast instead of pointer-to-integer operation.
      Patch fixes MergeFunctions::writeThunk function. It replaces
      unconditional Bitcast creation with "Value* createCast(...)" method, that
      checks operand types and selects proper instruction.
      See unit-test as example.
      
      llvm-svn: 190859
      dc2c4b44
  15. Sep 16, 2013
  16. Sep 13, 2013
  17. Sep 11, 2013
  18. Sep 10, 2013
  19. Sep 05, 2013
  20. Sep 04, 2013
  21. Sep 03, 2013
    • Nadav Rotem's avatar
      Enable late-vectorization by default. · 5d78dba6
      Nadav Rotem authored
      This patch changes the default setting for the LateVectorization flag that controls where the loop-vectorizer is ran.
      
      Perf gains:
      SingleSource/Benchmarks/Shootout/matrix -37.33%
      MultiSource/Benchmarks/PAQ8p/paq8p  -22.83%
      SingleSource/Benchmarks/Linpack/linpack-pc  -16.22%
      SingleSource/Benchmarks/Shootout-C++/ary3 -15.16%
      MultiSource/Benchmarks/TSVC/NodeSplitting-flt/NodeSplitting-flt -10.34%
      MultiSource/Benchmarks/TSVC/NodeSplitting-dbl/NodeSplitting-dbl -7.12%
      
      Regressions:
      SingleSource/Benchmarks/Misc/lowercase  15.10%
      MultiSource/Benchmarks/TSVC/Equivalencing-flt/Equivalencing-flt 13.18%
      SingleSource/Benchmarks/Shootout-C++/matrix 8.27%
      SingleSource/Benchmarks/CoyoteBench/lpbench 7.30%
      
      llvm-svn: 189858
      5d78dba6
  22. Aug 30, 2013
  23. Aug 29, 2013
    • Nadav Rotem's avatar
      Vectorizer/PassManager: I am working on moving the vectorizer out of the SCC... · 4c459bcd
      Nadav Rotem authored
      Vectorizer/PassManager:  I am working on moving the vectorizer out of the SCC passes. This patch moves the SLP-vectorizer and BB-vectorizer back into SCC passes for two reasons:
      1. They are a kind of cannonicalization.
      2. The performance measurements show that it is better to keep them in.
      
      There should be no functional change if you are not enabling the LateVectorization mode.
      
      llvm-svn: 189539
      4c459bcd
  24. Aug 28, 2013
    • Hal Finkel's avatar
      Disable unrolling in the loop vectorizer when disabled in the pass manager · 6d09904c
      Hal Finkel authored
      When unrolling is disabled in the pass manager, the loop vectorizer should also
      not unroll loops. This will allow the -fno-unroll-loops option in Clang to
      behave as expected (even for vectorizable loops). The loop vectorizer's
      -force-vector-unroll option will (continue to) override the pass-manager
      setting (including -force-vector-unroll=0 to force use of the internal
      auto-selection logic).
      
      In order to test this, I added a flag to opt (-disable-loop-unrolling) to force
      disable unrolling through opt (the analog of -fno-unroll-loops in Clang). Also,
      this fixes a small bug in opt where the loop vectorizer was enabled only after
      the pass manager populated the queue of passes (the global_alias.ll test needed
      a slight update to the RUN line as a result of this fix).
      
      llvm-svn: 189499
      6d09904c
  25. Aug 27, 2013
  26. Aug 23, 2013
    • Michael Gottesman's avatar
      Update StripDeadDebugInfo to use DebugInfoFinder so that it is no longer stale... · 823aaffd
      Michael Gottesman authored
      Update StripDeadDebugInfo to use DebugInfoFinder so that it is no longer stale to the point of not working and more resilient to debug info changes.
      
      The current version of StripDeadDebugInfo became stale and no longer actually
      worked since it was expecting an older version of debug info.
      
      This patch updates it to use DebugInfoFinder and the modern DebugInfo classes as
      much as possible to make it more redundent to such changes. Additionally, the
      only place where that was avoided (the code where we replace the old sets with
      the new), I call verify on the DIContextUnit implying that if the format changes
      and my live set changes no longer make sense an assert will be hit. In order to
      ensure that that occurs I have included a test case.
      
      The actual stripping of the dead debug info follows the same strategy as was
      used before in this class: find the live set and replace the old set in the
      given compile unit (which may contain dead global variables/functions) with the
      new live one.
      
      llvm-svn: 189078
      823aaffd
  27. Aug 22, 2013
  28. Aug 13, 2013
Loading