Skip to content
  1. Mar 23, 2013
    • Hal Finkel's avatar
      Cleanup some unused reg. scavenger parameters in PPCRegisterInfo · c6eaa4ce
      Hal Finkel authored
      These spilling functions will eventually make use of the register scavenger,
      however, they'll do so by taking advantage of PEI's virtual-register-based
      delayed scavenging mechanism. As a result, these function parameters will not
      be used, and can be removed.
      
      No functionality change intended.
      
      llvm-svn: 177827
      c6eaa4ce
    • Hal Finkel's avatar
      Remove dead PPC LR spilling code · 794e05b0
      Hal Finkel authored
      The LR register is unconditionally reserved, and its spilling and restoration
      is handled by the prologue/epilogue code. As a result, it is never explicitly
      spilled by the register allocator.
      
      No functionality change intended.
      
      llvm-svn: 177823
      794e05b0
    • Owen Anderson's avatar
      Remove the type legality check from the SelectionDAGBuilder when it lowers... · c81616b0
      Owen Anderson authored
      Remove the type legality check from the SelectionDAGBuilder when it lowers @llvm.fmuladd to ISD::FMA nodes.
      Performing this check unilaterally prevented us from generating FMAs when the incoming IR contained illegal vector types which would eventually be legalized to underlying types that *did* support FMA.
      For example, an @llvm.fmuladd on an OpenCL float16 should become a sequence of float4 FMAs, not float4 fmul+fadd's.
      
      NOTE: Because we still call the target-specific profitability hook, individual targets can reinstate the old behavior, if desired, by simply performing the legality check inside their callback hook.  They can also perform more sophisticated legality checks, if, for example, some illegal vector types can be productively implemented as FMAs, but not others.
      llvm-svn: 177820
      c81616b0
    • Michael Gottesman's avatar
      Change method name ClearRefCount => ClearKnownPositiveRefCount to match the... · 764b1cfc
      Michael Gottesman authored
      Change method name ClearRefCount => ClearKnownPositiveRefCount to match the name of the member that it is modifying.
      
      llvm-svn: 177818
      764b1cfc
    • Michael Gottesman's avatar
      Changed the method name PtrState.IsKnownIncremented() to PtrState.HasKnownPositiveRefCount(). · 07beea47
      Michael Gottesman authored
      Now said method matches namewise every other method which refers to
      the member KnownPositiveRefCount of the class PtrState.
      
      llvm-svn: 177816
      07beea47
    • Hal Finkel's avatar
      Fix comparison of mixed signedness · 446122ed
      Hal Finkel authored
      177774 broke the lld-x86_64-darwin11 builder; error:
      error: comparison of integers of different signs: 'int' and 'size_type' (aka 'unsigned long')
        for (SI = 0; SI < Scavenged.size(); ++SI)
                     ~~ ^ ~~~~~~~~~~~~~~~~
      
      Fix this by making SI also unsigned.
      
      llvm-svn: 177780
      446122ed
    • Hal Finkel's avatar
      Allow the register scavenger to spill multiple registers · 9e331c2f
      Hal Finkel authored
      This patch lets the register scavenger make use of multiple spill slots in
      order to guarantee that it will be able to provide multiple registers
      simultaneously.
      
      To support this, the RS's API has changed slightly: setScavengingFrameIndex /
      getScavengingFrameIndex have been replaced by addScavengingFrameIndex /
      isScavengingFrameIndex / getScavengingFrameIndices.
      
      In forthcoming commits, the PowerPC backend will use this capability in order
      to implement the spilling of condition registers, and some special-purpose
      registers, without relying on r0 being reserved. In some cases, spilling these
      registers requires two GPRs: one for addressing and one to hold the value being
      transferred.
      
      llvm-svn: 177774
      9e331c2f
  2. Mar 22, 2013
  3. Mar 21, 2013
    • David Blaikie's avatar
    • Douglas Gregor's avatar
      <rdar://problem/13477190> On Darwin, use DARWIN_USER_TEMP_DIR or... · a86ddf04
      Douglas Gregor authored
      <rdar://problem/13477190> On Darwin, use DARWIN_USER_TEMP_DIR or DARWIN_USER_CACHE_DIR for the system temporary directory.
      
      The DARWIN_USER_TEMP_DIR and DARWIN_USER_CACHE_DIR configuration
      settings are more idiomatic for Darwin than the TMPDIR environment
      variable.
      
      llvm-svn: 177669
      a86ddf04
    • Jack Carter's avatar
      This patch enables the Mips .set directive to define aliases · d76b2376
      Jack Carter authored
      The .set directive in the Mips the assembler can be 
      used to set the value of a symbol to an expression. 
      This changes the symbol's value and type to conform 
      to the expression's.
      
      Syntax: .set symbol, expression
      
      This patch implements the parsing of the above syntax 
      and enables the parser to use defined symbols when 
      parsing operands.
      
      Contributor: Vladimir Medic
      llvm-svn: 177667
      d76b2376
    • Hal Finkel's avatar
      Implement builtin_{setjmp/longjmp} on PPC · 756810fe
      Hal Finkel authored
      This implements SJLJ lowering on PPC, making the Clang functions
      __builtin_{setjmp/longjmp} functional on PPC platforms. The implementation
      strategy is similar to that on X86, with the exception that a branch-and-link
      variant is used to get the right jump address. Credit goes to Bill Schmidt for
      suggesting the use of the unconditional bcl form (instead of the regular bl
      instruction) to limit return-address-cache pollution.
      
      Benchmarking the speed at -O3 of:
      
      static jmp_buf env_sigill;
      
      void foo() {
                      __builtin_longjmp(env_sigill,1);
      }
      
      main() {
      	...
      
              for (int i = 0; i < c; ++i) {
                      if (__builtin_setjmp(env_sigill)) {
                              goto done;
                      } else {
                              foo();
                      }
      
      done:;
              }
      
      	...
      }
      
      vs. the same code using the libc setjmp/longjmp functions on a P7 shows that
      this builtin implementation is ~4x faster with Altivec enabled and ~7.25x
      faster with Altivec disabled. This comparison is somewhat unfair because the
      libc version must also save/restore the VSX registers which we don't yet
      support.
      
      llvm-svn: 177666
      756810fe
Loading