Skip to content
  1. Jul 12, 2013
    • Benjamin Kramer's avatar
      X86: Shrink certain forms of movsx. · 068a2253
      Benjamin Kramer authored
      In particular:
      movsbw %al, %ax   --> cbtw
      movswl %ax, %eax  --> cwtl
      movslq %eax, %rax --> cltq
      
      According to Intel's manual those have the same performance characteristics but
      come with a smaller encoding.
      
      llvm-svn: 186174
      068a2253
  2. Jun 16, 2013
  3. Jun 10, 2013
    • Tim Northover's avatar
      X86: Stop LEA64_32r doing unspeakable things to its arguments. · 6833e3fd
      Tim Northover authored
      Previously LEA64_32r went through virtually the entire backend thinking it was
      using 32-bit registers until its blissful illusions were cruelly snatched away
      by MCInstLower and 64-bit equivalents were substituted at the last minute.
      
      This patch makes it behave normally, and take 64-bit registers as sources all
      the way through. Previous uses (for 32-bit arithmetic) are accommodated via
      SUBREG_TO_REG instructions which make the types and classes agree properly.
      
      llvm-svn: 183693
      6833e3fd
  4. Jun 01, 2013
  5. May 31, 2013
    • Tim Northover's avatar
      X86: change MOV64ri64i32 into MOV32ri64 · d4736d67
      Tim Northover authored
      The MOV64ri64i32 instruction required hacky MCInst lowering because it was
      allocated as setting a GR64, but the eventual instruction ("movl") only set a
      GR32. This converts it into a so-called "MOV32ri64" which still accepts a
      (appropriate) 64-bit immediate but defines a GR32. This is then converted to
      the full GR64 by a SUBREG_TO_REG operation, thus keeping everyone happy.
      
      llvm-svn: 182991
      d4736d67
  6. May 30, 2013
    • Tim Northover's avatar
      X86: use sub-register sequences for MOV*r0 operations · 64ec0ff4
      Tim Northover authored
      Instead of having a bunch of separate MOV8r0, MOV16r0, ... pseudo-instructions,
      it's better to use a single MOV32r0 (which will expand to "xorl %reg, %reg")
      and obtain other sizes with EXTRACT_SUBREG and SUBREG_TO_REG. The encoding is
      smaller and partial register updates can sometimes be avoided.
      
      Until recently, this sequence was a barrier to rematerialization though. That
      should now be fixed so it's an appropriate time to make the change.
      
      llvm-svn: 182928
      64ec0ff4
    • Tim Northover's avatar
      X86: change zext moves to use sub-register infrastructure. · 04eb4234
      Tim Northover authored
      32-bit writes on amd64 zero out the high bits of the corresponding 64-bit
      register. LLVM makes use of this for zero-extension, but until now relied on
      custom MCLowering and other code to fixup instructions. Now we have proper
      handling of sub-registers, this can be done by creating SUBREG_TO_REG
      instructions at selection-time.
      
      Should be no change in functionality.
      
      llvm-svn: 182921
      04eb4234
  7. Mar 16, 2013
  8. Mar 14, 2013
    • Craig Topper's avatar
      Teach X86 MC instruction lowering that VMOVAPSrr and other VEX-encoded... · a66d81d5
      Craig Topper authored
      Teach X86 MC instruction lowering that VMOVAPSrr and other VEX-encoded register to register moves should be switched from using the MRMSrcReg form to the MRMDestReg form if the source register is a 64-bit extended register and the destination register is not. This allows the instruction to be encoded using the 2-byte VEX form instead of the 3-byte VEX form. The GNU assembler has similar behavior.
      
      llvm-svn: 177011
      a66d81d5
  9. Feb 01, 2013
    • David Sehr's avatar
      Two changes relevant to LEA and x32: · 8114a7a6
      David Sehr authored
      1) allows the use of RIP-relative addressing in 32-bit LEA instructions under
         x86-64 (ILP32 and LP64)
      2) separates the size of address registers in 64-bit LEA instructions from
         control by ILP32/LP64.
      
      llvm-svn: 174208
      8114a7a6
  10. Jan 02, 2013
    • Chandler Carruth's avatar
      Move all of the header files which are involved in modelling the LLVM IR · 9fb823bb
      Chandler Carruth authored
      into their new header subdirectory: include/llvm/IR. This matches the
      directory structure of lib, and begins to correct a long standing point
      of file layout clutter in LLVM.
      
      There are still more header files to move here, but I wanted to handle
      them in separate commits to make tracking what files make sense at each
      layer easier.
      
      The only really questionable files here are the target intrinsic
      tablegen files. But that's a battle I'd rather not fight today.
      
      I've updated both CMake and Makefile build systems (I think, and my
      tests think, but I may have missed something).
      
      I've also re-sorted the includes throughout the project. I'll be
      committing updates to Clang, DragonEgg, and Polly momentarily.
      
      llvm-svn: 171366
      9fb823bb
  11. Dec 03, 2012
    • Chandler Carruth's avatar
      Use the new script to sort the includes of every file under lib. · ed0881b2
      Chandler Carruth authored
      Sooooo many of these had incorrect or strange main module includes.
      I have manually inspected all of these, and fixed the main module
      include to be the nearest plausible thing I could find. If you own or
      care about any of these source files, I encourage you to take some time
      and check that these edits were sensible. I can't have broken anything
      (I strictly added headers, and reordered them, never removed), but they
      may not be the headers you'd really like to identify as containing the
      API being implemented.
      
      Many forward declarations and missing includes were added to a header
      files to allow them to parse cleanly when included first. The main
      module rule does in fact have its merits. =]
      
      llvm-svn: 169131
      ed0881b2
  12. Nov 26, 2012
  13. Oct 17, 2012
  14. Oct 16, 2012
  15. Oct 05, 2012
  16. Aug 28, 2012
  17. Aug 01, 2012
  18. Jun 07, 2012
  19. Jun 01, 2012
    • Hans Wennborg's avatar
      Implement the local-dynamic TLS model for x86 (PR3985) · 789acfb6
      Hans Wennborg authored
      This implements codegen support for accesses to thread-local variables
      using the local-dynamic model, and adds a clean-up pass so that the base
      address for the TLS block can be re-used between local-dynamic access on
      an execution path.
      
      llvm-svn: 157818
      789acfb6
  20. May 18, 2012
    • Jim Grosbach's avatar
      Refactor data-in-code annotations. · 4b63d2ae
      Jim Grosbach authored
      Use a dedicated MachO load command to annotate data-in-code regions.
      This is the same format the linker produces for final executable images,
      allowing consistency of representation and use of introspection tools
      for both object and executable files.
      
      Data-in-code regions are annotated via ".data_region"/".end_data_region"
      directive pairs, with an optional region type.
      
      data_region_directive := ".data_region" { region_type }
      region_type := "jt8" | "jt16" | "jt32" | "jta32"
      end_data_region_directive := ".end_data_region"
      
      The previous handling of ARM-style "$d.*" labels was broken and has
      been removed. Specifically, it didn't handle ARM vs. Thumb mode when
      marking the end of the section.
      
      rdar://11459456
      
      llvm-svn: 157062
      4b63d2ae
  21. May 11, 2012
  22. Mar 17, 2012
  23. Feb 16, 2012
  24. Feb 11, 2012
  25. Feb 05, 2012
  26. Jan 19, 2012
  27. Jan 13, 2012
  28. Nov 29, 2011
  29. Nov 19, 2011
  30. Oct 26, 2011
    • Rafael Espindola's avatar
      This commit introduces two fake instructions MORESTACK_RET and · 66393c12
      Rafael Espindola authored
      MORESTACK_RET_RESTORE_R10; which are lowered to a RET and a RET
      followed by a MOV respectively.  Having a fake instruction prevents
      the verifier from seeing a MachineBasicBlock end with a
      non-terminator (MOV).  It also prevents the rather eccentric case of a
      MachineBasicBlock ending with RET but having successors nevertheless.
      
      Patch by Sanjoy Das.
      
      llvm-svn: 143062
      66393c12
  31. Oct 05, 2011
  32. Sep 29, 2011
  33. Sep 07, 2011
  34. Jul 26, 2011
Loading