Skip to content
  1. May 23, 2013
  2. Feb 05, 2013
  3. Dec 20, 2012
  4. 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
  5. Nov 13, 2012
  6. Nov 12, 2012
  7. Oct 15, 2012
  8. Sep 12, 2012
  9. Sep 06, 2012
  10. Aug 22, 2012
  11. Jun 06, 2012
  12. Jun 02, 2012
    • Jakob Stoklund Olesen's avatar
      Switch all register list clients to the new MC*Iterator interface. · 54038d79
      Jakob Stoklund Olesen authored
      No functional change intended.
      
      Sorry for the churn. The iterator classes are supposed to help avoid
      giant commits like this one in the future. The TableGen-produced
      register lists are getting quite large, and it may be necessary to
      change the table representation.
      
      This makes it possible to do so without changing all clients (again).
      
      llvm-svn: 157854
      54038d79
  13. Apr 23, 2012
    • Preston Gurd's avatar
      This patch fixes a problem which arose when using the Post-RA scheduler · 9a091475
      Preston Gurd authored
      on X86 Atom. Some of our tests failed because the tail merging part of
      the BranchFolding pass was creating new basic blocks which did not
      contain live-in information. When the anti-dependency code in the Post-RA
      scheduler ran, it would sometimes rename the register containing
      the function return value because the fact that the return value was
      live-in to the subsequent block had been lost. To fix this, it is necessary
      to run the RegisterScavenging code in the BranchFolding pass.
      
      This patch makes sure that the register scavenging code is invoked
      in the X86 subtarget only when post-RA scheduling is being done.
      Post RA scheduling in the X86 subtarget is only done for Atom.
      
      This patch adds a new function to the TargetRegisterClass to control
      whether or not live-ins should be preserved during branch folding.
      This is necessary in order for the anti-dependency optimizations done
      during the PostRASchedulerList pass to work properly when doing
      Post-RA scheduling for the X86 in general and for the Intel Atom in particular.
      
      The patch adds and invokes the new function trackLivenessAfterRegAlloc()
      instead of using the existing requiresRegisterScavenging().
      It changes BranchFolding.cpp to call trackLivenessAfterRegAlloc() instead of
      requiresRegisterScavenging(). It changes the all the targets that
      implemented requiresRegisterScavenging() to also implement
      trackLivenessAfterRegAlloc().  
      
      It adds an assertion in the Post RA scheduler to make sure that post RA
      liveness information is available when it is needed.
      
      It changes the X86 break-anti-dependencies test to use –mcpu=atom, in order
      to avoid running into the added assertion.
      
      Finally, this patch restores the use of anti-dependency checking
      (which was turned off temporarily for the 3.1 release) for
      Intel Atom in the Post RA scheduler.
      
      Patch by Andy Zhang!
      
      Thanks to Jakob and Anton for their reviews.
      
      llvm-svn: 155395
      9a091475
  14. Mar 09, 2012
  15. Mar 08, 2012
  16. Mar 07, 2012
    • Andrew Trick's avatar
      misched preparation: clarify ScheduleDAG and ScheduleDAGInstrs roles. · 60cf03e7
      Andrew Trick authored
      ScheduleDAG is responsible for the DAG: SUnits and SDeps. It provides target hooks for latency computation.
      
      ScheduleDAGInstrs extends ScheduleDAG and defines the current scheduling region in terms of MachineInstr iterators. It has access to the target's scheduling itinerary data. ScheduleDAGInstrs provides the logic for building the ScheduleDAG for the sequence of MachineInstrs in the current region. Target's can implement highly custom schedulers by extending this class.
      
      ScheduleDAGPostRATDList provides the driver and diagnostics for current postRA scheduling. It maintains a current Sequence of scheduled machine instructions and logic for splicing them into the block. During scheduling, it uses the ScheduleHazardRecognizer provided by the target.
      
      Specific changes:
      - Removed driver code from ScheduleDAG. clearDAG is the only interface needed.
      
      - Added enterRegion/exitRegion hooks to ScheduleDAGInstrs to delimit the scope of each scheduling region and associated DAG. They should be used to setup and cleanup any region-specific state in addition to the DAG itself. This is necessary because we reuse the same ScheduleDAG object for the entire function. The target may extend these hooks to do things at regions boundaries, like bundle terminators. The hooks are called even if we decide not to schedule the region. So all instructions in a block are "covered" by these calls.
      
      - Added ScheduleDAGInstrs::begin()/end() public API.
      
      - Moved Sequence into the driver layer, which is specific to the scheduling algorithm.
      
      llvm-svn: 152208
      60cf03e7
    • Andrew Trick's avatar
      misched preparation: modularize schedule emission. · e932bb77
      Andrew Trick authored
      ScheduleDAG has nothing to do with how the instructions are scheduled.
      
      llvm-svn: 152206
      e932bb77
    • Andrew Trick's avatar
      misched preparation: modularize schedule printing. · edee68ce
      Andrew Trick authored
      ScheduleDAG will not refer to the scheduled instruction sequence.
      
      llvm-svn: 152205
      edee68ce
    • Andrew Trick's avatar
      misched preparation: modularize schedule verification. · 46a58664
      Andrew Trick authored
      ScheduleDAG will not refer to the scheduled instruction sequence.
      
      llvm-svn: 152204
      46a58664
  17. Mar 05, 2012
  18. Feb 23, 2012
    • Benjamin Kramer's avatar
      BitVectorize loop. · ef8bf395
      Benjamin Kramer authored
      llvm-svn: 151274
      ef8bf395
    • Benjamin Kramer's avatar
      post-ra-sched: Turn the KillIndices vector into a bitvector, it only stored two meaningful states. · 796fd469
      Benjamin Kramer authored
      Rename it to LiveRegs to make it more clear what's stored inside.
      
      llvm-svn: 151273
      796fd469
    • Benjamin Kramer's avatar
      post-ra-sched: Replace a std::set of regs with a bitvector. · 21974b1f
      Benjamin Kramer authored
      Assuming that a single std::set node adds 3 control words, a bitvector
      can store (3*8+4)*8=224 registers in the allocated memory of a single
      element in the std::set (x86_64). Also we don't have to call malloc
      for every register added.
      
      llvm-svn: 151269
      21974b1f
    • Jakob Stoklund Olesen's avatar
      Make calls scheduling boundaries post-ra. · a793a59f
      Jakob Stoklund Olesen authored
      Before register allocation, instructions can be moved across calls in
      order to reduce register pressure.  After register allocation, we don't
      gain a lot by moving callee-saved defs across calls.  In fact, since the
      scheduler doesn't have a good idea how registers are used in the callee,
      it can't really make good scheduling decisions.
      
      This changes the schedule in two ways: 1. Latencies to call uses and
      defs are no longer accounted for, causing some random shuffling around
      calls.  This isn't really a problem since those uses and defs are
      inaccurate proxies for what happens inside the callee.  They don't
      represent registers used by the call instruction itself.
      
      2. Instructions are no longer moved across calls.  This didn't happen
      very often, and the scheduling decision was made on dubious information
      anyway.
      
      As with any scheduling change, benchmark numbers shift around a bit,
      but there is no positive or negative trend from this change.
      
      This makes the post-ra scheduler 5% faster for ARM targets.
      
      The secret motivation for this patch is the introduction of register
      mask operands representing call clobbers.  The most efficient way of
      handling regmasks in ScheduleDAGInstrs is to model them as barriers for
      physreg live ranges, but not for virtreg live ranges.  That's fine
      pre-ra, but post-ra it would have the same effect as this patch.
      
      llvm-svn: 151265
      a793a59f
    • Jakob Stoklund Olesen's avatar
      Handle regmasks in FixupKills. · 28d4803a
      Jakob Stoklund Olesen authored
      llvm-svn: 151226
      28d4803a
  19. Feb 22, 2012
  20. Feb 08, 2012
  21. Jan 14, 2012
  22. Dec 14, 2011
    • Evan Cheng's avatar
      - Add MachineInstrBundle.h and MachineInstrBundle.cpp. This includes a function · 7fae11b2
      Evan Cheng authored
        to finalize MI bundles (i.e. add BUNDLE instruction and computing register def
        and use lists of the BUNDLE instruction) and a pass to unpack bundles.
      - Teach more of MachineBasic and MachineInstr methods to be bundle aware.
      - Switch Thumb2 IT block to MI bundles and delete the hazard recognizer hack to
        prevent IT blocks from being broken apart.
      
      llvm-svn: 146542
      7fae11b2
  23. Dec 07, 2011
    • Evan Cheng's avatar
      Add bundle aware API for querying instruction properties and switch the code · 7f8e563a
      Evan Cheng authored
      generator to it. For non-bundle instructions, these behave exactly the same
      as the MC layer API.
      
      For properties like mayLoad / mayStore, look into the bundle and if any of the
      bundled instructions has the property it would return true.
      For properties like isPredicable, only return true if *all* of the bundled
      instructions have the property.
      For properties like canFoldAsLoad, isCompare, conservatively return false for
      bundles.
      
      llvm-svn: 146026
      7f8e563a
  24. Nov 15, 2011
  25. Jul 01, 2011
  26. Jun 16, 2011
  27. Jun 02, 2011
  28. Jun 01, 2011
    • Andrew Trick's avatar
      Add an issue width check to the postRA scheduler. Patch by Max Kazakov! · 18c9b37a
      Andrew Trick authored
      For targets with no itinerary (x86) it is a nop by default. For
      targets with issue width already expressed in the itinerary (ARM) it
      bypasses a scoreboard check but otherwise does not affect the
      schedule. It does make the code more consistent and complete and
      allows new targets to specify their issue width in an arbitrary way.
      
      llvm-svn: 132385
      18c9b37a
  29. May 06, 2011
Loading