Skip to content
  1. Mar 08, 2009
    • Chris Lattner's avatar
      change the MemIntrinsic get/setAlignment method to take an unsigned · dc35e5b4
      Chris Lattner authored
      instead of a Constant*, which is what the clients of it really want.
      
      llvm-svn: 66364
      dc35e5b4
    • Evan Cheng's avatar
      de22116f
    • Chris Lattner's avatar
      use MemTransferInst. · fee0a55c
      Chris Lattner authored
      llvm-svn: 66362
      fee0a55c
    • Chris Lattner's avatar
      Introduce a new MemTransferInst pseudo class, which is a common · 334268a2
      Chris Lattner authored
      parent between MemCpyInst and MemMoveInst, simplify some code to
      use it.
      
      llvm-svn: 66361
      334268a2
    • Chris Lattner's avatar
      add a note. · 393ac628
      Chris Lattner authored
      llvm-svn: 66360
      393ac628
    • Chris Lattner's avatar
      add a note. · cfd1f7aa
      Chris Lattner authored
      llvm-svn: 66359
      cfd1f7aa
    • Chris Lattner's avatar
      implement an optimization to codegen c ? 1.0 : 2.0 as load { 2.0, 1.0 } + c*4. · ab5a4431
      Chris Lattner authored
      For 2009-03-07-FPConstSelect.ll we now produce:
      
      _f:
      	xorl	%eax, %eax
      	testl	%edi, %edi
      	movl	$4, %ecx
      	cmovne	%rax, %rcx
      	leaq	LCPI1_0(%rip), %rax
      	movss	(%rcx,%rax), %xmm0
      	ret
      
      previously we produced:
      
      _f:
      	subl	$4, %esp
      	cmpl	$0, 8(%esp)
      	movss	LCPI1_0, %xmm0
      	je	LBB1_2	## entry
      LBB1_1:	## entry
      	movss	LCPI1_1, %xmm0
      LBB1_2:	## entry
      	movss	%xmm0, (%esp)
      	flds	(%esp)
      	addl	$4, %esp
      	ret
      
      on PPC the code also improves to:
      
      _f:
      	cntlzw r2, r3
      	srwi r2, r2, 5
      	li r3, lo16(LCPI1_0)
      	slwi r2, r2, 2
      	addis r3, r3, ha16(LCPI1_0)
      	lfsx f1, r3, r2
      	blr 
      
      from:
      
      _f:
      	li r2, lo16(LCPI1_1)
      	cmplwi cr0, r3, 0
      	addis r2, r2, ha16(LCPI1_1)
      	beq cr0, LBB1_2	; entry
      LBB1_1:	; entry
      	li r2, lo16(LCPI1_0)
      	addis r2, r2, ha16(LCPI1_0)
      LBB1_2:	; entry
      	lfs f1, 0(r2)
      	blr 
      
      This also improves the existing pic-cpool case from:
      
      foo:
      	subl	$12, %esp
      	call	.Lllvm$1.$piclabel
      .Lllvm$1.$piclabel:
      	popl	%eax
      	addl	$_GLOBAL_OFFSET_TABLE_ + [.-.Lllvm$1.$piclabel], %eax
      	cmpl	$0, 16(%esp)
      	movsd	.LCPI1_0@GOTOFF(%eax), %xmm0
      	je	.LBB1_2	# entry
      .LBB1_1:	# entry
      	movsd	.LCPI1_1@GOTOFF(%eax), %xmm0
      .LBB1_2:	# entry
      	movsd	%xmm0, (%esp)
      	fldl	(%esp)
      	addl	$12, %esp
      	ret
      
      to:
      
      foo:
      	call	.Lllvm$1.$piclabel
      .Lllvm$1.$piclabel:
      	popl	%eax
      	addl	$_GLOBAL_OFFSET_TABLE_ + [.-.Lllvm$1.$piclabel], %eax
      	xorl	%ecx, %ecx
      	cmpl	$0, 4(%esp)
      	movl	$8, %edx
      	cmovne	%ecx, %edx
      	fldl	.LCPI1_0@GOTOFF(%eax,%edx)
      	ret
      
      This triggers a few dozen times in spec FP 2000.
      
      llvm-svn: 66358
      ab5a4431
    • Chris Lattner's avatar
      random cleanups. · 21cf4bf2
      Chris Lattner authored
      llvm-svn: 66357
      21cf4bf2
    • Chris Lattner's avatar
      fix a serious pessimization that Tron on IRC pointed out where we would · e3132831
      Chris Lattner authored
      "boolify" pointers, generating really awful code because getting the pointer
      value requires a load itself.  Before:
      
      _foo:
      	movb	$1, _X.b
      	ret
      _get:
      	xorl	%ecx, %ecx
      	movb	_X.b, %al
      	testb	%al, %al
      	movl	$_Y, %eax
      	cmove	%ecx, %eax
      	ret
      
      With the xform disabled:
      
      _foo:
      	movl	$_Y, _X
      	ret
      _get:
      	movl	_X, %eax
      	ret
      
      llvm-svn: 66351
      e3132831
  2. Mar 07, 2009
    • Duncan Sands's avatar
      Introduce new linkage types linkonce_odr, weak_odr, common_odr · 12da8ce3
      Duncan Sands authored
      and extern_weak_odr.  These are the same as the non-odr versions,
      except that they indicate that the global will only be overridden
      by an *equivalent* global.  In C, a function with weak linkage can
      be overridden by a function which behaves completely differently.
      This means that IP passes have to skip weak functions, since any
      deductions made from the function definition might be wrong, since
      the definition could be replaced by something completely different
      at link time.   This is not allowed in C++, thanks to the ODR
      (One-Definition-Rule): if a function is replaced by another at
      link-time, then the new function must be the same as the original
      function.  If a language knows that a function or other global can
      only be overridden by an equivalent global, it can give it the
      weak_odr linkage type, and the optimizers will understand that it
      is alright to make deductions based on the function body.  The
      code generators on the other hand map weak and weak_odr linkage
      to the same thing.
      
      llvm-svn: 66339
      12da8ce3
    • Gabor Greif's avatar
      simplify the way how traits get hold of the symbol table · 51bbcf83
      Gabor Greif authored
      llvm-svn: 66336
      51bbcf83
    • Gabor Greif's avatar
      6e1ca84d
    • Chris Lattner's avatar
      When a crash signal is delivered do two things: remove all of our · 6acb4d6f
      Chris Lattner authored
      signal handlers to prevent reentrance on unrelated things (a sigabort
      where the handle bus errors) also, clear the signal mask so that the
      signal doesn't infinitely reissue.  This fixes rdar://6654827 -
      Crash causes clang to loop
      
      llvm-svn: 66330
      6acb4d6f
    • Nate Begeman's avatar
      Finish cross-process JIT work, and clean up previous work. · 52b696c7
      Nate Begeman authored
      1. When the JIT is asked to remove a function, updating it's
         mapping to 0, we invalidate any function stubs used only 
         by that function.  Now, also invalidate the JIT's mapping
         from the GV the stub pointed to, to the address of the GV.
      
      2. When dlsym stubs for cross-process JIT are enabled, do not
         abort just because a named function cannot be found in the
         JIT's process.
      
      3. Fix various assumptions about when it is ok to use the lazy
         resolver when non-lazy JITing is enabled.
      
      llvm-svn: 66324
      52b696c7
    • Dan Gohman's avatar
      Arithmetic instructions don't set EFLAGS bits OF and CF bits · ff659b5b
      Dan Gohman authored
      the same say the "test" instruction does in overflow cases,
      so eliminating the test is only safe when those bits aren't
      needed, as is the case for COND_E and COND_NE, or if it
      can be proven that no overflow will occur. For now, just
      restrict the optimization to COND_E and COND_NE and don't
      do any overflow analysis.
      
      llvm-svn: 66318
      ff659b5b
  3. Mar 06, 2009
  4. Mar 05, 2009
Loading