Skip to content
  1. Mar 27, 2012
  2. Mar 08, 2012
  3. Mar 01, 2012
  4. Feb 28, 2012
  5. 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
  6. Feb 17, 2012
  7. Jan 25, 2012
  8. Jan 06, 2012
  9. Dec 21, 2011
  10. Dec 20, 2011
  11. Dec 19, 2011
  12. Dec 09, 2011
  13. 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
  14. Dec 07, 2011
  15. Oct 11, 2011
  16. Oct 03, 2011
  17. Sep 21, 2011
  18. 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
  19. 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
  20. Jul 07, 2011
  21. Jun 24, 2011
  22. Jun 21, 2011
  23. Jun 09, 2011
  24. Jun 07, 2011
  25. Jun 02, 2011
  26. May 31, 2011
  27. May 28, 2011
  28. Apr 15, 2011
Loading