Skip to content
  1. Feb 15, 2012
  2. Feb 14, 2012
  3. Feb 13, 2012
  4. Feb 10, 2012
    • Andrew Trick's avatar
      RegAlloc superpass: includes phi elimination, coalescing, and scheduling. · d3f8fe81
      Andrew Trick authored
      Creates a configurable regalloc pipeline.
      
      Ensure specific llc options do what they say and nothing more: -reglloc=... has no effect other than selecting the allocator pass itself. This patch introduces a new umbrella flag, "-optimize-regalloc", to enable/disable the optimizing regalloc "superpass". This allows for example testing coalscing and scheduling under -O0 or vice-versa.
      
      When a CodeGen pass requires the MachineFunction to have a particular property, we need to explicitly define that property so it can be directly queried rather than naming a specific Pass. For example, to check for SSA, use MRI->isSSA, not addRequired<PHIElimination>.
      
      CodeGen transformation passes are never "required" as an analysis
      
      ProcessImplicitDefs does not require LiveVariables.
      
      We have a plan to massively simplify some of the early passes within the regalloc superpass.
      
      llvm-svn: 150226
      d3f8fe81
    • Lang Hames's avatar
      Remove unused 'isAlias' parameter. · 351fc56a
      Lang Hames authored
      llvm-svn: 150224
      351fc56a
    • Jakob Stoklund Olesen's avatar
      Constrain the regmask search space for local live ranges. · 9ef50bd6
      Jakob Stoklund Olesen authored
      When checking a local live range for interference, restrict the binary
      search to the single block.
      
      llvm-svn: 150220
      9ef50bd6
    • Jakob Stoklund Olesen's avatar
      Cache basic block boundaries for faster RegMaskSlots access. · 25c4195e
      Jakob Stoklund Olesen authored
      Provide API to get a list of register mask slots and bits in a basic
      block.
      
      llvm-svn: 150219
      25c4195e
    • Jakob Stoklund Olesen's avatar
      Optimize LiveIntervals::intervalIsInOneMBB(). · aa06de24
      Jakob Stoklund Olesen authored
      No looping and binary searches necessary.
      
      Return a pointer to the containing block instead of just a bool.
      
      llvm-svn: 150218
      aa06de24
  5. Feb 09, 2012
  6. Feb 08, 2012
  7. Feb 04, 2012
    • Jakob Stoklund Olesen's avatar
      Drop the REDEF_BY_EC VNInfo flag. · abb26bae
      Jakob Stoklund Olesen authored
      A live range that has an early clobber tied redef now looks like a
      normal tied redef, except the early clobber def uses the early clobber
      slot.
      
      This is enough to handle any strange interference problems.
      
      llvm-svn: 149769
      abb26bae
    • Jakob Stoklund Olesen's avatar
      Correctly terminate a physreg redefined by an early clobber. · e3865781
      Jakob Stoklund Olesen authored
      I don't have a test that fails because of this, but a test case like
      CodeGen/X86/2009-12-01-EarlyClobberBug.ll exposes the problem.  EAX is
      redefined by a tied early clobber operand on inline asm, and the live
      range should look like this:
      
        %EAX,inf = [48r,64e:0)[64e,80r:1)  0@48r 1@64e
      
      Previously, the two values got merged:
      
        %EAX,inf = [48r,80r:0)  0@48r
      
      With this bug fixed, the REDEF_BY_EC VNInfo flag is no longer needed.
      
      llvm-svn: 149768
      e3865781
    • Jakob Stoklund Olesen's avatar
      Don't store COPY pointers in VNInfo. · ad6b22eb
      Jakob Stoklund Olesen authored
      If a value is defined by a COPY, that instuction can easily and cheaply
      be found by getInstructionFromIndex(VNI->def).
      
      This reduces the size of VNInfo from 24 to 16 bytes, and improves
      llc compile time by 3%.
      
      llvm-svn: 149763
      ad6b22eb
    • Jakob Stoklund Olesen's avatar
      Trim headers. · 22e490d9
      Jakob Stoklund Olesen authored
      llvm-svn: 149722
      22e490d9
  8. Feb 03, 2012
  9. Jan 30, 2012
  10. Jan 28, 2012
  11. Jan 27, 2012
  12. Jan 25, 2012
  13. Jan 18, 2012
  14. Jan 11, 2012
  15. Jan 07, 2012
  16. Jan 03, 2012
  17. 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
  18. Nov 14, 2011
  19. Nov 13, 2011
    • Jakob Stoklund Olesen's avatar
      Terminate all dead defs at the dead slot instead of the 'next' slot. · d8f2405e
      Jakob Stoklund Olesen authored
      This makes no difference for normal defs, but early clobber dead defs
      now look like:
      
        [Slot_EarlyClobber; Slot_Dead)
      
      instead of:
      
        [Slot_EarlyClobber; Slot_Register).
      
      Live ranges for normal dead defs look like:
      
        [Slot_Register; Slot_Dead)
      
      as before.
      
      llvm-svn: 144512
      d8f2405e
    • Jakob Stoklund Olesen's avatar
      Simplify early clobber slots a bit. · ce7cc08f
      Jakob Stoklund Olesen authored
      llvm-svn: 144507
      ce7cc08f
    • Jakob Stoklund Olesen's avatar
      Rename SlotIndexes to match how they are used. · 90b5e565
      Jakob Stoklund Olesen authored
      The old naming scheme (load/use/def/store) can be traced back to an old
      linear scan article, but the names don't match how slots are actually
      used.
      
      The load and store slots are not needed after the deferred spill code
      insertion framework was deleted.
      
      The use and def slots don't make any sense because we are using
      half-open intervals as is customary in C code, but the names suggest
      closed intervals.  In reality, these slots were used to distinguish
      early-clobber defs from normal defs.
      
      The new naming scheme also has 4 slots, but the names match how the
      slots are really used.  This is a purely mechanical renaming, but some
      of the code makes a lot more sense now.
      
      llvm-svn: 144503
      90b5e565
    • Jakob Stoklund Olesen's avatar
      Delete the old spilling framework from LiveIntervalAnalysis. · f61a6fe2
      Jakob Stoklund Olesen authored
      This is dead code, all register allocators use InlineSpiller.
      
      llvm-svn: 144478
      f61a6fe2
  20. Oct 05, 2011
    • Jakob Stoklund Olesen's avatar
      Add a FIXME. · ccdfbfb5
      Jakob Stoklund Olesen authored
      TwoAddressInstructionPass should annotate instructions with <undef>
      flags when it lower REG_SEQUENCE instructions.  LiveIntervals should not
      be in the business of modifying code (except for kill flags, perhaps).
      
      llvm-svn: 141187
      ccdfbfb5
  21. Oct 04, 2011
    • Jakob Stoklund Olesen's avatar
      Allow <undef> flags on def operands as well as uses. · 10f2de32
      Jakob Stoklund Olesen authored
      The <undef> flag says that a MachineOperand doesn't read its register,
      or doesn't depend on the previous value of its register.
      
      A full register def never depends on the previous register value.  A
      partial register def may depend on the previous value if it is intended
      to update part of a register.
      
      For example:
      
        %vreg10:dsub_0<def,undef> = COPY %vreg1
        %vreg10:dsub_1<def> = COPY %vreg2
      
      The first copy instruction defines the full %vreg10 register with the
      bits not covered by dsub_0 defined as <undef>.  It is not considered a
      read of %vreg10.
      
      The second copy modifies part of %vreg10 while preserving the rest.  It
      has an implicit read of %vreg10.
      
      This patch adds a MachineOperand::readsReg() method to determine if an
      operand reads its register.
      
      Previously, this was modelled by adding a full-register <imp-def>
      operand to the instruction.  This approach makes it possible to
      determine directly from a MachineOperand if it reads its register.  No
      scanning of MI operands is required.
      
      llvm-svn: 141124
      10f2de32
  22. Sep 15, 2011
    • Jakob Stoklund Olesen's avatar
      Speed up LiveIntervals::shrinkToUse with some caching. · b8b1d4c4
      Jakob Stoklund Olesen authored
      Blocks with multiple PHI successors only need to go on the worklist
      once.  Use a SmallPtrSet to track the live-out blocks that have already
      been handled.  This is a lot faster than the two live range check we
      would otherwise do.
      
      Also stop recomputing hasPHIKill flags.  Like RenumberValues(), it is
      conservatively correct to leave them in, and they are not used for
      anything important.
      
      llvm-svn: 139792
      b8b1d4c4
  23. Sep 13, 2011
  24. Apr 30, 2011
  25. Apr 15, 2011
Loading