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