blob: caea311ba142f4095b604afaaa9c98a862369158 [file] [log] [blame]
Daniel Dunbar43186a42011-02-12 18:19:53 +00001; RUN: opt < %s -simplify-libcalls -S -o %t
2; RUN: FileCheck < %t %s
3
Chris Lattner9a34ecd2007-04-14 01:17:38 +00004@str = internal constant [13 x i8] c"hello world\0A\00" ; <[13 x i8]*> [#uses=1]
5@str1 = internal constant [2 x i8] c"h\00" ; <[2 x i8]*> [#uses=1]
6
Daniel Dunbard02be242011-02-12 18:19:57 +00007declare i32 @printf(i8*, ...)
8
9; CHECK: define void @f0
10; CHECK-NOT: printf
11; CHECK: }
12define void @f0() {
Chris Lattner9a34ecd2007-04-14 01:17:38 +000013entry:
14 %tmp1 = tail call i32 (i8*, ...)* @printf( i8* getelementptr ([13 x i8]* @str, i32 0, i32 0) ) ; <i32> [#uses=0]
15 ret void
16}
17
Daniel Dunbard02be242011-02-12 18:19:57 +000018; CHECK: define void @f1
19; CHECK-NOT: printf
20; CHECK: }
21define void @f1() {
Chris Lattner9a34ecd2007-04-14 01:17:38 +000022entry:
23 %tmp1 = tail call i32 (i8*, ...)* @printf( i8* getelementptr ([2 x i8]* @str1, i32 0, i32 0) ) ; <i32> [#uses=0]
24 ret void
25}
26
Daniel Dunbard02be242011-02-12 18:19:57 +000027; Verify that we don't turn this into a putchar call (thus changing the return
28; value).
29;
30; CHECK: define i32 @f2
31; CHECK: printf
32; CHECK: }
33define i32 @f2() {
34 %call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([2 x i8]* @str1, i32 0, i32 0))
35 ret i32 %call
36}