Skip to content
  1. Sep 21, 2010
    • Chris Lattner's avatar
      refactor the Value*/offset pair from MachineMemOperand out to a new · 187f6534
      Chris Lattner authored
      MachinePointerInfo struct, no functionality change.
      
      This also adds an assert to MachineMemOperand::MachineMemOperand
      that verifies that the Value* is either null or is an IR pointer type.
      
      llvm-svn: 114389
      187f6534
    • Evan Cheng's avatar
      Enable machine sinking critical edge splitting. e.g. · f3e9a485
      Evan Cheng authored
      define double @foo(double %x, double %y, i1 %c) nounwind {
        %a = fdiv double %x, 3.2
        %z = select i1 %c, double %a, double %y
        ret double %z
      }
      
      Was:
      _foo:
              divsd   LCPI0_0(%rip), %xmm0
              testb   $1, %dil
              jne     LBB0_2
              movaps  %xmm1, %xmm0
      LBB0_2:
              ret
      
      Now:
      _foo:
              testb   $1, %dil
              je      LBB0_2
              divsd   LCPI0_0(%rip), %xmm0
              ret
      LBB0_2:
              movaps  %xmm1, %xmm0
              ret
      
      This avoids the divsd when early exit is taken.
      rdar://8454886
      
      llvm-svn: 114372
      f3e9a485
  2. Sep 20, 2010
  3. Sep 19, 2010
  4. Sep 18, 2010
  5. Sep 17, 2010
  6. Sep 16, 2010
    • Devang Patel's avatar
      If FE forgot to provide a file name (usually it uses "stdin" as name in such... · 871d0b1b
      Devang Patel authored
      If FE forgot to provide a file name (usually it uses "stdin" as name in such situation) then make one up to ensure that debug info is not malformed.
      
      llvm-svn: 114119
      871d0b1b
    • Jakob Stoklund Olesen's avatar
      Use the value mapping provided by LiveIntervalMap. This simplifies the code a · 9855109b
      Jakob Stoklund Olesen authored
      great deal because we don't have to worry about maintaining SSA form.
      
      Unconditionally copy back to dupli when the register is live out of the split
      range, even if the live-out value was defined outside the range. Skipping the
      back-copy only makes sense when the live range is going to spill outside the
      split range, and we don't know that it will. Besides, this was a hack to avoid
      SSA update issues.
      
      Clear up some confusion about the end point of a half-open LiveRange. Methinks
      LiveRanges need to be closed so both start and end are included in the range.
      The low bits of a SlotIndex are symbolic, so a half-open range doesn't really
      make sense. This would be a pervasive change, though.
      
      llvm-svn: 114043
      9855109b
  7. Sep 15, 2010
  8. Sep 14, 2010
  9. Sep 13, 2010
  10. Sep 11, 2010
  11. Sep 10, 2010
  12. Sep 08, 2010
    • Jakob Stoklund Olesen's avatar
      Remove dead code. · 79e838b0
      Jakob Stoklund Olesen authored
      llvm-svn: 113386
      79e838b0
    • Jakob Stoklund Olesen's avatar
      Don't add <imp-def> operands during register rewriting. · 4d19d265
      Jakob Stoklund Olesen authored
      LiveIntervals already adds <imp-def> operands for super-registers when a subreg
      def defines the whole register. Thus, it is not necessary to do it again when
      rewriting.
      
      In fact, the super-register imp-defs caused miscompilations because the late
      scheduler couldn't see that the super-register was read.
      
      We still add super-reg <imp-use,kill> operands when rewriting virtuals to
      physicals.
      
      llvm-svn: 113299
      4d19d265
  13. Sep 05, 2010
    • Chris Lattner's avatar
      add a comment about where this should eventually move. · 419d0aa0
      Chris Lattner authored
      llvm-svn: 113117
      419d0aa0
    • Lang Hames's avatar
      Added initialisers for reduction rule counters. · 64a4a136
      Lang Hames authored
      llvm-svn: 113108
      64a4a136
    • Chris Lattner's avatar
      implement rdar://6653118 - fastisel should fold loads where possible. · eeba0c73
      Chris Lattner authored
      Since mem2reg isn't run at -O0, we get a ton of reloads from the stack,
      for example, before, this code:
      
      int foo(int x, int y, int z) {
        return x+y+z;
      }
      
      used to compile into:
      
      _foo:                                   ## @foo
      	subq	$12, %rsp
      	movl	%edi, 8(%rsp)
      	movl	%esi, 4(%rsp)
      	movl	%edx, (%rsp)
      	movl	8(%rsp), %edx
      	movl	4(%rsp), %esi
      	addl	%edx, %esi
      	movl	(%rsp), %edx
      	addl	%esi, %edx
      	movl	%edx, %eax
      	addq	$12, %rsp
      	ret
      
      Now we produce:
      
      _foo:                                   ## @foo
      	subq	$12, %rsp
      	movl	%edi, 8(%rsp)
      	movl	%esi, 4(%rsp)
      	movl	%edx, (%rsp)
      	movl	8(%rsp), %edx
      	addl	4(%rsp), %edx    ## Folded load
      	addl	(%rsp), %edx     ## Folded load
      	movl	%edx, %eax
      	addq	$12, %rsp
      	ret
      
      Fewer instructions and less register use = faster compiles.
      
      llvm-svn: 113102
      eeba0c73
Loading