[llvm-commits] [llvm] r99598 - in /llvm/trunk: lib/Target/X86/X86ISelLowering.cpp test/CodeGen/X86/pic.ll test/CodeGen/X86/sibcall.ll test/CodeGen/X86/xor-icmp.ll

Jim Grosbach grosbach at apple.com
Thu Mar 25 19:27:33 PDT 2010


Is Outs only the variable portion of the argument list? If it includes the fixed portion, it'll never be empty for a varargs function, right?

On Mar 25, 2010, at 7:13 PM, Evan Cheng wrote:

> Author: evancheng
> Date: Thu Mar 25 21:13:13 2010
> New Revision: 99598
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=99598&view=rev
> Log:
> Allow trivial sibcall of vararg callee when no arguments are being passed.
> 
> Modified:
>    llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
>    llvm/trunk/test/CodeGen/X86/pic.ll
>    llvm/trunk/test/CodeGen/X86/sibcall.ll
>    llvm/trunk/test/CodeGen/X86/xor-icmp.ll
> 
> Modified: llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelLowering.cpp?rev=99598&r1=99597&r2=99598&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/X86/X86ISelLowering.cpp (original)
> +++ llvm/trunk/lib/Target/X86/X86ISelLowering.cpp Thu Mar 25 21:13:13 2010
> @@ -2301,8 +2301,9 @@
>   // Look for obvious safe cases to perform tail call optimization that does not
>   // requite ABI changes. This is what gcc calls sibcall.
> 
> -  // Do not sibcall optimize vararg calls for now.
> -  if (isVarArg)
> +  // Do not sibcall optimize vararg calls unless the call site is not passing any
> +  // arguments.
> +  if (isVarArg && !Outs.empty())
>     return false;
> 
>   // Also avoid sibcall optimization if either caller or callee uses struct
> 
> Modified: llvm/trunk/test/CodeGen/X86/pic.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/pic.ll?rev=99598&r1=99597&r2=99598&view=diff
> ==============================================================================
> --- llvm/trunk/test/CodeGen/X86/pic.ll (original)
> +++ llvm/trunk/test/CodeGen/X86/pic.ll Thu Mar 25 21:13:13 2010
> @@ -194,10 +194,10 @@
> 
> ; LINUX: .LJTI8_0:
> ; LINUX:   .long	 .LBB8_2 at GOTOFF
> -; LINUX:   .long	 .LBB8_2 at GOTOFF
> -; LINUX:   .long	 .LBB8_7 at GOTOFF
> -; LINUX:   .long	 .LBB8_3 at GOTOFF
> -; LINUX:   .long	 .LBB8_7 at GOTOFF
> +; LINUX:   .long	 .LBB8_8 at GOTOFF
> +; LINUX:   .long	 .LBB8_14 at GOTOFF
> +; LINUX:   .long	 .LBB8_9 at GOTOFF
> +; LINUX:   .long	 .LBB8_10 at GOTOFF
> }
> 
> declare void @foo1(...)
> 
> Modified: llvm/trunk/test/CodeGen/X86/sibcall.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/sibcall.ll?rev=99598&r1=99597&r2=99598&view=diff
> ==============================================================================
> --- llvm/trunk/test/CodeGen/X86/sibcall.ll (original)
> +++ llvm/trunk/test/CodeGen/X86/sibcall.ll Thu Mar 25 21:13:13 2010
> @@ -271,3 +271,34 @@
> }
> 
> declare double @bar4()
> +
> +; rdar://6283267
> +define void @t17() nounwind ssp {
> +entry:
> +; 32: t17:
> +; 32: jmp {{_?}}bar5
> +
> +; 64: t17:
> +; 64: xorb %al, %al
> +; 64: jmp {{_?}}bar5
> +  tail call void (...)* @bar5() nounwind
> +  ret void
> +}
> +
> +declare void @bar5(...)
> +
> +; rdar://7774847
> +define void @t18() nounwind ssp {
> +entry:
> +; 32: t18:
> +; 32: call {{_?}}bar6
> +; 32: fstp %st(0)
> +
> +; 64: t18:
> +; 64: xorb %al, %al
> +; 64: jmp {{_?}}bar6
> +  %0 = tail call double (...)* @bar6() nounwind
> +  ret void
> +}
> +
> +declare double @bar6(...)
> 
> Modified: llvm/trunk/test/CodeGen/X86/xor-icmp.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/xor-icmp.ll?rev=99598&r1=99597&r2=99598&view=diff
> ==============================================================================
> --- llvm/trunk/test/CodeGen/X86/xor-icmp.ll (original)
> +++ llvm/trunk/test/CodeGen/X86/xor-icmp.ll Thu Mar 25 21:13:13 2010
> @@ -43,7 +43,7 @@
> ; X32: cmpl
> ; X32: sete
> ; X32-NOT: xor
> -; X32: je
> +; X32: jne
> 
> ; X64: t2:
> ; X64: testl
> @@ -51,7 +51,7 @@
> ; X64: testl
> ; X64: sete
> ; X64-NOT: xor
> -; X64: je
> +; X64: jne
> entry:
>   %0 = icmp eq i32 %x, 0                          ; <i1> [#uses=1]
>   %1 = icmp eq i32 %y, 0                          ; <i1> [#uses=1]
> 
> 
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits





More information about the llvm-commits mailing list