Skip to content
Snippets Groups Projects
  1. Mar 10, 2015
  2. Mar 09, 2015
  3. Mar 08, 2015
  4. Mar 07, 2015
  5. Mar 06, 2015
    • Benjamin Kramer's avatar
      CodeGen: Emit constant temporaries into read-only globals. · fe855069
      Benjamin Kramer authored
      Instead of creating a copy on the stack just stash them in a private
      constant global. This saves both the copying overhead and the stack
      space, and gives the optimizer more room to constant fold.
      
      This tries to make array temporaries more similar to regular arrays,
      they can't use the same logic because a temporary has no VarDecl to be
      bound to so we roll our own version here.
      
      The original use case for this optimization was code like
        for (int i : {1, 2, 3, 4, 5, 6, 7, 8, 10})
          foo(i);
      where without this patch (assuming that the loop is not unrolled) we
      would alloca an array on the stack, copy the 10 values over and
      iterate on that. With this patch we put the array in .text use it
      directly. Apart from that case this helps on virtually any passing of
      a constant std::initializer_list as a function argument.
      
      Differential Revision: http://reviews.llvm.org/D8034
      
      git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@231508 91177308-0d34-0410-b5e6-96231b3b80d8
      fe855069
Loading