Skip to content
  1. Jun 16, 2013
    • David Blaikie's avatar
      Debug Info: Simplify Frame Index handling in DBG_VALUE Machine Instructions · 0252265b
      David Blaikie authored
      Rather than using the full power of target-specific addressing modes in
      DBG_VALUEs with Frame Indicies, simply use Frame Index + Offset. This
      reduces the complexity of debug info handling down to two
      representations of values (reg+offset and frame index+offset) rather
      than three or four.
      
      Ideally we could ensure that frame indicies had been eliminated by the
      time we reached an assembly or dwarf generation, but I haven't spent the
      time to figure out where the FIs are leaking through into that & whether
      there's a good place to convert them. Some FI+offset=>reg+offset
      conversion is done (see PrologEpilogInserter, for example) which is
      necessary for some SelectionDAG assumptions about registers, I believe,
      but it might be possible to make this a more thorough conversion &
      ensure there are no remaining FIs no matter how instruction selection
      is performed.
      
      llvm-svn: 184066
      0252265b
  2. Jun 15, 2013
  3. Jun 14, 2013
  4. Jun 13, 2013
  5. Jun 12, 2013
  6. Jun 11, 2013
  7. Jun 10, 2013
  8. Jun 09, 2013
  9. Jun 08, 2013
  10. Jun 07, 2013
  11. Jun 06, 2013
  12. Jun 05, 2013
    • David Blaikie's avatar
      PR15662: Optimized debug info produces out of order function parameters · 6f1a8067
      David Blaikie authored
      When a function is inlined we lazily construct the variables
      representing the function's parameters. After that, we add any remaining
      unused parameters.
      
      If the function doesn't use all the parameters, or uses them out of
      order, then the DWARF would produce them in that order, producing a
      parameter order that doesn't match the source.
      
      This fix causes us to always keep the arg variables at the start of the
      variable list & in the original order from the source.
      
      llvm-svn: 183297
      6f1a8067
  13. Jun 04, 2013
    • Shuxin Yang's avatar
      Fix a defect in code-layout pass, improving Benchmarks/Olden/em3d/em3d by about 30% · 8b8fd217
      Shuxin Yang authored
      (4.58s vs 3.2s on an oldish Mac Tower). 
      
        The corresponding src is excerpted bellow. The lopp accounts for about 90% of execution time.
        --------------------
          cat -n test-suite/MultiSource/Benchmarks/Olden/em3d/make_graph.c
           90 
           91         for (k=0; k<j; k++)
           92           if (other_node == cur_node->to_nodes[k]) break;
      
        The defective layout is sketched bellow, where the two branches need to swap.
        ------------------------------------------------------------------------
            L:
               ...
            if (cond) goto out-of-loop
            goto L
      
        While this code sequence is defective, I don't understand why it incurs 1/3 of 
      execution time. CPU-event-profiling indicates the poor laoyout dose not increase
      in br-misprediction; it dosen't increase stall cycle at all, and it dosen't 
      prevent the CPU detect the loop (i.e. Loop-Stream-Detector seems to be working fine
      as well)... 
      
         The root cause of the problem is that the layout pass calls AnalyzeBranch() 
      with basic-block which is not updated to reflect its current layout.
      
      rdar://13966341
      
      llvm-svn: 183174
      8b8fd217
  14. Jun 01, 2013
  15. May 31, 2013
Loading