Skip to content
  1. Apr 13, 2009
    • Dan Gohman's avatar
      Implement x86 h-register extract support. · 57d6bd36
      Dan Gohman authored
       - Add patterns for h-register extract, which avoids a shift and mask,
         and in some cases a temporary register.
       - Add address-mode matching for turning (X>>(8-n))&(255<<n), where
         n is a valid address-mode scale value, into an h-register extract
         and a scaled-offset address.
       - Replace X86's MOV32to32_ and related instructions with the new
         target-independent COPY_TO_SUBREG instruction.
      
      On x86-64 there are complicated constraints on h registers, and
      CodeGen doesn't currently provide a high-level way to express all of them,
      so they are handled with a bunch of special code. This code currently only
      supports extracts where the result is used by a zero-extend or a store,
      though these are fairly common.
      
      These transformations are not always beneficial; since there are only
      4 h registers, they sometimes require extra move instructions, and
      this sometimes increases register pressure because it can force out
      values that would otherwise be in one of those registers. However,
      this appears to be relatively uncommon.
      
      llvm-svn: 68962
      57d6bd36
    • Dan Gohman's avatar
      Remove x86's special-case handling for ISD::TRUNCATE and · f20462c2
      Dan Gohman authored
      ISD::SIGN_EXTEND_INREG. Tablegen-generated code can handle
      these cases, and the scheduling issues observed earlier
      appear to be resolved now.
      
      llvm-svn: 68959
      f20462c2
    • Dan Gohman's avatar
      Use X86::SUBREG_8BIT instead of hard-coding the equivalent constant. · 092b8b6f
      Dan Gohman authored
      llvm-svn: 68951
      092b8b6f
    • Rafael Espindola's avatar
      X86-64 TLS support for local exec and initial exec. · 6d6c6043
      Rafael Espindola authored
      llvm-svn: 68947
      6d6c6043
    • Rafael Espindola's avatar
      In X86DAGToDAGISel::MatchWrapper, if base or index are set, avoid matching · 7186f20a
      Rafael Espindola authored
      only if symbolic addresses are RIP relatives.
      
      llvm-svn: 68924
      7186f20a
  2. Apr 12, 2009
  3. Apr 10, 2009
  4. Apr 08, 2009
    • Rafael Espindola's avatar
      Re-apply 68552. · 3b2df10c
      Rafael Espindola authored
      Tested by bootstrapping llvm-gcc and using that to build llvm.
      
      llvm-svn: 68645
      3b2df10c
    • Bill Wendling's avatar
      Temporarily revert r68552. This was causing a failure in the self-hosting LLVM · 4aa25b79
      Bill Wendling authored
      builds.
      
      --- Reverse-merging (from foreign repository) r68552 into '.':
      U    test/CodeGen/X86/tls8.ll
      U    test/CodeGen/X86/tls10.ll
      U    test/CodeGen/X86/tls2.ll
      U    test/CodeGen/X86/tls6.ll
      U    lib/Target/X86/X86Instr64bit.td
      U    lib/Target/X86/X86InstrSSE.td
      U    lib/Target/X86/X86InstrInfo.td
      U    lib/Target/X86/X86RegisterInfo.cpp
      U    lib/Target/X86/X86ISelLowering.cpp
      U    lib/Target/X86/X86CodeEmitter.cpp
      U    lib/Target/X86/X86FastISel.cpp
      U    lib/Target/X86/X86InstrInfo.h
      U    lib/Target/X86/X86ISelDAGToDAG.cpp
      U    lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp
      U    lib/Target/X86/AsmPrinter/X86IntelAsmPrinter.cpp
      U    lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.h
      U    lib/Target/X86/AsmPrinter/X86IntelAsmPrinter.h
      U    lib/Target/X86/X86ISelLowering.h
      U    lib/Target/X86/X86InstrInfo.cpp
      U    lib/Target/X86/X86InstrBuilder.h
      U    lib/Target/X86/X86RegisterInfo.td
      
      llvm-svn: 68560
      4aa25b79
  5. Apr 07, 2009
  6. Mar 31, 2009
  7. Mar 30, 2009
  8. Mar 28, 2009
  9. Mar 27, 2009
  10. Mar 14, 2009
    • Dan Gohman's avatar
      Don't forego folding of loads into 64-bit adds when the other · 2293eb60
      Dan Gohman authored
      operand is a signed 32-bit immediate. Unlike with the 8-bit
      signed immediate case, it isn't actually smaller to fold a
      32-bit signed immediate instead of a load. In fact, it's
      larger in the case of 32-bit unsigned immediates, because
      they can be materialized with movl instead of movq.
      
      llvm-svn: 67001
      2293eb60
  11. Mar 13, 2009
    • Dan Gohman's avatar
      Enhance address-mode folding of ISD::ADD to handle cases where the · a1d92423
      Dan Gohman authored
      operands can't both be fully folded at the same time. For example,
      in the included testcase, a global variable is being added with
      an add of two values. The global variable wants RIP-relative
      addressing, so it can't share the address with another base
      register, but it's still possible to fold the initial add.
      
      llvm-svn: 66865
      a1d92423
  12. Feb 13, 2009
  13. Feb 12, 2009
  14. Feb 07, 2009
  15. Feb 06, 2009
  16. Feb 04, 2009
  17. Feb 03, 2009
  18. Jan 27, 2009
  19. Jan 26, 2009
  20. Jan 21, 2009
  21. Jan 19, 2009
  22. Jan 17, 2009
  23. Jan 15, 2009
    • Dan Gohman's avatar
      Move a few containers out of ScheduleDAGInstrs::BuildSchedGraph · 619ef48a
      Dan Gohman authored
      and into the ScheduleDAGInstrs class, so that they don't get
      destructed and re-constructed for each block. This fixes a
      compile-time hot spot in the post-pass scheduler.
      
      To help facilitate this, tidy and do some minor reorganization
      in the scheduler constructor functions.
      
      llvm-svn: 62275
      619ef48a
  24. Jan 10, 2009
  25. Dec 10, 2008
  26. Nov 27, 2008
  27. Nov 12, 2008
  28. Nov 11, 2008
    • Dan Gohman's avatar
      The 32-bit displacement field in an x86 address is signed. Arrange for it · 059c4fa8
      Dan Gohman authored
      to be sign-extended when it is promoted to 64 bits for intermediate
      offset calculations. The offset calculations are done as uint64_t so that
      overflow conditions are well defined.
      
      This fixes a problem which is currently hidden by the x86 AsmPrinter but
      which was exposed by r58917 (which is temporarily reverted).  See PR3027
      for details.
      
      llvm-svn: 59044
      059c4fa8
  29. Nov 05, 2008
    • Dan Gohman's avatar
      Eliminate the ISel priority queue, which used the topological order for a · f14b77eb
      Dan Gohman authored
      priority function. Instead, just iterate over the AllNodes list, which is
      already in topological order. This eliminates a fair amount of bookkeeping,
      and speeds up the isel phase by about 15% on many testcases.
      
      The impact on most targets is that AddToISelQueue calls can be simply removed.
      
      In the x86 target, there are two additional notable changes.
      
      The rule-bending AND+SHIFT optimization in MatchAddress that creates new
      pre-isel nodes during isel is now a little more verbose, but more robust.
      Instead of either creating an invalid DAG or creating an invalid topological
      sort, as it has historically done, it can now just insert the new nodes into
      the node list at a position where they will be consistent with the topological
      ordering.
      
      Also, the address-matching code has logic that checked to see if a node was
      "already selected". However, when a node is selected, it has all its uses
      taken away via ReplaceAllUsesWith or equivalent, so it won't recieve any
      further visits from MatchAddress. This code is now removed.
      
      llvm-svn: 58748
      f14b77eb
  30. Nov 04, 2008
  31. Oct 27, 2008
    • David Greene's avatar
      · ce2a9381
      David Greene authored
      Have TableGen emit setSubgraphColor calls under control of a -gen-debug
      flag.  Then in a debugger developers can set breakpoints at these calls
      to see waht is about to be selected and what the resulting subgraph
      looks like.  This really helps when debugging instruction selection.
      
      llvm-svn: 58278
      ce2a9381
  32. Oct 18, 2008
    • Dan Gohman's avatar
      Teach DAGCombine to fold constant offsets into GlobalAddress nodes, · 2fe6bee5
      Dan Gohman authored
      and add a TargetLowering hook for it to use to determine when this
      is legal (i.e. not in PIC mode, etc.)
      
      This allows instruction selection to emit folded constant offsets
      in more cases, such as the included testcase, eliminating the need
      for explicit arithmetic instructions.
      
      This eliminates the need for the C++ code in X86ISelDAGToDAG.cpp
      that attempted to achieve the same effect, but wasn't as effective.
      
      Also, fix handling of offsets in GlobalAddressSDNodes in several
      places, including changing GlobalAddressSDNode's offset from
      int to int64_t.
      
      The Mips, Alpha, Sparc, and CellSPU targets appear to be
      unaware of GlobalAddress offsets currently, so set the hook to
      false on those targets.
      
      llvm-svn: 57748
      2fe6bee5
Loading