[llvm] r192294 - [Sparc] Disable tail call optimization for sparc64.
Venkatraman Govindaraju
venkatra at cs.wisc.edu
Wed Oct 9 05:50:39 PDT 2013
Author: venkatra
Date: Wed Oct 9 07:50:39 2013
New Revision: 192294
URL: http://llvm.org/viewvc/llvm-project?rev=192294&view=rev
Log:
[Sparc] Disable tail call optimization for sparc64.
This patch fixes PR17506.
Modified:
llvm/trunk/lib/Target/Sparc/SparcISelLowering.cpp
llvm/trunk/test/CodeGen/SPARC/2011-01-11-Call.ll
Modified: llvm/trunk/lib/Target/Sparc/SparcISelLowering.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Sparc/SparcISelLowering.cpp?rev=192294&r1=192293&r2=192294&view=diff
==============================================================================
--- llvm/trunk/lib/Target/Sparc/SparcISelLowering.cpp (original)
+++ llvm/trunk/lib/Target/Sparc/SparcISelLowering.cpp Wed Oct 9 07:50:39 2013
@@ -1035,6 +1035,9 @@ SparcTargetLowering::LowerCall_64(Target
SDLoc DL = CLI.DL;
SDValue Chain = CLI.Chain;
+ // Sparc target does not yet support tail call optimization.
+ CLI.IsTailCall = false;
+
// Analyze operands of the call, assigning locations to each operand.
SmallVector<CCValAssign, 16> ArgLocs;
CCState CCInfo(CLI.CallConv, CLI.IsVarArg, DAG.getMachineFunction(),
Modified: llvm/trunk/test/CodeGen/SPARC/2011-01-11-Call.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/SPARC/2011-01-11-Call.ll?rev=192294&r1=192293&r2=192294&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/SPARC/2011-01-11-Call.ll (original)
+++ llvm/trunk/test/CodeGen/SPARC/2011-01-11-Call.ll Wed Oct 9 07:50:39 2013
@@ -1,4 +1,24 @@
; RUN: llc -march=sparc -O0 <%s
+; RUN: llc -march=sparc <%s | FileCheck %s --check-prefix=V8
+; RUN: llc -march=sparcv9 <%s | FileCheck %s --check-prefix=V9
+
+; V8-LABEL: test
+; V8: save %sp
+; V8: call foo
+; V8-NEXT: nop
+; V8: call bar
+; V8-NEXT: nop
+; V8: jmp %i7+8
+; V8-NEXT: restore
+
+; V9-LABEL: test
+; V9: save %sp
+; V9: call foo
+; V9-NEXT: nop
+; V9: call bar
+; V9-NEXT: nop
+; V9: jmp %i7+8
+; V9-NEXT: restore
define void @test() nounwind {
entry:
@@ -11,3 +31,23 @@ declare i32 @foo(...)
declare void @bar(...)
+
+; V8-LABEL: test_tail_call_with_return
+; V8: save %sp
+; V8: call foo
+; V8-NEXT: nop
+; V8: jmp %i7+8
+; V8-NEXT: restore %g0, %o0, %o0
+
+; V9-LABEL: test_tail_call_with_return
+; V9: save %sp
+; V9: call foo
+; V9-NEXT: nop
+; V9: jmp %i7+8
+; V9-NEXT: restore %g0, %o0, %o0
+
+define i32 @test_tail_call_with_return() nounwind {
+entry:
+ %0 = tail call i32 (...)* @foo() nounwind
+ ret i32 %0
+}
More information about the llvm-commits
mailing list