Skip to content
  1. May 12, 2012
    • Akira Hatanaka's avatar
      Insert instructions to the entry basic block which initializes the global · d918f77b
      Akira Hatanaka authored
      pointer register. 
      
      
      This is the first of the series of patches which clean up the way global pointer
      register is used. The patches will make the following improvements:
      
      - Make $gp an allocatable temporary register rather than reserving it.
      - Use a virtual register as the global pointer register and let the register
        allocator decide which register to assign to it or whether spill/reloads are
        needed.
      - Make sure $gp is valid at the entry of a called function, which is necessary
        for functions using lazy binding.
      - Remove the need for emitting .cprestore and .cpload directives.
      
      llvm-svn: 156671
      d918f77b
    • Akira Hatanaka's avatar
      Do not replace operands of pseudo instructions with register $zero. · 0661b81b
      Akira Hatanaka authored
      llvm-svn: 156663
      0661b81b
  2. Apr 20, 2012
  3. Mar 27, 2012
  4. Mar 08, 2012
  5. Mar 01, 2012
  6. Feb 28, 2012
  7. Feb 24, 2012
    • Akira Hatanaka's avatar
      Add an option to use a virtual register as the global base register instead of · b049aef2
      Akira Hatanaka authored
      reserving a physical register ($gp or $28) for that purpose.
      
      This will completely eliminate loads that restore the value of $gp after every
      function call, if the register allocator assigns a callee-saved register, or
      eliminate unnecessary loads if it assigns a temporary register. 
      
      example:
      
      .cpload $25       // set $gp.
      ...
      .cprestore 16     // store $gp to stack slot 16($sp).
      ...
      jalr $25          // function call. clobbers $gp.
      lw $gp, 16($sp)   // not emitted if callee-saved reg is chosen.
      ...
      lw $2, 4($gp)
      ...
      jalr $25          // function call.
      lw $gp, 16($sp)   // not emitted if $gp is not live after this instruction.
      ...
      
      llvm-svn: 151402
      b049aef2
  8. Feb 17, 2012
  9. Jan 25, 2012
  10. Jan 06, 2012
  11. Dec 21, 2011
  12. Dec 20, 2011
  13. Dec 19, 2011
  14. Dec 09, 2011
  15. Dec 08, 2011
    • Akira Hatanaka's avatar
      Implement 64-bit support for thread local storage handling. · dee6c827
      Akira Hatanaka authored
      - Modify lowering of global TLS address nodes.
      - Modify isel of ThreadPointer.
      - Wrap target global TLS address nodes that are operands of loads with WrapperPIC. 
      - Remove Mips-specific DAG nodes TlsGd, TprelHi and TprelLo, which can be
        substituted with other existing nodes.
      
      llvm-svn: 146175
      dee6c827
  16. Dec 07, 2011
  17. Oct 11, 2011
  18. Oct 03, 2011
  19. Sep 21, 2011
  20. Aug 16, 2011
    • Akira Hatanaka's avatar
      Fix handling of double precision loads and stores when Mips1 is targeted. · 2263c109
      Akira Hatanaka authored
      Mips1 does not support double precision loads or stores, therefore two single
      precision loads or stores must be used in place of these instructions. This 
      patch treats double precision loads and stores as if they are legal
      instructions until MCInstLowering, instead of generating the single precision
      instructions during instruction selection or Prolog/Epilog code insertion.
      
      Without the changes made in this patch, llc produces code that has the same 
      problem described in r137484 or bails out when
      MipsInstrInfo::storeRegToStackSlot or loadRegFromStackSlot is called before
      register allocation.
      
      llvm-svn: 137711
      2263c109
  21. Aug 12, 2011
    • Akira Hatanaka's avatar
      When constant double 0.0 is lowered, make sure 0 is copied directly from an · 7bd6e6eb
      Akira Hatanaka authored
      integer register to a floating point register. It is not valid to interpret
      the value of a floating pointer register as part of a double precision
      floating point value after a single precision floating point computational
      or move instruction stores its result to the register.
      
      - In the test case, the following code is generated before this patch is
        applied:
      mtc1  $zero, $f2    ; unformatted copy to $f2
      mov.s $f0, $f2      ; $f0 is in single format
      sdc1  $f12, 0($sp)
      mov.s $f1, $f2      ; $f1 is in single format
      c.eq.d  $f12, $f0   ; $f0 cannot be interpreted as double
      
      - The following code is generated after this patch is applied:
      mtc1  $zero, $f0    ; unformatted copy to $f0
      mtc1  $zero, $f1    ; unformatted copy to $f1
      c.eq.d  $f12, $f0   ; $f0 can be interpreted as double
      
      Bhanu Chetlapalli and Chris Dearman at MIPS technologies reported this bug and
      provided the test case.
      
      llvm-svn: 137484
      7bd6e6eb
  22. Jul 07, 2011
  23. Jun 24, 2011
  24. Jun 21, 2011
  25. Jun 09, 2011
  26. Jun 07, 2011
  27. Jun 02, 2011
  28. May 31, 2011
Loading