blob: 04c4e95710c50457c2b81a2890ebd710c9e6e5bf [file] [log] [blame]
Evan Chengdd3a41a2010-09-23 06:55:34 +00001; RUN: llc < %s -march=x86 -tailcallopt | FileCheck %s
Arnold Schwaighofer363f53f2008-09-11 22:24:28 +00002
3declare i32 @putchar(i32)
4
Evan Cheng86809cc2010-02-03 03:28:02 +00005define fastcc i32 @checktail(i32 %x, i32* %f, i32 %g) nounwind {
Evan Chengdd3a41a2010-09-23 06:55:34 +00006; CHECK: checktail:
Arnold Schwaighofer363f53f2008-09-11 22:24:28 +00007 %tmp1 = icmp sgt i32 %x, 0
8 br i1 %tmp1, label %if-then, label %if-else
9
10if-then:
11 %fun_ptr = bitcast i32* %f to i32(i32, i32*, i32)*
12 %arg1 = add i32 %x, -1
13 call i32 @putchar(i32 90)
Evan Chengdd3a41a2010-09-23 06:55:34 +000014; CHECK: jmpl *%e{{.*}}
Arnold Schwaighofer363f53f2008-09-11 22:24:28 +000015 %res = tail call fastcc i32 %fun_ptr( i32 %arg1, i32 * %f, i32 %g)
16 ret i32 %res
17
18if-else:
19 ret i32 %x
20}
21
22
Evan Cheng86809cc2010-02-03 03:28:02 +000023define i32 @main() nounwind {
Arnold Schwaighofer363f53f2008-09-11 22:24:28 +000024 %f = bitcast i32 (i32, i32*, i32)* @checktail to i32*
25 %res = tail call fastcc i32 @checktail( i32 10, i32* %f,i32 10)
26 ret i32 %res
Evan Cheng86809cc2010-02-03 03:28:02 +000027}