Skip to content
  1. May 08, 2012
    • Jakob Stoklund Olesen's avatar
      Add an MF argument to TRI::getPointerRegClass() and TII::getRegClass(). · 3c52f028
      Jakob Stoklund Olesen authored
      The getPointerRegClass() hook can return register classes that depend on
      the calling convention of the current function (ptr_rc_tailcall).
      
      So far, we have been able to infer the calling convention from the
      subtarget alone, but as we add support for multiple calling conventions
      per target, that no longer works.
      
      Patch by Yiannis Tsiouris!
      
      llvm-svn: 156328
      3c52f028
  2. May 05, 2012
  3. Apr 20, 2012
  4. Mar 31, 2012
  5. Mar 17, 2012
  6. Mar 16, 2012
  7. Mar 08, 2012
  8. Mar 07, 2012
    • Chandler Carruth's avatar
      Try to clarify this comment some. · 636ee38a
      Chandler Carruth authored
      llvm-svn: 152221
      636ee38a
    • Chandler Carruth's avatar
      Remove another outbreak of customized (and completely broken) hashing. · 962152ca
      Chandler Carruth authored
      This one is particularly annoying because the hashing algorithm is
      highly specialized, with a strange "equivalence" definition that subsets
      the fields involved.
      
      Still, this looks at the exact same set of data as the old code, but
      without bitwise or-ing over parts of it and other mixing badness. No
      functionality changed here. I've left a substantial fixme about the fact
      that there is a cleaner and more principled way to do this, but it
      requires making the equality definition actual stable for particular
      types...
      
      llvm-svn: 152218
      962152ca
  9. Mar 04, 2012
  10. Mar 01, 2012
  11. Feb 17, 2012
  12. Feb 16, 2012
  13. Feb 15, 2012
    • Jakob Stoklund Olesen's avatar
      Handle regmasks in findRegisterDefOperandIdx(). · e7d3f441
      Jakob Stoklund Olesen authored
      Only accept register masks when looking for an 'overlapping' def. When
      Overlap is not set, the function searches for a proper definition of
      Reg.
      
      This means MI->modifiesRegister() considers register masks, but
      MI->definesRegister() doesn't.
      
      llvm-svn: 150529
      e7d3f441
  14. Feb 10, 2012
  15. Feb 08, 2012
  16. Feb 03, 2012
  17. Jan 26, 2012
  18. Jan 16, 2012
    • Jakob Stoklund Olesen's avatar
      Add a new kind of MachineOperand: MO_RegisterMask. · 374ed322
      Jakob Stoklund Olesen authored
      Register masks will be used as a compact representation of large clobber
      lists.  Currently, an x86 call instruction has some 40 operands
      representing call-clobbered registers.  That's more than 1kB of useless
      operands per call site.
      
      A register mask operand references a bit mask of call-preserved
      registers, everything else is clobbered.  The bit mask will typically
      come from TargetRegisterInfo::getCallPreservedMask().
      
      By abandoning ImplicitDefs for call-clobbered registers, it also becomes
      possible to share call instruction descriptions between calling
      conventions, and we can get rid of the WINCALL* instructions.
      
      This patch introduces the new operand kind.  Future patches will add
      RegMask support to target-independent passes before finally the fixed
      clobber lists can be removed from call instruction descriptions.
      
      llvm-svn: 148250
      374ed322
  19. Jan 10, 2012
  20. 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
  21. Dec 08, 2011
  22. 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
    • Jakob Stoklund Olesen's avatar
      Add missing check. · 6ad68485
      Jakob Stoklund Olesen authored
      llvm-svn: 146004
      6ad68485
    • Jakob Stoklund Olesen's avatar
      Add MachineOperand IsInternalRead flag. · b0d91abe
      Jakob Stoklund Olesen authored
      This flag is used when bundling machine instructions.  It indicates
      whether the operand reads a value defined inside or outside its bundle.
      
      llvm-svn: 145997
      b0d91abe
  23. Dec 06, 2011
    • Evan Cheng's avatar
      First chunk of MachineInstr bundle support. · 2a81dd4a
      Evan Cheng authored
      1. Added opcode BUNDLE
      2. Taught MachineInstr class to deal with bundled MIs
      3. Changed MachineBasicBlock iterator to skip over bundled MIs; added an iterator to walk all the MIs
      4. Taught MachineBasicBlock methods about bundled MIs
      
      llvm-svn: 145975
      2a81dd4a
  24. Nov 08, 2011
  25. Nov 03, 2011
  26. Oct 13, 2011
  27. Sep 29, 2011
    • Jakob Stoklund Olesen's avatar
      Remove NumImplicitOps which is now unused. · 463b05a2
      Jakob Stoklund Olesen authored
      llvm-svn: 140767
      463b05a2
    • Jakob Stoklund Olesen's avatar
      Rewrite MachineInstr::addOperand() to avoid NumImplicitOps. · 2318d1e0
      Jakob Stoklund Olesen authored
      The function needs to scan the implicit operands anyway, so no
      performance is won by caching the number of implicit operands added to
      an instruction.
      
      This also fixes a bug when adding operands after an implicit operand has
      been added manually.  The NumImplicitOps count wasn't kept up to date.
      
      MachineInstr::addOperand() will now consistently place all explicit
      operands before all the implicit operands, regardless of the order they
      are added.  It is possible to change an MI opcode and add additional
      explicit operands.  They will be inserted before any existing implicit
      operands.
      
      The only exception is inline asm instructions where operands are never
      reordered.  This is because of a hack that marks explicit clobber regs
      on inline asm as <implicit-def> to please the fast register allocator.
      This hack can go away when InstrEmitter and FastIsel can add exact
      <dead> flags to physreg defs.
      
      llvm-svn: 140744
      2318d1e0
  28. Aug 30, 2011
Loading