Skip to content
  1. Jan 11, 2014
    • Eric Christopher's avatar
      Reformat. · ceec7b02
      Eric Christopher authored
      llvm-svn: 198980
      ceec7b02
    • Eric Christopher's avatar
      Update function name and add some helpful comments. · 67cde9ac
      Eric Christopher authored
      llvm-svn: 198979
      67cde9ac
    • Eric Christopher's avatar
      Fix odd whitespace. · a052e12c
      Eric Christopher authored
      llvm-svn: 198978
      a052e12c
    • Jason Molenda's avatar
    • Jim Ingham's avatar
      Get the breakpoint setting, and the Mac OS X DYLD trampolines and expression... · 1460e4bf
      Jim Ingham authored
      Get the breakpoint setting, and the Mac OS X DYLD trampolines and expression evaluator to handle Indirect
      symbols correctly.  There were a couple of pieces to this.
      
      1) When a breakpoint location finds itself pointing to an Indirect symbol, when the site for it is created
         it needs to resolve the symbol and actually set the site at its target.
      2) Not all breakpoints want to do this (i.e. a straight address breakpoint should always set itself on the
         specified address, so somem machinery was needed to specify that.
      3) I added some info to the break list output for indirect symbols so you could see what was happening. 
         Also I made it clear when we re-route through re-exported symbols.
      4) I moved ResolveIndirectFunction from ProcessPosix to Process since it works the exact same way on Mac OS X
         and the other posix systems.  If we find a platform that doesn't do it this way, they can override the
         call in Process.
      5) Fixed one bug in RunThreadPlan, if you were trying to run a thread plan after a "running" event had
         been broadcast, the event coalescing would cause you to miss the ThreadPlan running event.  So I added
         a way to override the coalescing.
      6) Made DynamicLoaderMacOSXDYLD::GetStepThroughTrampolinePlan handle Indirect & Re-exported symbols.
      
      <rdar://problem/15280639>
      
      llvm-svn: 198976
      1460e4bf
    • Warren Hunt's avatar
      [ms-abi] Adjusting Rules for Padding Between Bases · 87c2b040
      Warren Hunt authored
      The presence of a VBPtr suppresses the presence of zero sized 
      sub-objects in the non-virtual portion of the object in the context of 
      determining if two base objects need alias-avoidance padding placed 
      between them.
      
      Test cases included.
      
      llvm-svn: 198975
      87c2b040
    • Rui Ueyama's avatar
      [PECOFF] Add a unit test for r198925. · b8912b4f
      Rui Ueyama authored
      llvm-svn: 198974
      b8912b4f
    • Diego Novillo's avatar
      Extend and simplify the sample profile input file. · 9518b63b
      Diego Novillo authored
      1- Use the line_iterator class to read profile files.
      
      2- Allow comments in profile file. Lines starting with '#'
         are completely ignored while reading the profile.
      
      3- Add parsing support for discriminators and indirect call samples.
      
         Our external profiler can emit more profile information that we are
         currently not handling. This patch does not add new functionality to
         support this information, but it allows profile files to provide it.
      
         I will add actual support later on (for at least one of these
         features, I need support for DWARF discriminators in Clang).
      
         A sample line may contain the following additional information:
      
         Discriminator. This is used if the sampled program was compiled with
         DWARF discriminator support
         (http://wiki.dwarfstd.org/index.php?title=Path_Discriminators). This
         is currently only emitted by GCC and we just ignore it.
      
         Potential call targets and samples. If present, this line contains a
         call instruction. This models both direct and indirect calls. Each
         called target is listed together with the number of samples. For
         example,
      
                          130: 7  foo:3  bar:2  baz:7
      
         The above means that at relative line offset 130 there is a call
         instruction that calls one of foo(), bar() and baz(). With baz()
         being the relatively more frequent call target.
      
         Differential Revision: http://llvm-reviews.chandlerc.com/D2355
      
      4- Simplify format of profile input file.
      
         This implements earlier suggestions to simplify the format of the
         sample profile file. The symbol table is not necessary and function
         profiles do not need to know the number of samples in advance.
      
         Differential Revision: http://llvm-reviews.chandlerc.com/D2419
      
      llvm-svn: 198973
      9518b63b
    • Diego Novillo's avatar
      Propagation of profile samples through the CFG. · 0accb3d2
      Diego Novillo authored
      This adds a propagation heuristic to convert instruction samples
      into branch weights. It implements a similar heuristic to the one
      implemented by Dehao Chen on GCC.
      
      The propagation proceeds in 3 phases:
      
      1- Assignment of block weights. All the basic blocks in the function
         are initial assigned the same weight as their most frequently
         executed instruction.
      
      2- Creation of equivalence classes. Since samples may be missing from
         blocks, we can fill in the gaps by setting the weights of all the
         blocks in the same equivalence class to the same weight. To compute
         the concept of equivalence, we use dominance and loop information.
         Two blocks B1 and B2 are in the same equivalence class if B1
         dominates B2, B2 post-dominates B1 and both are in the same loop.
      
      3- Propagation of block weights into edges. This uses a simple
         propagation heuristic. The following rules are applied to every
         block B in the CFG:
      
         - If B has a single predecessor/successor, then the weight
           of that edge is the weight of the block.
      
         - If all the edges are known except one, and the weight of the
           block is already known, the weight of the unknown edge will
           be the weight of the block minus the sum of all the known
           edges. If the sum of all the known edges is larger than B's weight,
           we set the unknown edge weight to zero.
      
         - If there is a self-referential edge, and the weight of the block is
           known, the weight for that edge is set to the weight of the block
           minus the weight of the other incoming edges to that block (if
           known).
      
      Since this propagation is not guaranteed to finalize for every CFG, we
      only allow it to proceed for a limited number of iterations (controlled
      by -sample-profile-max-propagate-iterations). It currently uses the same
      GCC default of 100.
      
      Before propagation starts, the pass builds (for each block) a list of
      unique predecessors and successors. This is necessary to handle
      identical edges in multiway branches. Since we visit all blocks and all
      edges of the CFG, it is cleaner to build these lists once at the start
      of the pass.
      
      Finally, the patch fixes the computation of relative line locations.
      The profiler emits lines relative to the function header. To discover
      it, we traverse the compilation unit looking for the subprogram
      corresponding to the function. The line number of that subprogram is the
      line where the function begins. That becomes line zero for all the
      relative locations.
      
      llvm-svn: 198972
      0accb3d2
    • Tom Roeder's avatar
      Space formatting fix for r198966. · 583a77e0
      Tom Roeder authored
      llvm-svn: 198971
      583a77e0
    • Filipe Cabecinhas's avatar
      Fix CMake build of debugserver on Mac OS X. · 199e9233
      Filipe Cabecinhas authored
      llvm-svn: 198970
      199e9233
  2. Jan 10, 2014
Loading