NAKAMURA Takumi | 7754f85 | 2011-01-26 02:04:09 +0000 | [diff] [blame] | 1 | ; RUN: llc < %s -tailcallopt -mtriple=x86_64-linux -post-RA-scheduler=true | FileCheck %s |
| 2 | ; RUN: llc < %s -tailcallopt -mtriple=x86_64-win32 -post-RA-scheduler=true | FileCheck %s |
| 3 | |
| 4 | ; FIXME: Redundant unused stack allocation could be eliminated. |
Jakob Stoklund Olesen | 2e3e720 | 2011-06-03 22:45:21 +0000 | [diff] [blame^] | 5 | ; CHECK: subq ${{24|72|80}}, %rsp |
Dan Gohman | 98ca4f2 | 2009-08-05 01:29:28 +0000 | [diff] [blame] | 6 | |
Arnold Schwaighofer | d2ef523 | 2008-04-30 09:19:47 +0000 | [diff] [blame] | 7 | ; Check that lowered arguments on the stack do not overwrite each other. |
Dan Gohman | 98ca4f2 | 2009-08-05 01:29:28 +0000 | [diff] [blame] | 8 | ; Add %in1 %p1 to a different temporary register (%eax). |
Jakob Stoklund Olesen | b0e47cd | 2011-04-05 00:32:44 +0000 | [diff] [blame] | 9 | ; CHECK: movl [[A1:32|144]](%rsp), [[R1:%e..]] |
Dan Gohman | 98ca4f2 | 2009-08-05 01:29:28 +0000 | [diff] [blame] | 10 | ; Move param %in1 to temp register (%r10d). |
Jakob Stoklund Olesen | b0e47cd | 2011-04-05 00:32:44 +0000 | [diff] [blame] | 11 | ; CHECK: movl [[A2:40|152]](%rsp), [[R2:%[a-z0-9]+]] |
Dan Gohman | 584fedf | 2010-06-21 22:17:20 +0000 | [diff] [blame] | 12 | ; Add %in1 %p1 to a different temporary register (%eax). |
Jakob Stoklund Olesen | b0e47cd | 2011-04-05 00:32:44 +0000 | [diff] [blame] | 13 | ; CHECK: addl {{%edi|%ecx}}, [[R1]] |
Daniel Dunbar | 6242495 | 2009-11-13 01:01:58 +0000 | [diff] [blame] | 14 | ; Move param %in2 to stack. |
Jakob Stoklund Olesen | b0e47cd | 2011-04-05 00:32:44 +0000 | [diff] [blame] | 15 | ; CHECK: movl [[R2]], [[A1]](%rsp) |
Dan Gohman | 10190cc | 2009-11-16 23:43:42 +0000 | [diff] [blame] | 16 | ; Move result of addition to stack. |
Jakob Stoklund Olesen | b0e47cd | 2011-04-05 00:32:44 +0000 | [diff] [blame] | 17 | ; CHECK: movl [[R1]], [[A2]](%rsp) |
Dan Gohman | 98ca4f2 | 2009-08-05 01:29:28 +0000 | [diff] [blame] | 18 | ; Eventually, do a TAILCALL |
| 19 | ; CHECK: TAILCALL |
Arnold Schwaighofer | d2ef523 | 2008-04-30 09:19:47 +0000 | [diff] [blame] | 20 | |
Evan Cheng | d36076e | 2009-10-18 19:57:27 +0000 | [diff] [blame] | 21 | declare fastcc i32 @tailcallee(i32 %p1, i32 %p2, i32 %p3, i32 %p4, i32 %p5, i32 %p6, i32 %a, i32 %b) nounwind |
Arnold Schwaighofer | d2ef523 | 2008-04-30 09:19:47 +0000 | [diff] [blame] | 22 | |
Evan Cheng | d36076e | 2009-10-18 19:57:27 +0000 | [diff] [blame] | 23 | define fastcc i32 @tailcaller(i32 %p1, i32 %p2, i32 %p3, i32 %p4, i32 %p5, i32 %p6, i32 %in1, i32 %in2) nounwind { |
Arnold Schwaighofer | d2ef523 | 2008-04-30 09:19:47 +0000 | [diff] [blame] | 24 | entry: |
| 25 | %tmp = add i32 %in1, %p1 |
Arnold Schwaighofer | bbd8c33 | 2009-06-12 16:26:57 +0000 | [diff] [blame] | 26 | %retval = tail call fastcc i32 @tailcallee(i32 %p1, i32 %p2, i32 %p3, i32 %p4, i32 %p5, i32 %p6, i32 %in2,i32 %tmp) |
Arnold Schwaighofer | d2ef523 | 2008-04-30 09:19:47 +0000 | [diff] [blame] | 27 | ret i32 %retval |
| 28 | } |