1475cfe42c05aa84d599835ef44c3e7fe641f5b36Chris Lattner; Test that the memcmpOptimizer works correctly
248aefe15d08e4046b94715ea44e1f4a94af481a6Benjamin Kramer; RUN: opt < %s -simplify-libcalls -S | FileCheck %s
3475cfe42c05aa84d599835ef44c3e7fe641f5b36Chris Lattner
4ceca194c4355224723b309a3a27c5e5bc19cb6fcTanya Lattner@h = constant [2 x i8] c"h\00"		; <[2 x i8]*> [#uses=0]
5ceca194c4355224723b309a3a27c5e5bc19cb6fcTanya Lattner@hel = constant [4 x i8] c"hel\00"		; <[4 x i8]*> [#uses=0]
6ceca194c4355224723b309a3a27c5e5bc19cb6fcTanya Lattner@hello_u = constant [8 x i8] c"hello_u\00"		; <[8 x i8]*> [#uses=0]
7475cfe42c05aa84d599835ef44c3e7fe641f5b36Chris Lattner
8ceca194c4355224723b309a3a27c5e5bc19cb6fcTanya Lattnerdeclare i32 @memcmp(i8*, i8*, i32)
9475cfe42c05aa84d599835ef44c3e7fe641f5b36Chris Lattner
10ceca194c4355224723b309a3a27c5e5bc19cb6fcTanya Lattnerdefine void @test(i8* %P, i8* %Q, i32 %N, i32* %IP, i1* %BP) {
11ceca194c4355224723b309a3a27c5e5bc19cb6fcTanya Lattner	%A = call i32 @memcmp( i8* %P, i8* %P, i32 %N )		; <i32> [#uses=1]
1248aefe15d08e4046b94715ea44e1f4a94af481a6Benjamin Kramer; CHECK-NOT: call {{.*}} memcmp
13f03bb260c90ad013aa4e55af36382875011c95b8Eli Friedman; CHECK: store volatile
14f03bb260c90ad013aa4e55af36382875011c95b8Eli Friedman	store volatile i32 %A, i32* %IP
15ceca194c4355224723b309a3a27c5e5bc19cb6fcTanya Lattner	%B = call i32 @memcmp( i8* %P, i8* %Q, i32 0 )		; <i32> [#uses=1]
1648aefe15d08e4046b94715ea44e1f4a94af481a6Benjamin Kramer; CHECK-NOT: call {{.*}} memcmp
17f03bb260c90ad013aa4e55af36382875011c95b8Eli Friedman; CHECK: store volatile
18f03bb260c90ad013aa4e55af36382875011c95b8Eli Friedman	store volatile i32 %B, i32* %IP
19ceca194c4355224723b309a3a27c5e5bc19cb6fcTanya Lattner	%C = call i32 @memcmp( i8* %P, i8* %Q, i32 1 )		; <i32> [#uses=1]
2048aefe15d08e4046b94715ea44e1f4a94af481a6Benjamin Kramer; CHECK: load
2148aefe15d08e4046b94715ea44e1f4a94af481a6Benjamin Kramer; CHECK: zext
2248aefe15d08e4046b94715ea44e1f4a94af481a6Benjamin Kramer; CHECK: load
2348aefe15d08e4046b94715ea44e1f4a94af481a6Benjamin Kramer; CHECK: zext
2448aefe15d08e4046b94715ea44e1f4a94af481a6Benjamin Kramer; CHECK: sub
25f03bb260c90ad013aa4e55af36382875011c95b8Eli Friedman; CHECK: store volatile
26f03bb260c90ad013aa4e55af36382875011c95b8Eli Friedman	store volatile i32 %C, i32* %IP
27f03bb260c90ad013aa4e55af36382875011c95b8Eli Friedman  %F = call i32 @memcmp(i8* getelementptr ([4 x i8]* @hel, i32 0, i32 0),
28f03bb260c90ad013aa4e55af36382875011c95b8Eli Friedman                        i8* getelementptr ([8 x i8]* @hello_u, i32 0, i32 0),
29f03bb260c90ad013aa4e55af36382875011c95b8Eli Friedman                        i32 3)
3048aefe15d08e4046b94715ea44e1f4a94af481a6Benjamin Kramer; CHECK-NOT: call {{.*}} memcmp
31f03bb260c90ad013aa4e55af36382875011c95b8Eli Friedman; CHECK: store volatile
32f03bb260c90ad013aa4e55af36382875011c95b8Eli Friedman  store volatile i32 %F, i32* %IP
33ceca194c4355224723b309a3a27c5e5bc19cb6fcTanya Lattner	ret void
34475cfe42c05aa84d599835ef44c3e7fe641f5b36Chris Lattner}
35ceca194c4355224723b309a3a27c5e5bc19cb6fcTanya Lattner
36