Home | History | Annotate | Download | only in SimplifyLibCalls
      1 ; Test that the StrCatOptimizer works correctly
      2 ; RUN: opt < %s -simplify-libcalls -S | \
      3 ; RUN:    not grep {call.*strlen}
      4 
      5 target datalayout = "e-p:32:32"
      6 @hello = constant [6 x i8] c"hello\00"		; <[6 x i8]*> [#uses=3]
      7 @null = constant [1 x i8] zeroinitializer		; <[1 x i8]*> [#uses=3]
      8 @null_hello = constant [7 x i8] c"\00hello\00"		; <[7 x i8]*> [#uses=1]
      9 
     10 declare i32 @strlen(i8*)
     11 
     12 define i32 @test1() {
     13 	%hello_p = getelementptr [6 x i8]* @hello, i32 0, i32 0		; <i8*> [#uses=1]
     14 	%hello_l = call i32 @strlen( i8* %hello_p )		; <i32> [#uses=1]
     15 	ret i32 %hello_l
     16 }
     17 
     18 define i32 @test2() {
     19 	%null_p = getelementptr [1 x i8]* @null, i32 0, i32 0		; <i8*> [#uses=1]
     20 	%null_l = call i32 @strlen( i8* %null_p )		; <i32> [#uses=1]
     21 	ret i32 %null_l
     22 }
     23 
     24 define i32 @test3() {
     25 	%null_hello_p = getelementptr [7 x i8]* @null_hello, i32 0, i32 0		; <i8*> [#uses=1]
     26 	%null_hello_l = call i32 @strlen( i8* %null_hello_p )		; <i32> [#uses=1]
     27 	ret i32 %null_hello_l
     28 }
     29 
     30 define i1 @test4() {
     31 	%hello_p = getelementptr [6 x i8]* @hello, i32 0, i32 0		; <i8*> [#uses=1]
     32 	%hello_l = call i32 @strlen( i8* %hello_p )		; <i32> [#uses=1]
     33 	%eq_hello = icmp eq i32 %hello_l, 0		; <i1> [#uses=1]
     34 	ret i1 %eq_hello
     35 }
     36 
     37 define i1 @test5() {
     38 	%null_p = getelementptr [1 x i8]* @null, i32 0, i32 0		; <i8*> [#uses=1]
     39 	%null_l = call i32 @strlen( i8* %null_p )		; <i32> [#uses=1]
     40 	%eq_null = icmp eq i32 %null_l, 0		; <i1> [#uses=1]
     41 	ret i1 %eq_null
     42 }
     43 
     44 define i1 @test6() {
     45 	%hello_p = getelementptr [6 x i8]* @hello, i32 0, i32 0		; <i8*> [#uses=1]
     46 	%hello_l = call i32 @strlen( i8* %hello_p )		; <i32> [#uses=1]
     47 	%ne_hello = icmp ne i32 %hello_l, 0		; <i1> [#uses=1]
     48 	ret i1 %ne_hello
     49 }
     50 
     51 define i1 @test7() {
     52 	%null_p = getelementptr [1 x i8]* @null, i32 0, i32 0		; <i8*> [#uses=1]
     53 	%null_l = call i32 @strlen( i8* %null_p )		; <i32> [#uses=1]
     54 	%ne_null = icmp ne i32 %null_l, 0		; <i1> [#uses=1]
     55 	ret i1 %ne_null
     56 }
     57