blob: 4ec127f81ac7b7ba1a9b878fb542764919ba9f57 [file] [log] [blame]
Evan Chengf48ef032010-03-14 03:48:46 +00001; RUN: llc < %s -march=x86 -tailcallopt | grep {jmp} | grep {\\*%edx}
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 {
Arnold Schwaighofer363f53f2008-09-11 22:24:28 +00006 %tmp1 = icmp sgt i32 %x, 0
7 br i1 %tmp1, label %if-then, label %if-else
8
9if-then:
10 %fun_ptr = bitcast i32* %f to i32(i32, i32*, i32)*
11 %arg1 = add i32 %x, -1
12 call i32 @putchar(i32 90)
13 %res = tail call fastcc i32 %fun_ptr( i32 %arg1, i32 * %f, i32 %g)
14 ret i32 %res
15
16if-else:
17 ret i32 %x
18}
19
20
Evan Cheng86809cc2010-02-03 03:28:02 +000021define i32 @main() nounwind {
Arnold Schwaighofer363f53f2008-09-11 22:24:28 +000022 %f = bitcast i32 (i32, i32*, i32)* @checktail to i32*
23 %res = tail call fastcc i32 @checktail( i32 10, i32* %f,i32 10)
24 ret i32 %res
Evan Cheng86809cc2010-02-03 03:28:02 +000025}