Skip to content
  1. Dec 21, 2010
  2. Sep 10, 2010
    • Evan Cheng's avatar
      Teach if-converter to be more careful with predicating instructions that would · bf407075
      Evan Cheng authored
      take multiple cycles to decode.
      For the current if-converter clients (actually only ARM), the instructions that
      are predicated on false are not nops. They would still take machine cycles to
      decode. Micro-coded instructions such as LDM / STM can potentially take multiple
      cycles to decode. If-converter should take treat them as non-micro-coded
      simple instructions.
      
      llvm-svn: 113570
      bf407075
  3. Jun 10, 2010
  4. May 21, 2010
  5. May 20, 2010
  6. May 01, 2010
  7. Apr 07, 2010
    • Chris Lattner's avatar
      Three changes: · 3b9f02a2
      Chris Lattner authored
      1. Introduce some enums and accessors in the InlineAsm class
         that eliminate a ton of magic numbers when handling inline
         asm SDNode.
      2. Add a new MDNodeSDNode selection dag node type that holds
         a MDNode (shocking!)
      3. Add a new argument to ISD::INLINEASM nodes that hold !srcloc
         metadata, propagating it to the instruction emitter, which
         drops it.
      
      No functionality change.
      
      llvm-svn: 100605
      3b9f02a2
  8. Jan 22, 2010
  9. Oct 30, 2009
  10. Oct 10, 2009
  11. Sep 25, 2009
    • Dan Gohman's avatar
      Improve MachineMemOperand handling. · 48b185d6
      Dan Gohman authored
       - Allocate MachineMemOperands and MachineMemOperand lists in MachineFunctions.
         This eliminates MachineInstr's std::list member and allows the data to be
         created by isel and live for the remainder of codegen, avoiding a lot of
         copying and unnecessary translation. This also shrinks MemSDNode.
       - Delete MemOperandSDNode. Introduce MachineSDNode which has dedicated
         fields for MachineMemOperands.
       - Change MemSDNode to have a MachineMemOperand member instead of its own
         fields with the same information. This introduces some redundancy, but
         it's more consistent with what MachineInstr will eventually want.
       - Ignore alignment when searching for redundant loads for CSE, but remember
         the greatest alignment.
      
      Target-specific code which previously used MemOperandSDNodes with generic
      SDNodes now use MemIntrinsicSDNodes, with opcodes in a designated range
      so that the SelectionDAG framework knows that MachineMemOperand information
      is available.
      
      llvm-svn: 82794
      48b185d6
  12. Sep 18, 2009
  13. Apr 13, 2009
    • Dan Gohman's avatar
      Rename COPY_TO_SUBCLASS to COPY_TO_REGCLASS, and generalize · 6c142630
      Dan Gohman authored
      it accordingly. Thanks to Jakob Stoklund Olesen for pointing
      out how this might be useful.
      
      llvm-svn: 68986
      6c142630
    • Dan Gohman's avatar
      Add a new TargetInstrInfo MachineInstr opcode, COPY_TO_SUBCLASS. · 60a446ab
      Dan Gohman authored
      This will be used to replace things like X86's MOV32to32_.
      
      Enhance ScheduleDAGSDNodesEmit to be more flexible and robust
      in the presense of subregister superclasses and subclasses. It
      can now cope with the definition of a virtual register being in
      a subclass of a use.
      
      Re-introduce the code for recording register superreg classes and
      subreg classes. This is needed because when subreg extracts and
      inserts get coalesced away, the virtual registers are left in
      the correct subclass.
      
      llvm-svn: 68961
      60a446ab
  14. Feb 11, 2009
    • Dan Gohman's avatar
      When scheduling a block in parts, keep track of the overall · dfaf646c
      Dan Gohman authored
      instruction index across each part. Instruction indices are used
      to make live range queries, and live ranges can extend beyond
      scheduling region boundaries.
      
      Refactor the ScheduleDAGSDNodes class some more so that it
      doesn't have to worry about this additional information.
      
      llvm-svn: 64288
      dfaf646c
  15. Feb 06, 2009
  16. Jan 27, 2009
  17. Jan 16, 2009
    • Evan Cheng's avatar
      CreateVirtualRegisters does trivial copy coalescing. If a node def is used by... · 968e2e7b
      Evan Cheng authored
      CreateVirtualRegisters does trivial copy coalescing. If a node def is used by a single CopyToReg, it reuses the virtual register assigned to the CopyToReg. This won't work for SDNode that is a clone or is itself cloned. Disable this optimization for those nodes or it can end up with non-SSA machine instructions.
      
      llvm-svn: 62356
      968e2e7b
  18. Jan 15, 2009
  19. Jan 09, 2009
  20. Jan 03, 2009
    • Dan Gohman's avatar
      Remove the code from the scheduler that commuted two-address · 1be2e965
      Dan Gohman authored
      instructions to avoid copies, because TwoAddressInstructionPass
      also does this optimization.  The scheduler's version didn't
      account for live-out values, which resulted in spurious commutes
      and missed opportunities.
      
      Now, TwoAddressInstructionPass handles all the opportunities,
      instead of just those that the scheduler missed. The result is
      usually the same, though there are occasional trivial differences
      resulting from the avoidance of spurious commutes.
      
      llvm-svn: 61611
      1be2e965
  21. Jan 01, 2009
  22. Dec 23, 2008
  23. Dec 22, 2008
  24. Dec 09, 2008
    • Dan Gohman's avatar
      Rewrite the SDep class, and simplify some of the related code. · 2d170896
      Dan Gohman authored
      The Cost field is removed. It was only being used in a very limited way,
      to indicate when the scheduler should attempt to protect a live register,
      and it isn't really needed to do that. If we ever want the scheduler to
      start inserting copies in non-prohibitive situations, we'll have to
      rethink some things anyway.
      
      A Latency field is added. Instead of giving each node a single
      fixed latency, each edge can have its own latency. This will eventually
      be used to model various micro-architecture properties more accurately.
      
      The PointerIntPair class and an internal union are now used, which
      reduce the overall size.
      
      llvm-svn: 60806
      2d170896
  25. Nov 24, 2008
  26. Nov 20, 2008
    • Dan Gohman's avatar
      Experimental post-pass scheduling support. Post-pass scheduling · 60cb69e6
      Dan Gohman authored
      is currently off by default, and can be enabled with
      -disable-post-RA-scheduler=false.
      
      This doesn't have a significant impact on most code yet because it doesn't
      yet do anything to address anti-dependencies and it doesn't attempt to
      disambiguate memory references. Also, several popular targets
      don't have pipeline descriptions yet.
      
      The majority of the changes here are splitting the SelectionDAG-specific
      code out of ScheduleDAG, so that ScheduleDAG can be moved to
      libLLVMCodeGen.a. The interface between ScheduleDAG-using code and
      the rest of the scheduling code is somewhat rough and will evolve.
      
      llvm-svn: 59676
      60cb69e6
Loading