Skip to content
  1. Jan 08, 2011
    • Evan Cheng's avatar
      Do not model all INLINEASM instructions as having unmodelled side effects. · 6eb516db
      Evan Cheng authored
      Instead encode llvm IR level property "HasSideEffects" in an operand (shared
      with IsAlignStack). Added MachineInstrs::hasUnmodeledSideEffects() to check
      the operand when the instruction is an INLINEASM.
      
      This allows memory instructions to be moved around INLINEASM instructions.
      
      llvm-svn: 123044
      6eb516db
  2. Dec 15, 2010
  3. Nov 03, 2010
    • Evan Cheng's avatar
      Two sets of changes. Sorry they are intermingled. · debf9c50
      Evan Cheng authored
      1. Fix pre-ra scheduler so it doesn't try to push instructions above calls to
         "optimize for latency". Call instructions don't have the right latency and
         this is more likely to use introduce spills.
      2. Fix if-converter cost function. For ARM, it should use instruction latencies,
         not # of micro-ops since multi-latency instructions is completely executed
         even when the predicate is false. Also, some instruction will be "slower"
         when they are predicated due to the register def becoming implicit input.
         rdar://8598427
      
      llvm-svn: 118135
      debf9c50
  4. Oct 28, 2010
  5. Oct 26, 2010
  6. Oct 23, 2010
  7. Oct 09, 2010
  8. Oct 08, 2010
  9. Oct 06, 2010
    • Nick Lewycky's avatar
      Remove unused variables. · ec0da969
      Nick Lewycky authored
      llvm-svn: 115802
      ec0da969
    • Evan Cheng's avatar
      - Add TargetInstrInfo::getOperandLatency() to compute operand latencies. This · 49d4c0bd
      Evan Cheng authored
        allow target to correctly compute latency for cases where static scheduling
        itineraries isn't sufficient. e.g. variable_ops instructions such as
        ARM::ldm.
        This also allows target without scheduling itineraries to compute operand
        latencies. e.g. X86 can return (approximated) latencies for high latency
        instructions such as division.
      - Compute operand latencies for those defined by load multiple instructions,
        e.g. ldm and those used by store multiple instructions, e.g. stm.
      
      llvm-svn: 115755
      49d4c0bd
  10. Sep 30, 2010
  11. 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
  12. Jul 24, 2010
  13. Jul 15, 2010
  14. May 20, 2010
  15. May 01, 2010
  16. Apr 17, 2010
  17. Mar 22, 2010
  18. Mar 10, 2010
  19. Feb 16, 2010
  20. Nov 09, 2009
  21. Nov 05, 2009
  22. Nov 03, 2009
  23. Nov 02, 2009
  24. Oct 26, 2009
    • Dan Gohman's avatar
      When checking whether a def of an aliased register is dead, ask the · 9aba0d99
      Dan Gohman authored
      machineinstr whether the aliased register is dead, rather than the original
      register is dead. This allows it to get the correct answer when examining
      an instruction like this:
        CALLpcrel32 <ga:foo>, %AL<imp-def>, %EAX<imp-def,dead>
      where EAX is dead but a subregister of it is still live. This fixes PR5294.
      
      llvm-svn: 85135
      9aba0d99
  25. Oct 18, 2009
    • Evan Cheng's avatar
      Spill slots cannot alias. · f0236e01
      Evan Cheng authored
      llvm-svn: 84432
      f0236e01
    • Evan Cheng's avatar
      -Revert parts of 84326 and 84411. Distinquishing between fixed and non-fixed · 0e9d9ca8
      Evan Cheng authored
      stack slots and giving them different PseudoSourceValue's did not fix the
      problem of post-alloc scheduling miscompiling llvm itself.
      - Apply Dan's conservative workaround by assuming any non fixed stack slots can
      alias other memory locations. This means a load from spill slot #1 cannot 
      move above a store of spill slot #2. 
      - Enable post-alloc scheduling for x86 at optimization leverl Default and above.
      
      llvm-svn: 84424
      0e9d9ca8
  26. Oct 10, 2009
    • Dan Gohman's avatar
      Factor out LiveIntervalAnalysis' code to determine whether an instruction · 87b02d5b
      Dan Gohman authored
      is trivially rematerializable and integrate it into
      TargetInstrInfo::isTriviallyReMaterializable. This way, all places that
      need to know whether an instruction is rematerializable will get the
      same answer.
      
      This enables the useful parts of the aggressive-remat option by
      default -- using AliasAnalysis to determine whether a memory location
      is invariant, and removes the questionable parts -- rematting operations
      with virtual register inputs that may not be live everywhere.
      
      llvm-svn: 83687
      87b02d5b
  27. Oct 07, 2009
  28. 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
  29. Sep 18, 2009
  30. Aug 19, 2009
  31. Aug 13, 2009
  32. Aug 10, 2009
  33. Aug 07, 2009
  34. Jul 17, 2009
  35. Jul 14, 2009
  36. 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
    • Dan Gohman's avatar
      Factor out more code for computing register live-range informationfor · b9543435
      Dan Gohman authored
      scheduling, and generalize is so that preserves state across
      scheduling regions. This fixes incorrect live-range information around
      terminators and labels, which are effective region boundaries.
      
      In place of looking for terminators to anchor inter-block dependencies,
      introduce special entry and exit scheduling units for this purpose.
      
      llvm-svn: 64254
      b9543435
Loading