Skip to content
  1. Feb 15, 2010
  2. Feb 14, 2010
  3. Feb 13, 2010
  4. Feb 12, 2010
  5. Feb 11, 2010
  6. Feb 10, 2010
  7. Feb 09, 2010
  8. Feb 06, 2010
  9. Feb 05, 2010
    • Jakob Stoklund Olesen's avatar
      Teach SimplifyCFG about magic pointer constants. · 916f48a0
      Jakob Stoklund Olesen authored
      Weird code sometimes uses pointer constants other than null. This patch
      teaches SimplifyCFG to build switch instructions in those cases.
      
      Code like this:
      
      void f(const char *x) {
        if (!x)
          puts("null");
        else if ((uintptr_t)x == 1)
          puts("one");
        else if (x == (char*)2 || x == (char*)3)
          puts("two");
        else if ((intptr_t)x == 4)
          puts("four");
        else
          puts(x);
      }
      
      Now becomes a switch:
      
      define void @f(i8* %x) nounwind ssp {
      entry:
        %magicptr23 = ptrtoint i8* %x to i64            ; <i64> [#uses=1]
        switch i64 %magicptr23, label %if.else16 [
          i64 0, label %if.then
          i64 1, label %if.then2
          i64 2, label %if.then9
          i64 3, label %if.then9
          i64 4, label %if.then14
        ]
      
      Note that LLVM's own DenseMap uses magic pointers.
      
      llvm-svn: 95439
      916f48a0
    • Dan Gohman's avatar
      Implement releaseMemory in CodeGenPrepare and free the BackEdges · 4739e41c
      Dan Gohman authored
      container data. This prevents it from holding onto dangling
      pointers and potentially behaving unpredictably.
      
      llvm-svn: 95409
      4739e41c
    • Bob Wilson's avatar
      Do not reassociate expressions with i1 type. SimplifyCFG converts some · 27dfb1e1
      Bob Wilson authored
      short-circuited conditions to AND/OR expressions, and those expressions
      are often converted back to a short-circuited form in code gen.  The
      original source order may have been optimized to take advantage of the
      expected values, and if we reassociate them, we change the order and
      subvert that optimization.  Radar 7497329.
      
      llvm-svn: 95333
      27dfb1e1
  10. Feb 03, 2010
    • Bob Wilson's avatar
      Adjust the heuristics used to decide when SROA is likely to be profitable. · 04365c5f
      Bob Wilson authored
      The SRThreshold value makes perfect sense for checking if an entire aggregate
      should be promoted to a scalar integer, but it is not so good for splitting
      an aggregate into its separate elements.  A struct may contain a large embedded
      array along with some scalar fields that would benefit from being split apart
      by SROA.  Even if the total aggregate size is large, it may still be good to
      perform SROA.  Thus, the most important piece of this patch is simply moving
      the aggregate size comparison vs. SRThreshold so that it guards only the
      aggregate promotion.
      
      We have also been checking the number of elements to decide if an aggregate
      should be split up.  The limit of "SRThreshold/4" seemed rather arbitrary,
      and I don't think it's very useful to derive this limit from SRThreshold
      anyway.  I've collected some data showing that the current default limit of
      32 (since SRThreshold defaults to 128) is a reasonable cutoff for struct
      types.  One thing suggested by the data is that distinguishing between structs
      and arrays might be useful.  There are (obviously) a lot more large arrays
      than large structs (as measured by the number of elements and not the total
      size -- a large array inside a struct still counts as a single element given
      the way we do SROA right now).  Out of 8377 arrays where we successfully
      performed SROA while compiling a large set of benchmarks, only 16 of them had
      more than 8 elements.  And, for those 16 arrays, it's not at all clear that
      SROA was actually beneficial.  So, to offset the compile time cost of
      investigating more large structs for SROA, the patch lowers the limit on array
      elements to 8.
      
      This fixes Apple Radar 7563690.
      
      llvm-svn: 95224
      04365c5f
    • Evan Cheng's avatar
      Revert 94937 and move the noreturn check to codegen. · 27a41d54
      Evan Cheng authored
      llvm-svn: 95198
      27a41d54
    • Bob Wilson's avatar
      Fix some comment typos. · 76e8c595
      Bob Wilson authored
      llvm-svn: 95170
      76e8c595
    • Eric Christopher's avatar
      Recommit this, looks like it wasn't the cause. · d86233c1
      Eric Christopher authored
      llvm-svn: 95165
      d86233c1
    • Eric Christopher's avatar
      Hopefully temporarily revert this. · e67d01a9
      Eric Christopher authored
      llvm-svn: 95154
      e67d01a9
  11. Feb 02, 2010
  12. Feb 01, 2010
  13. Jan 31, 2010
Loading