Benjamin Kramer | 59e43bd | 2011-10-29 19:43:31 +0000 | [diff] [blame^] | 1 | ; RUN: opt < %s -simplify-libcalls -S | FileCheck %s |
Daniel Dunbar | 43186a4 | 2011-02-12 18:19:53 +0000 | [diff] [blame] | 2 | |
Chris Lattner | 9a34ecd | 2007-04-14 01:17:38 +0000 | [diff] [blame] | 3 | @str = internal constant [13 x i8] c"hello world\0A\00" ; <[13 x i8]*> [#uses=1] |
| 4 | @str1 = internal constant [2 x i8] c"h\00" ; <[2 x i8]*> [#uses=1] |
| 5 | |
Benjamin Kramer | 59e43bd | 2011-10-29 19:43:31 +0000 | [diff] [blame^] | 6 | ; CHECK: internal unnamed_addr constant [12 x i8] c"hello world\00" |
| 7 | |
Daniel Dunbar | d02be24 | 2011-02-12 18:19:57 +0000 | [diff] [blame] | 8 | declare i32 @printf(i8*, ...) |
| 9 | |
| 10 | ; CHECK: define void @f0 |
| 11 | ; CHECK-NOT: printf |
| 12 | ; CHECK: } |
| 13 | define void @f0() { |
Chris Lattner | 9a34ecd | 2007-04-14 01:17:38 +0000 | [diff] [blame] | 14 | entry: |
| 15 | %tmp1 = tail call i32 (i8*, ...)* @printf( i8* getelementptr ([13 x i8]* @str, i32 0, i32 0) ) ; <i32> [#uses=0] |
| 16 | ret void |
| 17 | } |
| 18 | |
Daniel Dunbar | d02be24 | 2011-02-12 18:19:57 +0000 | [diff] [blame] | 19 | ; CHECK: define void @f1 |
| 20 | ; CHECK-NOT: printf |
| 21 | ; CHECK: } |
| 22 | define void @f1() { |
Chris Lattner | 9a34ecd | 2007-04-14 01:17:38 +0000 | [diff] [blame] | 23 | entry: |
| 24 | %tmp1 = tail call i32 (i8*, ...)* @printf( i8* getelementptr ([2 x i8]* @str1, i32 0, i32 0) ) ; <i32> [#uses=0] |
| 25 | ret void |
| 26 | } |
| 27 | |
Daniel Dunbar | d02be24 | 2011-02-12 18:19:57 +0000 | [diff] [blame] | 28 | ; Verify that we don't turn this into a putchar call (thus changing the return |
| 29 | ; value). |
| 30 | ; |
| 31 | ; CHECK: define i32 @f2 |
| 32 | ; CHECK: printf |
| 33 | ; CHECK: } |
| 34 | define i32 @f2() { |
| 35 | %call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([2 x i8]* @str1, i32 0, i32 0)) |
| 36 | ret i32 %call |
| 37 | } |