Skip to content
  1. Jul 09, 2010
    • Jakob Stoklund Olesen's avatar
      Change TII::foldMemoryOperand API to require the machine instruction to be · bd953d18
      Jakob Stoklund Olesen authored
      inserted in a MBB, and return an already inserted MI.
      
      This target API change is necessary to allow foldMemoryOperand to call
      storeToStackSlot and loadFromStackSlot when folding a COPY to a stack slot
      reference in a target independent way.
      
      The foldMemoryOperandImpl hook is going to change in the same way, but I'll wait
      until COPY folding is actually implemented. Most targets only fold copies and
      won't need to specialize this hook at all.
      
      llvm-svn: 107991
      bd953d18
  2. Jul 08, 2010
  3. Jun 22, 2010
  4. Jun 19, 2010
    • Evan Cheng's avatar
      Allow ARM if-converter to be run after post allocation scheduling. · 2d51c7c5
      Evan Cheng authored
      - This fixed a number of bugs in if-converter, tail merging, and post-allocation
        scheduler. If-converter now runs branch folding / tail merging first to
        maximize if-conversion opportunities.
      - Also changed the t2IT instruction slightly. It now defines the ITSTATE
        register which is read by instructions in the IT block.
      - Added Thumb2 specific hazard recognizer to ensure the scheduler doesn't
        change the instruction ordering in the IT block (since IT mask has been
        finalized). It also ensures no other instructions can be scheduled between
        instructions in the IT block.
      
      This is not yet enabled.
      
      llvm-svn: 106344
      2d51c7c5
  5. Jun 14, 2010
  6. Jun 12, 2010
  7. Jun 03, 2010
    • Jakob Stoklund Olesen's avatar
      Slightly change the meaning of the reMaterialize target hook when the original · a8ad9774
      Jakob Stoklund Olesen authored
      instruction defines subregisters.
      
      Any existing subreg indices on the original instruction are preserved or
      composed with the new subreg index.
      
      Also substitute multiple operands mentioning the original register by using the
      new MachineInstr::substituteRegister() function. This is necessary because there
      will soon be <imp-def> operands added to non read-modify-write partial
      definitions. This instruction:
      
        %reg1234:foo = FLAP %reg1234<imp-def>
      
      will reMaterialize(%reg3333, bar) like this:
      
        %reg3333:bar-foo = FLAP %reg333:bar<imp-def>
      
      Finally, replace the TargetRegisterInfo pointer argument with a reference to
      indicate that it cannot be NULL.
      
      llvm-svn: 105358
      a8ad9774
  8. Apr 08, 2010
  9. Mar 03, 2010
    • Evan Cheng's avatar
      - Change MachineInstr::isIdenticalTo to take a new option that determines... · e9c46c25
      Evan Cheng authored
      - Change MachineInstr::isIdenticalTo to take a new option that determines whether it should skip checking defs or at least virtual register defs. This subsumes part of the TargetInstrInfo::isIdentical functionality.
      - Eliminate TargetInstrInfo::isIdentical and replace it with produceSameValue. In the default case, produceSameValue just checks whether two machine instructions are identical (except for virtual register defs). But targets may override it to check for unusual cases (e.g. ARM pic loads from constant pools).
      
      llvm-svn: 97628
      e9c46c25
  10. Jan 07, 2010
  11. Dec 03, 2009
  12. Nov 16, 2009
  13. Nov 14, 2009
  14. Nov 07, 2009
    • Evan Cheng's avatar
      - Add TargetInstrInfo::isIdentical(). It's similar to MachineInstr::isIdentical · 7ff83196
      Evan Cheng authored
        except it doesn't care if the definitions' virtual registers differ. This is
        used by machine LICM and other MI passes to perform CSE.
      - Teach Thumb2InstrInfo::isIdentical() to check two t2LDRpci_pic are identical.
        Since pc relative constantpool entries are always different, this requires it
        it check if the values can actually the same.
      
      llvm-svn: 86328
      7ff83196
  15. Oct 18, 2009
  16. Oct 17, 2009
  17. Oct 12, 2009
  18. 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
  19. 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
  20. Sep 21, 2009
  21. Jul 22, 2009
    • Evan Cheng's avatar
      Let each target determines whether a machine instruction is dead. If true,... · 4dc848f3
      Evan Cheng authored
      Let each target determines whether a machine instruction is dead. If true, that allows late codeine passes to delete it.
      
      This is considered a workaround. The problem is some targets are not modeling side effects correctly. PPC is apparently one of those. This patch allows ppc llvm-gcc to bootstrap on Darwin. Once we find out which instruction definitions are wrong, we can remove the PPCInstrInfo workaround.
      
      llvm-svn: 76703
      4dc848f3
  22. Jul 16, 2009
  23. Jul 11, 2009
  24. Jul 10, 2009
  25. Jul 01, 2009
  26. May 13, 2009
    • Bill Wendling's avatar
      Change MachineInstrBuilder::addReg() to take a flag instead of a list of · f7b83c7a
      Bill Wendling authored
      booleans. This gives a better indication of what the "addReg()" is
      doing. Remembering what all of those booleans mean isn't easy, especially if you
      aren't spending all of your time in that code.
      
      I took Jakob's suggestion and made it illegal to pass in "true" for the
      flag. This should hopefully prevent any unintended misuse of this (by reverting
      to the old way of using addReg()).
      
      llvm-svn: 71722
      f7b83c7a
  27. Feb 03, 2009
  28. Dec 03, 2008
  29. Oct 03, 2008
  30. Sep 13, 2008
    • Dan Gohman's avatar
      Remove isImm(), isReg(), and friends, in favor of · 38453eeb
      Dan Gohman authored
      isImmediate(), isRegister(), and friends, to avoid confusion
      about having two different names with the same meaning. I'm
      not attached to the longer names, and would be ok with
      changing to the shorter names if others prefer it.
      
      llvm-svn: 56189
      38453eeb
  31. Sep 11, 2008
  32. Aug 15, 2008
  33. Jul 08, 2008
    • Dan Gohman's avatar
      Pool-allocation for MachineInstrs, MachineBasicBlocks, and · 3b460303
      Dan Gohman authored
      MachineMemOperands. The pools are owned by MachineFunctions.
      
      This drastically reduces the number of calls to malloc/free made
      during the "Emit" phase of scheduling, as well as later phases
      in CodeGen. Combined with other changes, this speeds up the
      "instruction selection" phase of CodeGen by 10% in some cases.
      
      llvm-svn: 53212
      3b460303
  34. Jun 16, 2008
  35. Apr 16, 2008
  36. Mar 31, 2008
  37. Feb 15, 2008
  38. Feb 13, 2008
Loading