Skip to content
  1. Jun 18, 2013
  2. Jun 06, 2013
  3. May 13, 2013
    • Rafael Espindola's avatar
      Remove the MachineMove class. · 227144c2
      Rafael Espindola authored
      It was just a less powerful and more confusing version of
      MCCFIInstruction. A side effect is that, since MCCFIInstruction uses
      dwarf register numbers, calls to getDwarfRegNum are pushed out, which
      should allow further simplifications.
      
      I left the MachineModuleInfo::addFrameMove interface unchanged since
      this patch was already fairly big.
      
      llvm-svn: 181680
      227144c2
  4. Feb 19, 2013
  5. Jan 07, 2013
    • Chandler Carruth's avatar
      Switch TargetTransformInfo from an immutable analysis pass that requires · 664e354d
      Chandler Carruth authored
      a TargetMachine to construct (and thus isn't always available), to an
      analysis group that supports layered implementations much like
      AliasAnalysis does. This is a pretty massive change, with a few parts
      that I was unable to easily separate (sorry), so I'll walk through it.
      
      The first step of this conversion was to make TargetTransformInfo an
      analysis group, and to sink the nonce implementations in
      ScalarTargetTransformInfo and VectorTargetTranformInfo into
      a NoTargetTransformInfo pass. This allows other passes to add a hard
      requirement on TTI, and assume they will always get at least on
      implementation.
      
      The TargetTransformInfo analysis group leverages the delegation chaining
      trick that AliasAnalysis uses, where the base class for the analysis
      group delegates to the previous analysis *pass*, allowing all but tho
      NoFoo analysis passes to only implement the parts of the interfaces they
      support. It also introduces a new trick where each pass in the group
      retains a pointer to the top-most pass that has been initialized. This
      allows passes to implement one API in terms of another API and benefit
      when some other pass above them in the stack has more precise results
      for the second API.
      
      The second step of this conversion is to create a pass that implements
      the TargetTransformInfo analysis using the target-independent
      abstractions in the code generator. This replaces the
      ScalarTargetTransformImpl and VectorTargetTransformImpl classes in
      lib/Target with a single pass in lib/CodeGen called
      BasicTargetTransformInfo. This class actually provides most of the TTI
      functionality, basing it upon the TargetLowering abstraction and other
      information in the target independent code generator.
      
      The third step of the conversion adds support to all TargetMachines to
      register custom analysis passes. This allows building those passes with
      access to TargetLowering or other target-specific classes, and it also
      allows each target to customize the set of analysis passes desired in
      the pass manager. The baseline LLVMTargetMachine implements this
      interface to add the BasicTTI pass to the pass manager, and all of the
      tools that want to support target-aware TTI passes call this routine on
      whatever target machine they end up with to add the appropriate passes.
      
      The fourth step of the conversion created target-specific TTI analysis
      passes for the X86 and ARM backends. These passes contain the custom
      logic that was previously in their extensions of the
      ScalarTargetTransformInfo and VectorTargetTransformInfo interfaces.
      I separated them into their own file, as now all of the interface bits
      are private and they just expose a function to create the pass itself.
      Then I extended these target machines to set up a custom set of analysis
      passes, first adding BasicTTI as a fallback, and then adding their
      customized TTI implementations.
      
      The fourth step required logic that was shared between the target
      independent layer and the specific targets to move to a different
      interface, as they no longer derive from each other. As a consequence,
      a helper functions were added to TargetLowering representing the common
      logic needed both in the target implementation and the codegen
      implementation of the TTI pass. While technically this is the only
      change that could have been committed separately, it would have been
      a nightmare to extract.
      
      The final step of the conversion was just to delete all the old
      boilerplate. This got rid of the ScalarTargetTransformInfo and
      VectorTargetTransformInfo classes, all of the support in all of the
      targets for producing instances of them, and all of the support in the
      tools for manually constructing a pass based around them.
      
      Now that TTI is a relatively normal analysis group, two things become
      straightforward. First, we can sink it into lib/Analysis which is a more
      natural layer for it to live. Second, clients of this interface can
      depend on it *always* being available which will simplify their code and
      behavior. These (and other) simplifications will follow in subsequent
      commits, this one is clearly big enough.
      
      Finally, I'm very aware that much of the comments and documentation
      needs to be updated. As soon as I had this working, and plausibly well
      commented, I wanted to get it committed and in front of the build bots.
      I'll be doing a few passes over documentation later if it sticks.
      
      Commits to update DragonEgg and Clang will be made presently.
      
      llvm-svn: 171681
      664e354d
  6. Dec 10, 2012
  7. Dec 03, 2012
    • Chandler Carruth's avatar
      Use the new script to sort the includes of every file under lib. · ed0881b2
      Chandler Carruth authored
      Sooooo many of these had incorrect or strange main module includes.
      I have manually inspected all of these, and fixed the main module
      include to be the nearest plausible thing I could find. If you own or
      care about any of these source files, I encourage you to take some time
      and check that these edits were sensible. I can't have broken anything
      (I strictly added headers, and reordered them, never removed), but they
      may not be the headers you'd really like to identify as containing the
      API being implemented.
      
      Many forward declarations and missing includes were added to a header
      files to allow them to parse cleanly when included first. The main
      module rule does in fact have its merits. =]
      
      llvm-svn: 169131
      ed0881b2
  8. Nov 30, 2012
    • Bill Wendling's avatar
      Replace r168930 with a more reasonable patch. · c786b312
      Bill Wendling authored
      The original patch removed a bunch of code that the SjLjEHPrepare pass placed
      into the entry block if all of the landing pads were removed during the
      CodeGenPrepare class. The more natural way of doing things is to run the CGP
      *before* we run the SjLjEHPrepare pass.
      
      Make it so!
      
      llvm-svn: 169044
      c786b312
  9. Nov 22, 2012
  10. Sep 18, 2012
  11. Jul 02, 2012
    • Bob Wilson's avatar
      Extend TargetPassConfig to allow running only a subset of the normal passes. · cac3b906
      Bob Wilson authored
      This is still a work in progress but I believe it is currently good enough
      to fix PR13122 "Need unit test driver for codegen IR passes".  For example,
      you can run llc with -stop-after=loop-reduce to have it dump out the IR after
      running LSR.  Serializing machine-level IR is not yet supported but we have
      some patches in progress for that.
      
      The plan is to serialize the IR to a YAML file, containing separate sections
      for the LLVM IR, machine-level IR, and whatever other info is needed.  Chad
      suggested that we stash the stop-after pass in the YAML file and use that
      instead of the start-after option to figure out where to restart the
      compilation.  I think that's a great idea, but since it's not implemented yet
      I put the -start-after option into this patch for testing purposes.
      
      llvm-svn: 159570
      cac3b906
    • Bob Wilson's avatar
      Add all codegen passes to the PassManager via TargetPassConfig. · bbd38dd9
      Bob Wilson authored
      This is a preliminary step toward having TargetPassConfig be able to
      start and stop the compilation at specified passes for unit testing
      and debugging.  No functionality change.
      
      llvm-svn: 159567
      bbd38dd9
  12. May 20, 2012
  13. May 15, 2012
  14. Apr 02, 2012
  15. Mar 13, 2012
  16. Mar 05, 2012
  17. Feb 17, 2012
  18. Feb 08, 2012
  19. Feb 06, 2012
  20. Feb 04, 2012
    • Nick Lewycky's avatar
      Fix a leak! · 6024f9b5
      Nick Lewycky authored
      Andy, in a previous commit you made this into an ImmutablePass so that you could
      add it to the PassManager, then in the next commit you left it a Pass but
      removed the code that added it to the PM. If you do add it to the PM then the PM
      should take care of deleting it, but it's also true that nothing in codegen
      needs this object to exist after it's done its work here. It's not clear to me
      which design you want; this should likely either cease to be a Pass or be added
      to the PM where other parts of CodeGen will request it.
      
      llvm-svn: 149765
      6024f9b5
    • Andrew Trick's avatar
      TargetPassConfig: confine the MC configuration to TargetMachine. · f8ea108c
      Andrew Trick authored
      Passes prior to instructon selection are now split into separate configurable stages.
      Header dependencies are simplified.
      The bulk of this diff is simply removal of the silly DisableVerify flags.
      
      Sorry for the target header churn. Attempting to stabilize them.
      
      llvm-svn: 149754
      f8ea108c
    • Andrew Trick's avatar
      Move TargetPassConfig implementation into Passes.cpp · de401d3c
      Andrew Trick authored
      llvm-svn: 149753
      de401d3c
    • Andrew Trick's avatar
      b7551336
  21. Feb 03, 2012
  22. Jan 22, 2012
  23. Jan 13, 2012
  24. Jan 10, 2012
  25. Jan 07, 2012
    • Evan Cheng's avatar
      Added a late machine instruction copy propagation pass. This catches · 00b1a3cd
      Evan Cheng authored
      opportunities that only present themselves after late optimizations
      such as tail duplication .e.g.
      ## BB#1:
              movl    %eax, %ecx
              movl    %ecx, %eax
              ret
      
      The register allocator also leaves some of them around (due to false
      dep between copies from phi-elimination, etc.)
      
      This required some changes in codegen passes. Post-ra scheduler and the
      pseudo-instruction expansion passes have been moved after branch folding
      and tail merging. They were before branch folding before because it did
      not always update block livein's. That's fixed now. The pass change makes
      independently since we want to properly schedule instructions after
      branch folding / tail duplication.
      
      rdar://10428165
      rdar://10640363
      
      llvm-svn: 147716
      00b1a3cd
  26. Dec 02, 2011
    • Nick Lewycky's avatar
      Move global variables in TargetMachine into new TargetOptions class. As an API · 50f02cb2
      Nick Lewycky authored
      change, now you need a TargetOptions object to create a TargetMachine. Clang
      patch to follow.
      
      One small functionality change in PTX. PTX had commented out the machine
      verifier parts in their copy of printAndVerify. That now calls the version in
      LLVMTargetMachine. Users of PTX who need verification disabled should rely on
      not passing the command-line flag to enable it.
      
      llvm-svn: 145714
      50f02cb2
  27. Nov 16, 2011
  28. Nov 02, 2011
    • Chandler Carruth's avatar
      Begin collecting some of the statistics for block placement discussed on · ae4e800c
      Chandler Carruth authored
      the mailing list. Suggestions for other statistics to collect would be
      awesome. =]
      
      Currently these are implemented as a separate pass guarded by a separate
      flag. I'm not thrilled by that, but I wanted to be able to collect the
      statistics for the old code placement as well as the new in order to
      have a point of comparison. I'm planning on folding them into the single
      pass if / when there is only one pass of interest.
      
      llvm-svn: 143537
      ae4e800c
  29. Oct 25, 2011
  30. Oct 21, 2011
    • Chandler Carruth's avatar
      Implement a block placement pass based on the branch probability and · 10281425
      Chandler Carruth authored
      block frequency analyses. This differs substantially from the existing
      block-placement pass in LLVM:
      
      1) It operates on the Machine-IR in the CodeGen layer. This exposes much
         more (and more precise) information and opportunities. Also, the
         results are more stable due to fewer transforms ocurring after the
         pass runs.
      2) It uses the generalized probability and frequency analyses. These can
         model static heuristics, code annotation derived heuristics as well
         as eventual profile loading. By basing the optimization on the
         analysis interface it can work from any (or a combination) of these
         inputs.
      3) It uses a more aggressive algorithm, both building chains from tho
         bottom up to maximize benefit, and using an SCC-based walk to layout
         chains of blocks in a profitable ordering without O(N^2) iterations
         which the old pass involves.
      
      The pass is currently gated behind a flag, and not enabled by default
      because it still needs to grow some important features. Most notably, it
      needs to support loop aligning and careful layout of loop structures
      much as done by hand currently in CodePlacementOpt. Once it supports
      these, and has sufficient testing and quality tuning, it should replace
      both of these passes.
      
      Thanks to Nick Lewycky and Richard Smith for help authoring & debugging
      this, and to Jakob, Andy, Eric, Jim, and probably a few others I'm
      forgetting for reviewing and answering all my questions. Writing
      a backend pass is *sooo* much better now than it used to be. =D
      
      llvm-svn: 142641
      10281425
  31. Oct 18, 2011
    • Nick Lewycky's avatar
      Add support for a new extension to the .file directive: · 40f8f2ff
      Nick Lewycky authored
        .file filenumber "directory" "filename"
      
      This removes one join+split of the directory+filename in MC internals. Because
      bitcode files have independent fields for directory and filenames in debug info,
      this patch may change the .o files written by existing .bc files.
      
      llvm-svn: 142300
      40f8f2ff
  32. Sep 30, 2011
Loading